Skip to content

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

开发框架对比

框架语言特点适用场景
kubebuilderGo官方推荐,功能完整生产级 Operator
Operator SDKGo/Ansible/Helm多语言支持快速开发
controller-runtimeGokubebuilder 底层库自定义框架
KopfPython简单易用快速原型
KUDOYAML无代码简单场景

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 服务网格

本站内容由 褚成志 整理编写,仅供学习参考