Operator 模式
Operator 是 Kubernetes 的软件扩展,它利用 自定义资源 来管理应用程序及其组件。Operator 遵循 Kubernetes 原则,特别是 控制循环。
动机
Operator 模式 旨在捕捉人类操作员管理服务或一组服务的关键目标。负责特定应用程序和服务的操作员对系统应该如何行为、如何部署以及在出现问题时如何反应具有深入的了解。
在 Kubernetes 上运行工作负载的人员通常喜欢使用自动化来处理可重复的任务。Operator 模式描述了如何编写代码来自动化超出 Kubernetes 本身提供的任务。
Kubernetes 中的 Operator
Kubernetes 专为自动化而设计。开箱即用,您可以从 Kubernetes 的核心获得大量的内置自动化。您可以使用 Kubernetes 来自动化部署和运行工作负载,并且您可以自动化 Kubernetes 执行该操作的方式。
Kubernetes 的 operator 模式 概念允许您通过将 控制器 链接到一个或多个自定义资源来扩展集群的行为,而无需修改 Kubernetes 本身的任何代码。Operator 是 Kubernetes API 的客户端,充当 自定义资源 的控制器。
一个 Operator 示例
您可以使用 Operator 自动化的事情包括:
- 按需部署应用程序
- 获取并还原应用程序状态的备份
- 处理应用程序代码的升级以及相关的更改,例如数据库模式或额外的配置设置
- 向不支持 Kubernetes API 以发现它们的应用程序发布服务
- 模拟集群中全部或部分故障,以测试其弹性
- 为没有内部成员选举过程的分布式应用程序选择领导者
Operator 在更详细的层面上会是什么样子?这是一个例子:
- 一个名为 SampleDB 的自定义资源,您可以将其配置到集群中。
- 一个 Deployment,确保运行包含 Operator 部分的 Pod。
- Operator 代码的容器镜像。
- 控制器代码,查询控制平面以找出配置了哪些 SampleDB 资源。
- Operator 的核心是代码,用于告诉 API 服务器如何使现实与配置的资源匹配。
- 如果您添加一个新的 SampleDB,Operator 会设置 PersistentVolumeClaims 以提供持久的数据库存储,StatefulSet 以运行 SampleDB,以及 Job 以处理初始配置。
- 如果您删除它,Operator 会拍摄快照,然后确保 StatefulSet 和 Volumes 也被删除。
- Operator 还管理定期的数据库备份。对于每个 SampleDB 资源,Operator 确定何时创建可以连接到数据库并进行备份的 Pod。这些 Pod 将依赖于包含数据库连接详细信息和凭据的 ConfigMap 和/或 Secret。
- 由于 Operator 旨在为它管理的资源提供强大的自动化,因此会有额外的支持代码。对于此示例,代码会检查数据库是否正在运行旧版本,如果是,则创建 Job 对象以升级它。
部署 Operator
部署 Operator 最常见的方法是将自定义资源定义及其关联的控制器添加到您的集群中。控制器通常在 控制平面 之外运行,就像您运行任何容器化应用程序一样。例如,您可以将控制器作为 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 以及您自己实现的 WebHooks
- Operator Framework
- shell-operator
接下来
- 阅读 CNCF Operator 白皮书。
- 了解更多关于 自定义资源 的信息
- 在 OperatorHub.io 上查找现成的 Operator 以满足您的用例
- 发布 您的 Operator 以供其他人使用
- 阅读 CoreOS 的原始文章,该文章介绍了 Operator 模式(这是原始文章的存档版本)。
- 阅读 Google Cloud 关于构建 Operator 的最佳实践的 文章
此页面上的项目引用了第三方产品或项目,这些产品或项目提供 Kubernetes 所需的功能。Kubernetes 项目作者不对这些第三方产品或项目负责。请参阅 CNCF 网站指南 以获取更多详细信息。
在提出添加额外的第三方链接的更改之前,您应该阅读 内容指南。