×

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

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

不建议使用Red Hat支持的Operator SDK版本创建新的Operator项目。拥有现有Operator项目的Operator作者可以使用Red Hat OpenShift Service on AWS发布的Operator SDK CLI工具版本来维护其项目并创建针对较新版本的Red Hat OpenShift Service on AWS的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验证器
名称 描述 标签

Operator Framework

此验证器会针对Operator Framework提供的整套验证器测试Operator bundle。

suite=operatorframework

OperatorHub

此验证器会测试Operator bundle与OperatorHub的兼容性。

name=operatorhub

最佳实践

此验证器会测试Operator bundle是否符合Operator Framework定义的最佳实践。它会检查诸如空CRD描述或不受支持的Operator Lifecycle Manager (OLM)资源等问题。

name=good-practices

其他资源

运行bundle validate命令

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

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

步骤
  1. 如果要对本地bundle目录运行默认验证器,请从您的Operator项目目录输入以下命令

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

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

    其中

    <bundle_registry>

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

    <bundle_image_name>

    指定bundle镜像的名称,例如memcached-operator

    <tag>

    指定bundle镜像的标签,例如v1.36.1

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

  3. 如果要对Operator bundle运行其他验证器,请输入以下命令

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

    其中

    <bundle_dir_or_image>

    指定本地bundle目录或远程bundle镜像,例如~/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