5.11. 验证 Operator 捆绑包

作为 Operator 作者,您可以在 Operator SDK 中运行 bundle validate 命令来验证 Operator 捆绑包的内容和格式。您可以在远程 Operator 捆绑包镜像或本地 Operator 捆绑包目录上运行该命令。

5.11.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.11.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>

表 5.18. 额外的 bundle validate 验证

Name描述标签

Operator Framework

这个验证器会根据 Operator Framework 提供的整个验证器套件测试 Operator 捆绑包。

suite=operatorframework

OperatorHub

这个验证器会测试 Operator 捆绑包以便与 OperatorHub 的兼容性。

name=operatorhub

最佳实践

此验证程序测试 Operator 捆绑包是否遵循 Operator Framework 定义的良好实践。它检查是否有问题,如空 CRD 描述或不支持的 Operator Lifecycle Manager(OLM)资源。

name=good-practices

其他资源

5.11.3. 运行 bundle validate 命令

每次进入 bundle validate 命令时,默认验证器都会运行测试。您可以使用 --select-optional 标志来运行可选验证器。可选验证器除默认测试外还运行测试。

先决条件

  • 使用 Operator SDK 生成的 operator 项目

流程

  1. 如果要针对本地捆绑包目录运行默认验证器,请从 Operator 项目目录中输入以下命令:

    $ operator-sdk bundle validate ./bundle
  2. 如果要针对远程 Operator 捆绑包镜像运行默认验证器,请输入以下命令:

    $ operator-sdk bundle validate \
      <bundle_registry>/<bundle_image_name>:<tag>

    其中:

    <bundle_registry>
    指定托管捆绑包的 registry,如 quay.io/example
    <bundle_image_name>
    指定捆绑包镜像的名称,如 memcached-operator
    <tag>

    指定捆绑包镜像的标签,如 v1.25.4

    注意

    如果要验证 Operator 捆绑包镜像,则必须在远程 registry 中托管您的镜像。Operator SDK 在运行测试前拉取(pull)镜像并在本地构建。bundle validate 命令不支持测试本地捆绑包镜像。

  3. 如果要针对 Operator 捆绑包运行附加验证器,请输入以下命令:

    $ operator-sdk bundle validate \
      <bundle_dir_or_image> \
      --select-optional <test_label>

    其中:

    <bundle_dir_or_image>
    指定本地捆绑包目录或远程捆绑包镜像,如 ~/projects/memcachedquay.io/example/memcached-operator:v1.25.4
    <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