Operator 模式
Operator 是 Kubernetes 的软件扩展,利用 定制资源(custom resources)来管理应用及其组件。Operator 遵循 Kubernetes 原则,特别是控制回路(control loop)。
动机
Operator 模式(Operator pattern)旨在概括人工操作员管理一项或一组服务时所遵循的关键目标。负责特定应用和服务的人工操作员深入了解系统应如何运行、如何部署以及出现问题时如何应对。
在 Kubernetes 上运行工作负载的用户通常喜欢使用自动化来处理重复性任务。Operator 模式概括了如何编写代码来自动化超出 Kubernetes 本身提供的任务。
Kubernetes 中的 Operator
Kubernetes 专为自动化而设计。开箱即用,你可以从 Kubernetes 核心获得许多内置自动化能力。你可以使用 Kubernetes 自动化部署和运行工作负载,并且可以自动化 Kubernetes 如何执行这些操作。
Kubernetes 的Operator 模式理念允许你通过将控制器(controller)关联到一个或多个定制资源(custom resources),在不修改 Kubernetes 自身代码的情况下扩展集群的行为。Operator 是 Kubernetes API 的客户端,充当定制资源(Custom Resource)的控制器。
Operator 示例
可以用来实现 Operator 自动化的场景包括:
- 按需部署应用
- 对应用状态进行备份和恢复
- 处理应用代码升级以及数据库 Schema 或额外配置设置等相关更改
- 向不支持 Kubernetes API 的应用发布 Service 以供其发现
- 模拟集群的全部或部分故障,以测试其弹性
- 为没有内部成员选举流程的分布式应用选择主节点
Operator 的细节是什么样的?这里有一个示例:
- 一个名为 SampleDB 的定制资源,你可以将其配置到集群中。
- 一个 Deployment,用于确保运行 Operator 控制器部分的 Pod 正在运行。
- Operator 代码的容器镜像。
- 查询控制平面以查找配置了哪些 SampleDB 资源的控制器代码。
- Operator 的核心代码是用来告诉 API 服务器如何使实际状态与配置的资源相符。
- 如果你添加了一个新的 SampleDB,Operator 会设置 PersistentVolumeClaim 以提供持久的数据库存储,一个 StatefulSet 来运行 SampleDB,以及一个 Job 来处理初始配置。
- 如果你删除它,Operator 会先创建一个快照,然后确保 StatefulSet 和 Volume 也被移除。
- Operator 还负责管理定期数据库备份。对于每个 SampleDB 资源,Operator 会确定何时创建 Pod 来连接到数据库并执行备份。这些 Pod 将依赖于包含数据库连接详情和凭据的 ConfigMap 和/或 Secret。
- 由于 Operator 旨在为其管理的资源提供强大的自动化能力,因此会包含额外的辅助代码。对于此示例,代码会检查数据库是否正在运行旧版本,如果是,则创建 Job 对象为你升级数据库。
部署 Operator
部署 Operator 最常见的方式是将定制资源定义(Custom Resource Definition)及其关联的控制器添加到集群中。控制器通常运行在控制平面(control plane)之外,就像运行任何容器化应用一样。例如,你可以在集群中将控制器作为 Deployment 运行。
使用 Operator
部署 Operator 后,通过添加、修改或删除 Operator 所使用的资源类型来使用它。按照上面的示例,你会为 Operator 本身设置一个 Deployment,然后:
kubectl get SampleDB # find configured databases
kubectl edit SampleDB/example-database # manually change some settings
…然后就大功告成了!Operator 会负责应用这些更改,并保持现有服务处于良好状态。
编写自己的 Operator
如果生态系统中没有实现你想要行为的 Operator,你可以自己编写一个。
你也可以使用任何能够作为Kubernetes API 客户端的语言/运行时来实现 Operator(即控制器)。
以下是一些你可以用来编写自己的云原生 Operator 的库和工具。
- Charmed Operator Framework
- Java Operator SDK
- Kopf (Kubernetes Operator Pythonic Framework)
- kube-rs (Rust)
- kubebuilder
- KubeOps (.NET operator SDK)
- Mast
- Metacontroller 以及你自己实现的 WebHook
- Operator Framework
- shell-operator
下一步
- 阅读 CNCF Operator 白皮书。
- 了解更多关于定制资源(Custom Resources)的信息
- 在 OperatorHub.io 上查找现成的 Operator 以满足你的使用场景
- 发布你的 Operator 供其他人使用
- 阅读 CoreOS 最初介绍 Operator 模式的文章(这是原文的存档版本)。
- 阅读 Google Cloud 关于构建 Operator 最佳实践的文章
本页上的条目引用了提供 Kubernetes 所需功能的第三方产品或项目。Kubernetes 项目作者不对这些第三方产品或项目负责。有关更多详情,请参阅 CNCF 网站指南。
在提议添加额外第三方链接的更改之前,你应该阅读内容指南。