5.10. 验证 Operator 捆绑包
作为 Operator 作者,您可以在 Operator SDK 中运行 bundle validate
命令来验证 Operator 捆绑包的内容和格式。您可以在远程 Operator 捆绑包镜像或本地 Operator 捆绑包目录上运行该命令。
红帽支持的 Operator SDK CLI 工具版本,包括 Operator 项目的相关构建和测试工具已被弃用,计划在以后的 Red Hat OpenShift Service on AWS 发行版本中删除。红帽将在当前发行生命周期中提供对这个功能的程序错误修复和支持,但此功能将不再获得改进,并将在以后的 Red Hat OpenShift Service on AWS 发行版本中删除。
对于创建新 Operator 项目,不建议使用红帽支持的 Operator SDK 版本。现有 Operator 项目的 Operator 作者可以使用 Red Hat OpenShift Service on AWS 4 发布的 Operator SDK CLI 工具版本来维护其项目,并创建针对较新版本的 Red Hat OpenShift Service on AWS 的 Operator 发行版本。
以下与 Operator 项目相关的基础镜像 没有被弃用。这些基础镜像的运行时功能和配置 API 仍然会有程序错误修复和并提供对相关 CVE 的解决方案。
- 基于 Ansible 的 Operator 项目的基础镜像
- 基于 Helm 的 Operator 项目的基础镜像
有关 Operator SDK 不支持的、社区维护版本的信息,请参阅 Operator SDK (Operator Framework)。
5.10.1. 关于 bundle validate 命令
虽然 Operator SDK scorecard
命令可以根据配置文件和测试镜像在 Operator 上运行测试,但 bundle validate
子命令可为内容和结构验证本地捆绑包目录和远程捆绑包镜像。
bundle validate
命令语法
$ operator-sdk bundle validate <bundle_dir_or_image> <flags>
当您使用 make bundle
命令构建捆绑包时,bundle validate
命令会自动运行。
捆绑包镜像从远程 registry 中拉取,并在验证前在本地构建。本地捆绑包目录必须包含 Operator 元数据和清单。捆绑包元数据和清单必须具有类似以下捆绑包布局的结构:
捆绑包布局示例
./bundle ├── manifests │ ├── cache.my.domain_memcacheds.yaml │ └── memcached-operator.clusterserviceversion.yaml └── metadata └── annotations.yaml
如果检测到错误,捆绑包测试会传递验证,并使用退出代码 0
完成。
输出示例
INFO[0000] All validation tests have completed successfully
如果检测到错误,则测试失败的验证,并使用退出代码 1
完成。
输出示例
ERRO[0000] Error: Value cache.example.com/v1alpha1, Kind=Memcached: CRD "cache.example.com/v1alpha1, Kind=Memcached" is present in bundle "" but not defined in CSV
在未检测错误时,导致警告的捆绑测试仍可使用退出代码 0
传递验证。测试只在错误时失败。
输出示例
WARN[0000] Warning: Value : (memcached-operator.v0.0.1) annotations not found INFO[0000] All validation tests have completed successfully
有关 bundle validate
子命令的更多信息,请运行:
$ operator-sdk bundle validate -h
5.10.2. 内置捆绑包验证测试
Operator SDK 附带了预定义的验证器组合到套件中。如果您在没有指定验证器的情况下运行 bundle validate
命令,则默认测试会运行。默认测试会验证捆绑包是否遵循 Operator Framework 社区定义的规格。如需更多信息,请参阅"Bundle Format"。
您可以运行可选的验证器来测试 OperatorHub 兼容性或已弃用的 Kubernetes API 等问题。可选验证器总是在默认测试之外运行。
用于可选测试集的 bundle validate
命令语法
$ operator-sdk bundle validate <bundle_dir_or_image> --select-optional <test_label>
Name | 描述 | 标签 |
---|---|---|
Operator Framework | 这个验证器会根据 Operator Framework 提供的整个验证器套件测试 Operator 捆绑包。 |
|
OperatorHub | 这个验证器会测试 Operator 捆绑包以便与 OperatorHub 的兼容性。 |
|
最佳实践 | 此验证程序测试 Operator 捆绑包是否遵循 Operator Framework 定义的良好实践。它检查是否有问题,如空 CRD 描述或不支持的 Operator Lifecycle Manager(OLM)资源。 |
|
其他资源
5.10.3. 运行 bundle validate 命令
每次进入 bundle validate
命令时,默认验证器都会运行测试。您可以使用 --select-optional
标志来运行可选验证器。可选验证器除默认测试外还运行测试。
前提条件
- 使用 Operator SDK 生成的 operator 项目
流程
如果要针对本地捆绑包目录运行默认验证器,请从 Operator 项目目录中输入以下命令:
$ operator-sdk bundle validate ./bundle
如果要针对远程 Operator 捆绑包镜像运行默认验证器,请输入以下命令:
$ operator-sdk bundle validate \ <bundle_registry>/<bundle_image_name>:<tag>
其中:
- <bundle_registry>
-
指定托管捆绑包的 registry,如
quay.io/example
。 - <bundle_image_name>
-
指定捆绑包镜像的名称,如
memcached-operator
。 - <tag>
指定捆绑包镜像的标签,如
v1.36.1
。注意如果要验证 Operator 捆绑包镜像,则必须在远程 registry 中托管您的镜像。Operator SDK 在运行测试前拉取(pull)镜像并在本地构建。
bundle validate
命令不支持测试本地捆绑包镜像。
如果要针对 Operator 捆绑包运行附加验证器,请输入以下命令:
$ operator-sdk bundle validate \ <bundle_dir_or_image> \ --select-optional <test_label>
其中:
- <bundle_dir_or_image>
-
指定本地捆绑包目录或远程捆绑包镜像,如
~/projects/memcached
或quay.io/example/memcached-operator:v1.36.1
。 - <test_label>
指定您要运行的验证器的名称,如
name=good-practices
。输出示例
ERRO[0000] Error: Value apiextensions.k8s.io/v1, Kind=CustomResource: unsupported media type registry+v1 for bundle object WARN[0000] Warning: Value k8sevent.v0.0.1: owned CRD "k8sevents.k8s.k8sevent.com" has an empty description