RELEASE_VERSION=v0.11.0
curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu
curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu.asc
gpg --verify operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu.asc
如果本机没有安装公钥,会报错如下:
$ gpg --verify operator-sdk-${RELEASE_VERSION}-x86_64-apple-darwin.asc
$ gpg: assuming signed data in 'operator-sdk-${RELEASE_VERSION}-x86_64-apple-darwin'
$ gpg: Signature made Fri Apr 5 20:03:22 2019 CEST
$ gpg: using RSA key <KEY_ID>
$ gpg: Can't check signature: No public key
执行如下脚本:
gpg --recv-key "$KEY_ID"
gpg --keyserver keyserver.ubuntu.com --recv-key "$KEY_ID"
$ chmod +x operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu && sudo mkdir -p /usr/local/bin/ && 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/example/
cd $GOPATH/example
export GO111MODULE=on
operator-sdk new cronjob-operator --repo github.com//ThinkBlue1991/cronjob-operator
cd cronjob-operator
## 添加CRD的api
operator-sdk add api --api-version=cache.example.com/v1alpha1 --kind=CronJob
- 修改pkg/apis/cache/v1alphal/cronjob_types.go
- 修改types后,针对resource进行更新和生成代码
operator-sdk generate k8s
operator-sdk generate openapi
查看deploy/crds/cache.example.com_cronjob_crd.yaml 其中根据spec定义了crd参数的属性
operator-sdk add controller --api-version=cache.example.com/v1alpha1 --kind=CronJob
会在pkg/controller/cronjob/下出现cronjob_controller.go文件
修改cronjob_controller.go文件,主要关心函数func (r *ReconcileMemcached) Reconcile(request reconcile.Request) (reconcile.Result, error)
kubectl create -f deploy/crds/cache.example.com_cronjob_crd.yaml
operator-sdk build hub.geovis.io/zhangjx/cronjob-operator:v0.1
docker push hub.geovis.io/zhangjx/cronjob-operator:v0.1
Note: hub.geovis.io是本地的私有仓库;dockerhub:docker pull zhangjx1991/cronjobs:v0.1
sed -i 's|REPLACE_IMAGE|hub.geovis.io/zhangjx/cronjob-operator:v0.1|g' deploy/operator.yaml
# Setup Service Account
$ kubectl create -f deploy/service_account.yaml
# Setup RBAC
$ kubectl create -f deploy/role.yaml
$ kubectl create -f deploy/role_binding.yaml
# Deploy the app-operator
$ kubectl create -f deploy/operator.yam
kubectl create -f deploy/crds/cronjob.yaml