5.6. 定义集群服务版本(CSV)
由 ClusterServiceVersion
对象定义的 集群服务版本(CSV)是一个利用 Operator 元数据创建的 YAML 清单,可辅助 Operator Lifecycle Manager(OLM)在集群中运行 Operator。它是 Operator 容器镜像附带的元数据,用于在用户界面填充徽标、描述和版本等信息。此外,CSV 还是运行 Operator 所需的技术信息来源,类似于其需要的 RBAC 规则及其管理或依赖的自定义资源 (CR)。
Operator SDK 包括 CSV 生成器,用于为当前 Operator 项目生成 CSV,使用 YAML 清单和 Operator 源文件中包含的信息自定义。
借助生成 CSV 的命令,Operator 作者便无需深入掌握为了让其 Operator 与 OLM 交互或向 Catalog Registry 发布元数据所需的 OLM 知识。此外,因为实现了新的 Kubernetes 和 OLM 功能,CSV spec 可能会随着时间的推移而有所变化,而 Operator SDK 可轻松扩展其更新系统,以应对 CSV 的未来新功能。
5.6.1. CSV 生成的工作方式
Operator 捆绑包清单,其中包括集群服务版本(CSV),描述如何使用 Operator Lifecycle Manager(OLM)显示、创建和管理应用程序。Operator SDK 中的 CSV 生成器(由 generate bundle
子命令调用)是将 Operator 发布到目录并使用 OLM 部署的第一个步骤。子命令需要特定的输入清单来构造 CSV 清单,在调用命令时会读取所有输入,以及 CSV 基础,以便预先生成或重新生成 CSV。
通常,generate kustomize manifests
子命令会首先运行,以生成由 generate bundle
子命令使用的输入 Kustomize 基础。但是,Operator SDK 提供 make bundle
命令,它自动执行一些任务,包括按顺序运行以下子命令:
-
generate kustomize manifests
-
generate bundle
-
bundle validate
其他资源
- 如需包含生成捆绑包和 CSV 的完整流程,请参阅捆绑 Operator 并使用 Operator Lifecycle Manager 部署。
5.6.1.1. 生成的文件和资源
make bundle
命令在 Operator 项目中创建以下文件和目录:
-
名为
bundle/manifests
的捆绑包清单目录,其中包含ClusterServiceVersion
(CSV)对象 -
名为
bundle/metadata
的捆绑包元数据目录 -
config/crd
目录中的所有自定义资源定义(CRD) -
一个 Dockerfile
bundle.Dockerfile
以下资源通常包含在 CSV 中:
- 角色
- 定义命名空间中的 Operator 权限。
- ClusterRole
- 定义集群范围的 Operator 权限。
- Deployment
- 定义如何在 pod 中运行 Operator 的 Operand。
- CustomResourceDefinition (CRD)
- 定义 Operator 协调的自定义资源。
- 自定义资源示例
- 遵循特定 CRD 规格的资源示例。
5.6.1.2. 版本管理
generate bundle
子命令的 --version
标志在首次创建以及升级现有捆绑包时,为您提供语义版本。
通过在 Makefile
中设置 VERSION
变量,当使用 make bundle
命令运行 generate bundle
子命令时使用该值自动调用 --version
标志。CSV 版本与 Operator 版本相同,在升级 Operator 版本时会生成新 CSV。