操作符模式

运算符是 Kubernetes 的软件扩展,它利用 自定义资源 来管理应用程序及其组件。运算符遵循 Kubernetes 原则,特别是 控制循环

动机

运算符模式 的目标是捕捉管理服务或一组服务的运维人员的关键目标。负责维护特定应用程序和服务的运维人员深入了解系统应该如何运行、如何部署以及出现问题时如何应对。

在 Kubernetes 上运行工作负载的人员通常喜欢使用自动化来处理可重复的任务。运算符模式捕捉了如何在 Kubernetes 本身提供的功能之外编写代码来自动化任务。

Kubernetes 中的运算符

Kubernetes 专为自动化而设计。开箱即用,您将从 Kubernetes 的核心获得大量内置自动化。您可以使用 Kubernetes 自动化部署和运行工作负载,并且 您可以自动化 Kubernetes 的执行方式。

Kubernetes 的 运算符模式 概念允许您通过将 控制器 链接到一个或多个自定义资源来扩展集群的行为,而无需修改 Kubernetes 本身的代码。运算符是 Kubernetes API 的客户端,充当 自定义资源 的控制器。

运算符示例

您可以使用运算符来自动化的一些事情包括

  • 按需部署应用程序
  • 获取和还原该应用程序状态的备份
  • 处理应用程序代码的升级以及相关的更改,例如数据库模式或额外的配置设置
  • 向不支持 Kubernetes API 的应用程序发布服务以发现它们
  • 模拟集群全部或部分的故障以测试其弹性
  • 为没有内部成员选举过程的分布式应用程序选择领导者

运算符在更详细的描述中可能是什么样的?以下是一个示例

  1. 一个名为 SampleDB 的自定义资源,您可以将其配置到集群中。
  2. 一个 Deployment,确保运行包含运算符的控制器部分的 Pod。
  3. 运算符代码的容器镜像。
  4. 查询控制平面以找出配置了哪些 SampleDB 资源的控制器代码。
  5. 运算符的核心是代码,用于告诉 API 服务器如何使现实与配置的资源相匹配。
    • 如果您添加了一个新的 SampleDB,运算符将设置 PersistentVolumeClaims 以提供持久性数据库存储,一个 StatefulSet 以运行 SampleDB 以及一个 Job 以处理初始配置。
    • 如果您删除它,运算符将拍摄快照,然后确保 StatefulSet 和 Volumes 也被删除。
  6. 运算符还管理定期数据库备份。对于每个 SampleDB 资源,运算符都会确定何时创建可以连接到数据库并执行备份的 Pod。这些 Pod 将依赖于具有数据库连接详细信息和凭据的 ConfigMap 和/或 Secret。
  7. 由于运算符旨在为其管理的资源提供强大的自动化,因此将有额外的支持代码。对于此示例,代码检查数据库是否正在运行旧版本,如果是,则创建 Job 对象来为您升级它。

部署运算符

部署运算符最常见的方法是将 Custom Resource Definition 及其关联的 Controller 添加到您的集群。Controller 通常会在 控制平面 之外运行,就像您运行任何容器化应用程序一样。例如,您可以在集群中将控制器作为 Deployment 运行。

使用运算符

部署完运算符后,您将通过添加、修改或删除运算符使用的资源类型来使用它。遵循上面的示例,您将为运算符本身设置 Deployment,然后

kubectl get SampleDB                   # find configured databases

kubectl edit SampleDB/example-database # manually change some settings

…就这样!运算符将负责应用更改以及保持现有服务处于良好状态。

编写您自己的运算符

如果生态系统中没有实现您想要的行为的运算符,您可以编写您自己的运算符。

您还可以使用任何可以作为 Kubernetes API 的客户端 的语言/运行时来实现运算符(即控制器)。

以下是您可以用来编写您自己的云原生运算符的一些库和工具。

下一步

此页面上的项目引用了提供 Kubernetes 所需功能的第三方产品或项目。Kubernetes 项目作者不对这些第三方产品或项目负责。有关更多详细信息,请参阅 CNCF 网站指南

在提出添加额外第三方链接的更改之前,您应该阅读 内容指南

上次修改于 2024 年 7 月 16 日下午 2:32 PST:更新 Java 运算符 SDK 的 GitHub 仓库 URL (3c7af1e126)