概述

在之前我曾经写过两篇文章:

在这两篇文章中,我介绍了 Operator 的概念以及实现 Operator 的方式 ,到现在,这两篇文章已经接近 5 年了。但是,回看过去 5 年,Operator SDK 没有太大的改变,但是又有所增强,所以本文就将尝试进一步多介绍一个新的东西 OLM 的使用。

安装 Operator-SDK

  1. [root@liqiang.io]# export ARCH=$(case $(uname -m) in x86_64) echo -n amd64 ;; aarch64) echo -n arm64 ;; *) echo -n $(uname -m) ;; esac)
  2. [root@liqiang.io]# export OS=$(uname | awk '{print tolower($0)}')
  3. [root@liqiang.io]# export OPERATOR_SDK_DL_URL=https://github.com/operator-framework/operator-sdk/releases/download/v1.34.2
  4. [root@liqiang.io]# curl -LO ${OPERATOR_SDK_DL_URL}/operator-sdk_${OS}_${ARCH}
  5. [root@liqiang.io]# chmod +x operator-sdk_${OS}_${ARCH} && sudo mv operator-sdk_${OS}_${ARCH} /usr/local/bin/operator-sdk
  6. [root@liqiang.io]# operator-sdk version

创建 Operator

创建 operator 框架

  1. [root@liqiang.io]# operator-sdk init

编写 CRD 和 Controller

  1. [root@liqiang.io]# operator-sdk create api --group test --version=v1alpha1 --kind=CronjobRuntime --resource --controller
  2. [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 的定义:

  1. [root@liqiang.io]# make manifests

OLM

OLM(Operator Lifecycle Manager):用于管理 Operator 的生命周期

安装 OLM

  1. [root@liqiang.io]# operator-sdk olm install

发布 Bundle

  1. [root@liqiang.io]# make bundle IMG="liqiangliu443/operator-test:v0.0.1"
  2. [root@liqiang.io]# make bundle-build bundle-push BUNDLE_IMG="liqiangliu443/operator-bundle-test:v0.0.1"
  3. [root@liqiang.io]#

至此,我们将我们的 operator 打包成一个 bundle,并且发布到远程仓库中。

运行 Bundle

  1. [root@liqiang.io]# operator-sdk run bundle docker.io/liqiangliu443/operator-bundle-test:v0.0.1

至此,我们的 operator 会运行在对应的 kubernetes 集群中。

卸载 bundle

  1. [root@liqiang.io]# operator-sdk cleanup tenant-deploy

至此,我们的 operator 包括 CRD 的定义都从 kubernetes 集群中被移除。

手动部署

我们当然也可以不使用 OLM 进行 Operator 管理,例如完全手动运行 Operator 也是可以的。

  1. [root@liqiang.io]# make install
  2. [root@liqiang.io]# make deploy IMG="liqiangliu443/operator-test:v0.0.1"

其中:

卸载

  1. [root@liqiang.io]# make uninstall
  2. [root@liqiang.io]# make undeploy