Operator 模式全景
什么是 Operator
Operator 是 K8s 的扩展机制,将运维知识编码为软件。通过 CRD + Controller 的组合,让 K8s 能够管理复杂的有状态应用(数据库、消息队列、AI 训练任务等)。
传统运维:人工执行 → 备份、扩容、故障恢复、版本升级
Operator:自动化执行 → 控制器持续监控,自动处理运维操作Operator 架构
用户创建 CR(自定义资源)
│
▼
API Server 存储 CR
│
▼
Operator Controller 监听到 CR 变化
│
▼
Reconcile 循环:
1. 读取 CR 期望状态
2. 读取实际状态(Deployment/Service/PVC 等)
3. 计算差异
4. 执行操作(创建/更新/删除子资源)
5. 更新 CR Status开发框架对比
| 框架 | 语言 | 特点 | 适用场景 |
|---|---|---|---|
| kubebuilder | Go | 官方推荐,功能完整 | 生产级 Operator |
| Operator SDK | Go/Ansible/Helm | 多语言支持 | 快速开发 |
| controller-runtime | Go | kubebuilder 底层库 | 自定义框架 |
| Kopf | Python | 简单易用 | 快速原型 |
| KUDO | YAML | 无代码 | 简单场景 |
Operator 成熟度模型
Level 1:基础安装
- 自动化应用安装和配置
Level 2:无缝升级
- 支持应用版本升级和回滚
Level 3:完整生命周期
- 备份、恢复、故障转移
Level 4:深度洞察
- 指标、告警、日志分析
Level 5:自动驾驶
- 自动扩缩容、自动调优、异常自愈快速开始(kubebuilder)
bash
# 安装 kubebuilder
curl -L -o kubebuilder https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH)
chmod +x kubebuilder && mv kubebuilder /usr/local/bin/
# 初始化项目
mkdir my-operator && cd my-operator
kubebuilder init --domain mycompany.io --repo github.com/mycompany/my-operator
# 创建 API(CRD + Controller)
kubebuilder create api --group apps --version v1alpha1 --kind MyApp
# 生成代码和 CRD
make generate
make manifests
# 本地运行(连接到集群)
make install # 安装 CRD
make run # 运行 Controller
# 构建并部署
make docker-build docker-push IMG=my-registry/my-operator:v1.0
make deploy IMG=my-registry/my-operator:v1.0项目结构
my-operator/
├── api/
│ └── v1alpha1/
│ ├── myapp_types.go # CRD 类型定义
│ └── zz_generated.deepcopy.go
├── internal/
│ └── controller/
│ └── myapp_controller.go # Reconcile 逻辑
├── config/
│ ├── crd/ # CRD YAML
│ ├── rbac/ # RBAC 规则
│ └── manager/ # Operator 部署
├── cmd/
│ └── main.go # 入口
└── Makefile典型 Operator 案例
- Prometheus Operator:管理 Prometheus 集群
- Cert-Manager:自动管理 TLS 证书
- Strimzi:管理 Kafka 集群
- CloudNativePG:管理 PostgreSQL 集群
- Argo CD:GitOps 持续部署
- Istio Operator:管理 Istio 服务网格