又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

真成运维 2026-3-7 248 3/7

继《全网最详细的Kubebuilder开发K8s Operator的全流程指南,细致入微(真不标题党!)》 创建 Operator 之后,再出一个全网最全实现从 0-100 的 Operator-SDK 通过 Helm 实现 Operator 的完整流程。

本次实验,依旧将采用其他作者开源的 Operator-SDK 代码逻辑来套用。GitHub地址:https://github.com/baidingtech/operator-lesson-demo/blob/main/operator-sdk

如果你没有看过我之前的文章,那么请先了解:Operator-SDK 介绍 => 全网最详细的Kubebuilder开发K8s Operator的全流程指南,细致入微(真不标题党!)=> 再阅读本篇文章

同样,本文点赞破100,更新视频版本,视频版会通过我的B站账号《真成运维》发布,关注可及时获取:https://space.bilibili.com/69936099

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

本次实验环境说明:

  • K8s 版本 v1.29.9
  • Helm 版本 v3.9.4
  • operator-sdk 版本 v1.42.0(目前最新版)

创建 helm chart

1)我们先将 app 的应用创建一个 helm chart

mkdir -p /opt/code/helm-operator-test
cd /opt/code/helm-operator-test
helm create app-chart

2)我们需要自定义修改 app-chart 中 template 的资源模板和 values.yaml 文件,参考如下:

核心是要将 helm 资源使用方式转换为类似使用 CRD 资源(这一步相当于在设计 CRD)。

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)
又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

这个 values.yaml 文件中的字段,是不是和我们 kubebuilder 教程中的 CRD 字段是一一对应的呢,所以这一步就相当于在设计 CRD。

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

3)查看 chart 的结果是否正确

helm template app-chart

安装 operator-sdk

安装 operator-sdk 参考:https://sdk.operatorframework.io/docs/installation/

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

执行下面命令,得到下载 operator-sdk 的地址(建议手动下载后上传到服务器):https://github.com/operator-framework/operator-sdk/releases/download/v1.42.0/operator-sdk_linux_amd64

export ARCH=$(case $(uname -m) in x86_64) echo -n amd64 ;; aarch64) echo -n arm64 ;; *) echo -n $(uname -m) ;; esac)
export OS=$(uname | awk '{print tolower($0)}')
export OPERATOR_SDK_DL_URL=https://github.com/operator-framework/operator-sdk/releases/download/v1.42.0
echo ${OPERATOR_SDK_DL_URL}/operator-sdk_${OS}_${ARCH}
又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

将命令上传到服务器之后,执行即可

mv operator-sdk_linux_amd64 /usr/local/bin/operator-sdk
chmod +x /usr/local/bin/operator-sdk

创建 operator-sdk 项目

mkdir -p /opt/code/helm-operator-test/helm-operator-sdk
cd /opt/code/helm-operator-test/helm-operator-sdk
operator-sdk init --plugins helm --domain baiding.tech --group ingress --version v1alpha1 --kind App --helm-chart ../app-chart
又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

上述命令执行后,生成以下目录结构

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

这个Dockerfile中的镜像可以看作是实现好的Controller,有具体监听实现逻辑。

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

具体工作原理如下:

  1. 创建 CR 实例 用户应用 ingress_v1alpha1_app.yaml 文件,Kubernetes API Server 中会创建一个具体的 CR 实例(例如 app-sample)。又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)
  2. Operator(上面的镜像)监听 Operator 控制器启动时读取 watches.yaml 配置,得知需要监听 group: ingress.baiding.tech, kind: App 类型的资源变化。又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)
  3. Spec 映射与覆盖 当监听到 CR 变化时,Operator 会将 CRspec 字段的内容(如 image, replicas 等)提取出来,作为 Helm 的 override values。这些值会覆盖 helm-charts/app-chart/values.yaml 中的默认配置。又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)
  4. 渲染与部署 Helm 引擎使用合并后的 values 渲染 helm-charts/app-chart/templates 目录下的模板文件,生成最终的 Kubernetes 资源(如 Deployment, Service 等)并应用到集群中。又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

