5.10. 验证 Operator 捆绑包


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

重要

红帽支持的 Operator SDK CLI 工具版本,包括 Operator 项目的相关构建和测试工具已被弃用,计划在以后的 OpenShift Dedicated 发行版本中删除。红帽将在当前发行生命周期中提供对这个功能的程序错误修复和支持,但此功能将不再获得改进,并将在以后的 OpenShift Dedicated 版本中删除。

对于创建新 Operator 项目,不建议使用红帽支持的 Operator SDK 版本。现有 Operator 项目的 Operator 作者可使用 OpenShift Dedicated 4 发布的 Operator SDK CLI 工具版本来维护其项目,并创建针对较新版本的 OpenShift Dedicated 的 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>

表 5.22. 额外的 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.10.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.36.1

    注意

    如果要验证 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.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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.