概述
在之前我曾经写过两篇文章:
在这两篇文章中,我介绍了 Operator 的概念以及实现 Operator 的方式 ,到现在,这两篇文章已经接近 5 年了。但是,回看过去 5 年,Operator SDK 没有太大的改变,但是又有所增强,所以本文就将尝试进一步多介绍一个新的东西 OLM 的使用。
安装 Operator-SDK
[root@liqiang.io]# export ARCH=$(case $(uname -m) in x86_64) echo -n amd64 ;; aarch64) echo -n arm64 ;; *) echo -n $(uname -m) ;; esac)
[root@liqiang.io]# export OS=$(uname | awk '{print tolower($0)}')
[root@liqiang.io]# export OPERATOR_SDK_DL_URL=https://github.com/operator-framework/operator-sdk/releases/download/v1.34.2
[root@liqiang.io]# curl -LO ${OPERATOR_SDK_DL_URL}/operator-sdk_${OS}_${ARCH}
[root@liqiang.io]# chmod +x operator-sdk_${OS}_${ARCH} && sudo mv operator-sdk_${OS}_${ARCH} /usr/local/bin/operator-sdk
[root@liqiang.io]# operator-sdk version
创建 Operator
创建 operator 框架
[root@liqiang.io]# operator-sdk init
编写 CRD 和 Controller
[root@liqiang.io]# operator-sdk create api --group test --version=v1alpha1 --kind=CronjobRuntime --resource --controller
[root@liqiang.io]# make docker-build docker-push IMG="liqiangliu443/operator-test:v0.0.1"
至此,我们的 Operator 已经打包成 Image,并且发布到远程的仓库中了。
[可选] 修改 CRD
如果想修改 CRD(一般是给 CRD 增加一些新的字段,谨慎修改 CRD 的字段),只需要修改 /api
目录下的 Go 文件中的 CRD Struct 即可,当修改完毕之后,执行以下命令即可生成新的 CRD 的定义:
[root@liqiang.io]# make manifests
OLM
OLM(Operator Lifecycle Manager):用于管理 Operator 的生命周期
安装 OLM
[root@liqiang.io]# operator-sdk olm install
发布 Bundle
[root@liqiang.io]# make bundle IMG="liqiangliu443/operator-test:v0.0.1"
[root@liqiang.io]# make bundle-build bundle-push BUNDLE_IMG="liqiangliu443/operator-bundle-test:v0.0.1"
[root@liqiang.io]#
至此,我们将我们的 operator 打包成一个 bundle,并且发布到远程仓库中。
运行 Bundle
[root@liqiang.io]# operator-sdk run bundle docker.io/liqiangliu443/operator-bundle-test:v0.0.1
至此,我们的 operator 会运行在对应的 kubernetes 集群中。
卸载 bundle
[root@liqiang.io]# operator-sdk cleanup tenant-deploy
至此,我们的 operator 包括 CRD 的定义都从 kubernetes 集群中被移除。
手动部署
我们当然也可以不使用 OLM 进行 Operator 管理,例如完全手动运行 Operator 也是可以的。
[root@liqiang.io]# make install
[root@liqiang.io]# make deploy IMG="liqiangliu443/operator-test:v0.0.1"
其中:
make install
:将 CRD 添加到 Kubernetes 中;make deploy
:将 Controller 运行到 Kubernetes 中;
卸载
[root@liqiang.io]# make uninstall
[root@liqiang.io]# make undeploy