如何使用operator-sdk编写一个operator
1、下载operator-sdk
官网地址
https://github.com/operator-framework/operator-sdk/releases
选择合适的版本下载
下载之后chmod +x xxx添加权限,然后mv xxx /usr/local/bin
之后就可以使用operator-sdk命令了
2、创建和初始化项目
mkdir memcached-operator
cd memcached-operator
operator-sdk init --domain http://example.com --repo http://github.com/example/memcached-operator
指定域名和仓库地址
3、创建一个示例api和controller控制器
operator-sdk create api --group cache --version v1alpha1 --kind Memcached --resource --controller
4、修改代码
修改api/v1alpha1/memcached_types.go的CRD,添加业务需要的字段
修改controller/memcached_controller.go的Reconcile函数,添加代码逻辑
修改完成后需要使用
make generate重新生成下资源类型
make manifests更新下crd的mainifests
5、打包和推送新镜像
make docker-build docker-push IMG="http://example.com/memcached-operator:v0.0.1"
备注:
使用的当前目录下的Dockerfile进行镜像打包,如果遇到基础镜像下载失败,可以使用这个网站
https://dockerproxy.com/
填写镜像地址,然后根据步骤下载镜像,重命名即可
如果编译代码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,如果命令部署失败了,可以手动修改下config/manager/manager.yaml中的image镜像为http://example.com/memcached-operator:v0.0.1,然后试下这个命令
kubectl kustomize config/default | kubectl apply -f -
镜像问题,可以通过步骤5提高的网站代理更换下,如果cri用的不是docker,需要docker save -o导出,然后ctr -n http://k8s.io images import 导入
7、创建CRD触发deployment事件
kubectl apply -f config/samples/cache_v1alpha1_memcached.yaml
手动修改下yaml文件的namespace为default,然后可以通过
kubect get crd查看创建的crd

8、取消部署deployment
make undeploy
不行的话用kubectl kustomize config/default|kubect delete --ignore-not-found=false -f -
有啥问题欢迎交流讨论