5.6. 生成集群服务版本(CSV)

ClusterServiceVersion 对象定义的 集群服务版本(CSV)是一个利用 Operator 元数据创建的 YAML 清单,可辅助 Operator Lifecycle Manager(OLM)在集群中运行 Operator。它是 Operator 容器镜像附带的元数据,用于在用户界面填充徽标、描述和版本等信息。此外,CSV 还是运行 Operator 所需的技术信息来源,类似于其需要的 RBAC 规则及其管理或依赖的自定义资源 (CR)。

Operator SDK 包含 generate csv 子命令,用于使用手动定义的 YAML 清单和 Operator 源文件中所含的信息为自定义的当前 Operator 项目生成 CSV。

借助生成 CSV 的命令,Operator 作者便无需深入掌握为了让其 Operator 与 OLM 交互或向 Catalog Registry 发布元数据所需的 OLM 知识。此外,因为实现了新的 Kubernetes 和 OLM 功能,CSV spec 可能会随着时间的推移而有所变化,而 Operator SDK 可轻松扩展其更新系统,以应对 CSV 的未来新功能。

CSV 版本与 Operator 版本相同,在升级 Operator 版本时会生成新 CSV。Operator 作者可使用 --csv-version 标记将其 Operator 状态与所提供的语义版本一起封装至 CSV 中:

$ operator-sdk generate csv --csv-version <version>

此操作采用等幂方式,仅会在提供新版本或更改 YAML 清单或源文件时才会更新 CSV 文件。Operator 作者不必直接修改 CSV 清单中的大部分字段。本指南中已经明确了需要修改的字段。例如:metadata.name 中必须包含 CSV 版本信息。

5.6.1. CSV 生成的工作方式

Operator 项目的 deploy/ 目录是部署 Operator 所需的所有清单的标准位置。Operator SDK 可使用 deploy/ 中的清单数据来编写集群服务版本(CSV)。

以下命令:

$ operator-sdk generate csv --csv-version <version>

默认将 CSV YAML 文件写入 deploy/olm-catalog/ 目录中。

生成 CSV 只需三类清单:

  • operator.yaml
  • *_{crd,cr}.yaml
  • RBAC 角色文件,如 role.yaml

Operator 作者对这些文件可能有不同的版本要求,并且可配置 deploy/olm-catalog/csv-config.yaml 中要包含哪些特定文件。

工作流

根据是否检测到了现有 CSV,并假设使用所有配置默认值,generate csv 子命令将:

  • 使用 YAML 清单和源文件中的可用数据新建一个 CSV,其位置和命名约定与当前存在的信息相同。

    1. 该更新机制会检查 deploy/ 中是否存在现有 CSV。如果没有找到,它会创建一个 ClusterServiceVersion 对象,这里称为 cache,并填充 Operator 元数据派生的字段,如 Kubernetes API ObjectMeta
    2. 更新机制在 deploy/ 中搜索包含 CSV 所用数据(如 Deployment 资源)的清单,并使用该数据设置 cache 中的适当 CSV 字段。
    3. 搜索完成后,每个填充的 cache 字段都会写回到 CSV YAML 文件中。

或:

  • 使用 YAML 清单和源文件中的可用数据更新当前预定义位置的现有 CSV。

    1. 该更新机制会检查 deploy/ 中是否存在现有 CSV。找到后,CSV YAML 文件内容会被放入 CSV 缓存中。
    2. 更新机制在 deploy/ 中搜索包含 CSV 所用数据(如 Deployment 资源)的清单,并使用该数据设置 cache 中的适当 CSV 字段。
    3. 搜索完成后,每个填充的 cache 字段都会写回到 CSV YAML 文件中。
注意

单个 YAML 字段(而非整个文件)会被覆盖,因为 CSV 的描述和其他未生成的部分将被保留。