第 5 章 开发 Operator

5.1. 关于 Operator SDK

Operator Framework 是一个开源工具包,用于以有效、自动化且可扩展的方式管理 Kubernetes 原生应用程序,即 Operator。Operator 利用 Kubernetes 的可扩展性来展现云服务的自动化优势,如置备、扩展以及备份和恢复,同时能够在 Kubernetes 可运行的任何地方运行。

Operator 有助于简化对 Kubernetes 上的复杂、有状态的应用程序的管理。然而,现在编写 Operator 并不容易,会面临一些挑战,如使用低级别 API、编写样板文件以及缺乏模块化功能(这会导致重复工作)。

Operator SDK 是 Operator Framework 的一个组件,它提供了一个命令行界面(CLI)工具,供 Operator 开发人员用来构建、测试和部署 Operator。

为什么使用 Operator SDK?

Operator SDK 简化了这一构建 Kubernetes 原生应用程序的过程,它需要深入掌握特定于应用程序的操作知识。Operator SDK 不仅降低了这一障碍,而且有助于减少许多常见管理功能(如 metering 或监控)所需的样板代码量。

Operator SDK 是一个框架,它使用 controller-runtime 库来简化 Operator 的编写,并具有以下特色:

  • 高级 API 和抽象,用于更直观地编写操作逻辑
  • 支架和代码生成工具,用于快速引导新项目
  • 与 Operator Lifecycle Manager(OLM)集成,简化了集群上的打包、安装和运行的 Operator
  • 扩展项,覆盖常见的 Operator 用例
  • 指标(metrics)在基于 Go 的 Operator 中自动设置,用于部署 Prometheus Operator 的集群

具有集群管理员访问权限的 operator 作者(如 OpenShift Container Platform)可以使用 Operator SDK CLI 根据 Go、Ansible 或 Helm 开发自己的 Operator。Kubebuilder 作为基于 Go 的 Operator 的构建解决方案嵌入到 Operator SDK 中,这意味着现有的 Kubebuilder 项目可以象 Operator SDK 一样使用并继续工作。

注意

OpenShift Container Platform 4.7 支持 Operator SDK v1.3.0 或更高版本。

5.1.1. 什么是 Operator?

有关基本 Operator 概念和术语的概述,请参阅了解 Operator

5.1.2. 开发工作流

Operator SDK 提供以下工作流来开发新的 Operator:

  1. 使用 Operator SDK 命令行界面(CLI)创建 Operator 项目。
  2. 通过添加自定义资源定义 (CRD) 来定义新的资源 API。
  3. 使用 Operator SDK API 指定要监视的资源。
  4. 在指定的处理程序中定义 Operator 协调逻辑,并使用 Operator SDK API 与资源交互。
  5. 使用 Operator SDK CLI 来构建和生成 Operator 部署清单。

图 5.1. Operator SDK 工作流

osdk workflow

在高级别上,使用 Operator SDK 的 Operator 会在 Operator 作者定义的处理程序中处理与被监视资源相关的事件,并采取措施协调应用程序的状态。

5.1.3. 其他资源