Skip to main content

Command Palette

Search for a command to run...

15 分钟制作 Kubernetes Operator

Updated
2 min read

原文:Make a Kubernetes Operator in 15 minutes with Helm

作者:Rob Szumski

之前我们介绍了如何使用 Ansible 实现 Helm Chart 的自动化。今天会继续这方面的话题,但是会转用 Operator。Operator 是一种打包、部署和管理 Kubernetes 应用的方法。这里说的 Kubernetes 应用,不仅是部署在 Kubernetes 集群中,还使用 Kubernetes API 以及 kubectl 工具进行管理。

本文会尝试根据已有的 Helm chart 来创建一个 Operator,以此展示 Operator 的价值。这一过程无需编写 Go 代码,仅需要使用 Operator 框架 中的 Helm Operator 工具包。最后还会对 Go 和 Helm 实现的 Operator 进行比较。

我们期待的用户体验

本文试图描述多数公司中都存在的一种场景:用稳定、可复用以及可审计的方式,在多个环境中发布应用或产品,首先做一下分析。

稳定的部署过程:在符合所有需求的情况下(例如所有测试均已通过,或者负责人审核通过),用全自动的方式进行部署。

可复用的部署过程:工件一旦完成构建,就应该有一个无法变更的版本号。对于单个组件来说,在容器中进行构建是很方便的,然而分布式系统通常都是多个组件构成的。Helm chart 可以将这些组件组织到一起,但是 Chart 本身也需要版本化。Helm Operator 可以把 Chart 和依赖捆绑到 Operator 容器镜像中,这样就有了一个覆盖完整分布式系统的单一的版本化呈现。借助版本化的 Operator 容器,工程师就能在多个环境中运行同一版本的应用了。

可审计的部署过程:应用的部署和运行都是在受控的环境中完成的,而不是工程师的笔记本电脑。Helm Operator 允许用户使用现存的 Helm Chart,无需手工运行 Helm 命令。这样就降低了一次性错误的发生机会,提供了用于审计的轨迹。

这一过程大致包含一下步骤,后续会进一步进行说明:

  1. 对 Chart 进行一些变更。例如给应用组件加入版本。

  2. 一个用于构建 Operator的持续构建流程,将新的 Chart 拷贝到容器之中。

  3. 能把 Operator 部署到测试集群上一个新的命名空间的测试管线。测试套件使用新的 Operator,运行对应配置的应用。假设一个应用同时提供了标准模式和高可用模式的配置,Operator 应该可以使用新的 Chart 来测试这两种模式。新的命名空间应该可以在测试完成后删除。

  4. 如果测试通过,发布管理员会进行确认,或者自动触发确认过程。接下来持续部署系统会使用这一 Operator 对应用进行在线的滚动更新,或蓝绿部署。这一过程应该能够在应用所在的其他环境、其他命名空间中重复运行。

接下来会手工完成整个过程,当然读者可以发挥想象力,例如将 Quay.io 加入进来构建镜像,或者用 Jenkins/CircleCI 等运行测试并和 Kubernetes 进行通信。

前提条件:Kubernetes 环境和镜像库

Helm Operator 套件需要 Kubernetes 1.9 以上的集群,集群需要有足够资源运行一到两套测试应用。本地需要有 Docker 来构建镜像,并且有 kubectl 用于控制集群。如果熟悉常 Helm 操作,对本文的理解会更有帮助。

Operator 如何运作

Helm Operator 是用来应对仅需少量部署逻辑的无状态应用的。如果这一描述不符合你的应用的实际情况,在本文最后会提供一些替代选项。

Operator 的主要功能就是在自定义对象和对应应用实例的状态之间进行同步。Helm Operator 套件生成的 Operator 对象中,spec 字段是一个配置列表,其内容一般是在 Helm 的 values.yaml 文件中指定的。我们会在自定义资源中指定选项值,而不是使用命令参数(helm install -f values.yaml),自定义资源对象是 Kubernetes 的原生对象,这样就能够享受到 RBAC 和审计方面的益处。例如这样一个简单的资源:

apiVersion: apache.org/v1alpha1
kind: Tomcat
metadata:
    name: example-app
spec:
    replicaCount: 2

replicaCount 的值是 2,会传播给 Chart 的模板:

{{ .Values.replicaCount }}

Operator 构建和部署之后,部署应用的新实例就很只需要简单的创建一个新的自定义资源了。比如说要列出所有环境中的实例,只需要使用 kubectl

kubectl get Tomcats --all-namespaces

这样也就无需使用 Helm 命令行或者安装 Tiller 了;Operator 镜像是由 Helm Operator 套件从 Helm 项目中导入生成的。只要 Operator 实例在运行,并用 CRD 注册自定义资源即可,并且自定义资源需服从 RBAC 的管理,这样也可以更方面的管理产品的变更。

这就好像建立了一个应用上线的流程:首先创建自定义资源,然后实例就会上线和运行。

构建 Operator 镜像

我们认为最佳时间就是为每个 Chart 都创建一个新的 Operator。这样看起来更符合 Kubernetes API 的风格(例如 kubectl get Tomcats),如果需要更好的控制,还可把 Operator 从 Helm 迁移到 Go。第一步是把 Chart、Kubernetes API 组(例如 apache.org/v1alpha1)以及 Kind(例如 Tomcat)集成到 Operator 的容器镜像中。这一部分很简单,Dockerfile 把这些变量用构建参数的形式公开为变量。只要构建 Dockerfile 然后进行推送即可:

$ docker build \
  --build-arg HELM_CHART=https://storage.googleapis.com/kubernetes-charts/tomcat-0.1.0.tgz \
  --build-arg API_VERSION=apache.org/v1alpha1 \
  --build-arg KIND=Tomcat \
  -t quay.io/<namespace>/tomcat-operator:v0.0.1 .
$ docker push quay.io/<namespace>/tomcat-operator:v0.0.1

相关链接

  1. 使用 Ansible 实现 Helm Chart 的自动化:https://blog.openshift.com/automating-helm-charts-with-ansible/

  2. Operator 框架https://github.com/operator-framework)

  3. Helm Operator 工具包https://github.com/operator-framework/helm-app-operator-kit

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts