第四部分:Operator 快速入门

第四部分:Operator 快速入门
青萍叙事📝 前言
在 Kubernetes 世界里,资源对象(如 Deployment、Service)大多是声明式管理的:我们定义想要的状态,Kubernetes 负责让实际状态逐步趋近于目标。
但当应用逻辑复杂、需要自定义生命周期管理(如备份、恢复、自动扩容)时,内置的控制器就显得力不从心。
这时就需要 Operator 模式 —— 一种通过自定义控制器(Controller)来扩展 Kubernetes 的能力,让其“懂”你的应用。
简单理解:Operator = CRD(定义资源) + Controller(实现逻辑)
PS:这一篇也是云原生之旅第四部分的收官篇了,作为本系列最长的部分也终于是要完结了,下一部分就将进入 k8s 的 CI/CD 与 GitOps 实战篇。
🔍 使用场景
Operator 的最大价值在于:
将人工操作流程自动化、原子化,并原生融入 Kubernetes 生命周期管理中。
以下是几类常见的使用场景:
- 数据库与中间件自动运维(有状态应用管理)
- SaaS 多租户服务生命周期管理(自动场景各种资源)
- CI/CD 与发布系统自动化(Argo Rollouts Operator等)
📋 前提条件
- 已安装 Go 环境
- 已部署 kubernetes 集群
PS:可参看之前文章一键部署:第四部分:使用 sealos 部署集群
🚀 详细步骤
1️⃣ 什么是 Operator?
Operator 是一种利用 Kubernetes 原生机制扩展集群功能的模式。
其核心由两部分组成:
- CRD(CustomResourceDefinition)
定义自定义资源类型,如 MySQLCluster、RedisInstance。
- Controller(控制器)
监控这些自定义资源的状态变化,并执行相应逻辑。
工作流程大致如下:
2️⃣ kubebuilder 介绍
kubebuilder 是 Kubernetes 官方推荐的 Operator 开发框架,基于 controller-runtime 库构建。
它提供了完整的代码生成、项目结构和测试工具,使得开发者能快速创建可维护的 Operator 项目。
3️⃣ 安装 kubebuilder
这里以 Linux 环境为例,首先需要安装 Go 环境。
1 | # ubuntu 安装 go |
4️⃣ 实战示例:创建第一个 Operator
1 | # 1. 新建项目目录 |
5️⃣ 创建自定义资源
以 App 资源为例:
1 | # 创建 api |
系统将生成:
api/v1/app_types.go:定义 CRD 结构internal/controller/app_controller.go:控制逻辑config/samples/apps_v1_app.yaml:配置文件
PS:如果需要重新创建api,需要删除以上3个文件并编辑PROJECT,删除对应的resources部分。
编辑 api/v1/app_types.go 文件,定义一个简单的字段:
1 | type AppSpec struct { |
6️⃣ 编写控制逻辑
在 controllers/app_controller.go 的 Reconcile 方法中,实现资源调谐逻辑:
1 | func (r *AppReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { |
7️⃣ 部署与验证
生成 CRD 并部署:
1 | make install |
编辑自定义资源:
1 | # config/samples/apps_v1_app.yaml |
部署并验证:
1 | kubectl apply -f config/samples/apps_v1_app.yaml |
你将看到自动生成的 nginx Pod,这意味着 Operator 已成功运作。
完整项目已上传至 Github:https://github.com/lusyoe/operator-demo
