测试 operator

1)安装 CRD

make install

make install 执行之后,查看 CRD 是否创建

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

2)运行 Operator

make run 

如果执行这条命令卡住,请看“过程中出现的问题”部分进行处理该问题

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

3)运行 CR

查看config/samples/ingress_v1alpha1_app.yaml保持默认即可(可修改)

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

运行 CR

CR:运行 CRD 的实例

kubectl apply -f config/samples/ingress_v1alpha1_app.yaml
又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

查看资源是否创建

kubectl get deploy,pod,svc,ingress | grep -v zcywwebapp-sample | grep app-sample
又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

部署 operator

删除 CR

kubectl delete -f config/samples/ingress_v1alpha1_app.yaml

ctrl+c 停止 make run 前台运行程序

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

构建镜像

make docker-build docker-push IMG=registry.cn-chengdu.aliyuncs.com/qiuyl01/zcywapp-operator-helm-demo:v1.0
又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

部署 CRD 和 Controller

# 部署 CRD 和 Controller 的命令
make deploy IMG=registry.cn-chengdu.aliyuncs.com/qiuyl01/zcywapp-operator-helm-demo:v1.0

# 删除部署的 CRD 和 Controller 的命令
make undeploy
又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

运行 CR

CR:运行 CRD 的实例

kubectl apply -f config/samples/ingress_v1alpha1_app.yaml
kubectl get deploy,pod,svc,ingress | grep -v zcywwebapp-sample | grep app-sample
deployment.apps/app-sample
又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

Kustomize 导出部署的资源文件

Kustomize 的介绍见 kubebuilder 教程的“Kustomize 导出部署的资源文件”部分

kustomize build config/default > all-in-one-deploy.yaml
又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

运行 CRD 和 Controller,统称为 Operator

kubectl apply -f all-in-one-deploy.yaml
又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

运行 CR

CR:运行 CRD 的实例

kubectl apply -f config/samples/ingress_v1alpha1_app.yaml

查看资源是否创建

kubectl get deploy,pod,svc,ingress | grep -v zcywwebapp-sample | grep app-sample
又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

过程中出现的问题

1)问题描述:make run执行后卡住了

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

2)问题原因:单独开一个窗口,ps aux | grep helm-operator,发现他在下载helm-operator命令

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

上面的helm-operator命令下载地址是 https://github.com/operator-framework/operator-sdk/releases/download/v1.42.0/helm-operator_linux_amd64,由于是在github.com下载这里肯定会非常慢,建议科学上网下载之后手动将命令替换掉,如图:

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

3)处理方法:手动下载替换后,执行make run命令完成启动

又来!全网最详细的Operator-SDK开发K8s Operator的全流程指南,细致入微(真不标题党!)

至此,你已经完成了 Operator-SDK 通过 Helm 实现 Operator 的完整流程,这种方式比较简单不需要代码逻辑的编写能力,只需要对 helm 的 values.yaml 进行一个类似 CRD 的设计即可。

这种方式灵活性肯定是没有通过 Kubebuilder 方式实现 Operator 强的,建议复杂的需求 Operator 还是通过 Kubebuilder 方式去实现。

好了,以上就是本次 Operator-SDK 实现 Operator 的完整流程了。如果对你有帮助请给个赞赞吧~(点赞过100,出视频教程)

参考

视频:https://www.bilibili.com/video/BV1kY4y1n7t7?t=230.6

文档:https://github.com/baidingtech/operator-lesson-demo/blob/main/operator-sdk/operator-sdk.md

END

这篇文章有用吗?

点击星号为它评分!

平均评分 0 / 5. 投票数: 0

到目前为止还没有投票!成为第一位评论此文章。

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

- THE END -

真成运维

3月07日10:36

最后修改:2026年3月7日
0

非特殊说明,本博所有文章均为博主原创。