如何使用operator-sdk編寫(xiě)一個(gè)operator
1、下載operator-sdk
官網(wǎng)地址
https://github.com/operator-framework/operator-sdk/releases
選擇合適的版本下載
下載之后chmod +x xxx添加權(quán)限,然后mv xxx /usr/local/bin
之后就可以使用operator-sdk命令了
2、創(chuàng)建和初始化項(xiàng)目
mkdir memcached-operator
cd memcached-operator
operator-sdk init --domain http://example.com --repo?http://github.com/example/memcached-operator
指定域名和倉(cāng)庫(kù)地址
3、創(chuàng)建一個(gè)示例api和controller控制器
operator-sdk create api --group cache --version v1alpha1 --kind Memcached --resource --controller
4、修改代碼
修改api/v1alpha1/memcached_types.go的CRD,添加業(yè)務(wù)需要的字段
修改controller/memcached_controller.go的Reconcile函數(shù),添加代碼邏輯
修改完成后需要使用
make generate重新生成下資源類(lèi)型
make manifests更新下crd的mainifests
5、打包和推送新鏡像
make docker-build docker-push IMG="http://example.com/memcached-operator:v0.0.1"
備注:
使用的當(dāng)前目錄下的Dockerfile進(jìn)行鏡像打包,如果遇到基礎(chǔ)鏡像下載失敗,可以使用這個(gè)網(wǎng)站
https://dockerproxy.com/
填寫(xiě)鏡像地址,然后根據(jù)步驟下載鏡像,重命名即可
如果編譯代碼go mod download失敗,可以在Dockerfile里面添加
export GOPROXY=https://goproxy.cn,direct

6、部署deployment
make deploy IMG="http://example.com/memcached-operator:v0.0.1"
備注:
部署的yaml文件為config/manager/manager.yaml,如果命令部署失敗了,可以手動(dòng)修改下config/manager/manager.yaml中的image鏡像為http://example.com/memcached-operator:v0.0.1,然后試下這個(gè)命令
kubectl kustomize config/default | kubectl apply -f -
鏡像問(wèn)題,可以通過(guò)步驟5提高的網(wǎng)站代理更換下,如果cri用的不是docker,需要docker save -o導(dǎo)出,然后ctr -n?http://k8s.io?images import 導(dǎo)入
7、創(chuàng)建CRD觸發(fā)deployment事件
kubectl apply -f config/samples/cache_v1alpha1_memcached.yaml
手動(dòng)修改下yaml文件的namespace為default,然后可以通過(guò)
kubect get crd查看創(chuàng)建的crd

8、取消部署deployment
make undeploy
不行的話(huà)用kubectl kustomize config/default|kubect delete --ignore-not-found=false -f -
有啥問(wèn)題歡迎交流討論