×

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

红帽支持的 Operator SDK CLI 工具版本(包括相关的脚手架和 Operator 项目测试工具)已弃用,并计划在未来的 OpenShift Dedicated 版本中移除。红帽将在当前版本生命周期内为此功能提供错误修复和支持,但此功能将不再接收增强功能,并将从未来的 OpenShift Dedicated 版本中移除。

不建议使用红帽支持的 Operator SDK 版本创建新的 Operator 项目。拥有现有 Operator 项目的 Operator 作者可以使用随 OpenShift Dedicated 发布的 Operator SDK CLI 工具版本来维护其项目并创建针对较新版本的 OpenShift Dedicated 的 Operator 版本。

以下与 Operator 项目相关的基础镜像_未_被弃用。这些基础镜像的运行时功能和配置 API 仍然支持错误修复和解决 CVE。

  • 基于 Ansible 的 Operator 项目的基础镜像

  • 基于 Helm 的 Operator 项目的基础镜像

有关不受支持的、社区维护的 Operator SDK 版本的信息,请参阅Operator SDK (Operator Framework)

关于 bundle validate 命令

虽然 Operator SDK `scorecard` 命令可以根据配置文件和测试镜像对您的 Operator 运行测试,但`bundle validate` 子命令可以验证本地 bundle 目录和远程 bundle 镜像的内容和结构。

`bundle validate` 命令语法
$ operator-sdk bundle validate <bundle_dir_or_image> <flags>

当您使用`make bundle` 命令构建 bundle 时,`bundle validate` 命令会自动运行。

bundle 镜像会在验证之前从远程注册表中拉取并在本地构建。本地 bundle 目录必须包含 Operator 元数据和清单。bundle 元数据和清单必须具有与以下 bundle 布局类似的结构

bundle 布局示例
./bundle
  ├── manifests
  │   ├── cache.my.domain_memcacheds.yaml
  │   └── memcached-operator.clusterserviceversion.yaml
  └── metadata
      └── annotations.yaml

如果未检测到错误,bundle 测试将通过验证并以退出代码`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

只要未检测到错误,导致警告的 bundle 测试仍然可以通过验证并以退出代码`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

内置 bundle validate 测试

Operator SDK 附带预定义的验证器,这些验证器被排列成套件。如果您运行`bundle validate` 命令而不指定验证器,则会运行默认测试。默认测试会验证 bundle 是否符合 Operator Framework 社区定义的规范。有关更多信息,请参阅“bundle 格式”。

您可以运行可选验证器来测试 OperatorHub 兼容性或已弃用的 Kubernetes API 等问题。可选验证器始终会除默认测试外额外运行。

`bundle validate` 命令的可选测试套件语法
$ operator-sdk bundle validate <bundle_dir_or_image>
  --select-optional <test_label>
表 1. 其他`bundle validate` 验证器
名称 描述 标签

操作符框架

此验证器针对操作符框架提供的整套验证器测试操作符捆绑包。

suite=operatorframework

OperatorHub

此验证器测试操作符捆绑包与 OperatorHub 的兼容性。

name=operatorhub

最佳实践

此验证器测试操作符捆绑包是否符合操作符框架定义的最佳实践。它会检查诸如空的 CRD 描述或不受支持的操作符生命周期管理器 (OLM) 资源等问题。

name=good-practices

附加资源

运行 bundle validate 命令

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

先决条件
  • 使用 Operator SDK 生成的操作符项目

步骤
  1. 如果要针对本地捆绑包目录运行默认验证器,请从您的操作符项目目录输入以下命令:

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

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

    其中

    <bundle_registry>

    指定托管捆绑包的注册表,例如quay.io/example

    <bundle_image_name>

    指定捆绑包镜像的名称,例如memcached-operator

    <tag>

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

    如果要验证操作符捆绑包镜像,则必须将您的镜像托管在远程注册表中。Operator SDK 会拉取镜像并在本地构建它,然后再运行测试。bundle validate命令不支持测试本地捆绑包镜像。

  3. 如果要针对操作符捆绑包运行其他验证器,请输入以下命令:

    $ 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