使用operator-sdk創建自己的k8s operator

前言

通過operator-sdk我們可以簡單的創建自己k8s應用。
官方的文檔其實已經很詳細了。這篇文章主要記錄了,在根據官方文檔一步步做的過程當中完整的一個過程。相比官方的文檔會更加詳細一些。

前提條件

一臺CentOS,物理機,虛擬機都可以。

安裝docker

# yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
# yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
# yum install docker-ce docker-ce-cli containerd.io
# systemctl start docker
# systemctl enable docker

如何安裝docker

安裝go和dep

安裝operator-sdk前提是go已經安裝好了,並且需要用到dep安裝依賴,所以我們需要先安裝go和dep。其中gopath是go的工作目錄,可以是任意目錄,在配置中做相應的修改就行了。

# curl -LO https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz
# tar zxf go1.12.5.linux-amd64.tar.gz
# mv go /usr/local/
# mkdir ~/gopath
# vi /root/.bash_profile
GOPATH=/root/gopath
export GOPATH

GOROOT=/usr/local/go
export GOROOT

PATH=$PATH:$HOME/bin:$GOPATH/bin:$GOROOT/bin

# curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh

如何安裝dep

安裝operator-sdk

# yum -y install git
# RELEASE_VERSION=v0.8.0
# curl -OJL https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu
# chmod +x operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu && sudo cp operator-# sdk-${RELEASE_VERSION}-x86_64-linux-gnu /usr/local/bin/operator-sdk && rm operator-# sdk-${RELEASE_VERSION}-x86_64-linux-gnu
#
# mkdir -p $GOPATH/src/github.com/operator-framework
# cd $GOPATH/src/github.com/operator-framework
# git clone https://github.com/operator-framework/operator-sdk
# cd operator-sdk
# git checkout master
# make dep
# make install

安裝operator-sdk的官方文檔

創建app-operator

安裝kubectl

# curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
# chmod +x ./kubectl
# mv ./kubectl /usr/local/bin/kubectl

如何安裝kubectl

配置git

# git config --global user.email [email protected]
# git config --global user.name "xxx"

創建app-operator

# mkdir -p $GOPATH/src/github.com/example-inc/
# cd $GOPATH/src/github.com/example-inc/
# export GO111MODULE=on
# operator-sdk new app-operator
# cd app-operator
# operator-sdk add api --api-version=app.example.com/v1alpha1 --kind=AppService
# operator-sdk add controller --api-version=app.example.com/v1alpha1 --kind=AppService
# go mod vendor
# operator-sdk build <your own docker registry>:latest
# docker push <your own docker registry>:latest
# sed -i 's|REPLACE_IMAGE|<your own docker registry>|g' deploy/operator.yaml

配置~/.kube/config,之後創建app-operator

# kubectl create -f deploy/service_account.yaml
# kubectl create -f deploy/role.yaml
# kubectl create -f deploy/role_binding.yaml
# kubectl create -f deploy/crds/app_v1alpha1_appservice_crd.yaml
# kubectl create -f deploy/operator.yaml
# kubectl create -f deploy/crds/app_v1alpha1_appservice_cr.yaml

如何創建app-operator
到此爲止我都成功跑完了,但是發現app-operator無法啓動起來。
經過調查發現原因是在容器中沒有app-operator這個用戶。這個問題記錄在https://github.com/operator-framework/operator-sdk/issues/1494
臨時的解決辦法很簡單,就是在Dockerfile中把最後一行去掉,然後重新編docker image並上傳。之後重新更新一下app-operator,就可以看到app-operator工作啦。

# cat build/Dockerfile
FROM registry.access.redhat.com/ubi7/ubi-minimal:latest

ENV OPERATOR=/usr/local/bin/app-operator \
    USER_UID=1001 \
    USER_NAME=app-operator

COPY build/_output/bin/app-operator ${OPERATOR}

COPY build/bin /usr/local/bin
RUN  /usr/local/bin/user_setup

ENTRYPOINT ["/usr/local/bin/entrypoint"]

# operator-sdk build <your own docker registry>:latest
# docker push <your own docker registry>:latest
# kubectl delete -f deploy/operator.yaml
# kubectl create -f deploy/operator.yaml
# kubectl get all
NAME                                READY   STATUS    RESTARTS   AGE
pod/app-operator-75d9c94849-47dxm   1/1     Running   0          6m54s
pod/example-appservice-pod          1/1     Running   0          5m59s

NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/app-operator   ClusterIP   10.108.153.204   <none>        8383/TCP   6m50s
service/kubernetes     ClusterIP   10.96.0.1        <none>        443/TCP    65d

NAME                           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/app-operator   1         1         1            1           6m56s

NAME                                      DESIRED   CURRENT   READY   AGE
replicaset.apps/app-operator-75d9c94849   1         1         1       6m56s
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章