Menu Close

3.8.2.4. 测试软件包清单格式目录镜像

要验证 Operator 目录镜像内容,您可以将其作为容器运行并查询其 gRPC API。要进一步测试镜像,您可以通过引用目录源中的镜像来在 Operator Lifecycle Manager(OLM)中解析订阅。本例中的流程使用之前构建并推送到受支持的 registry 的自定义 redhat-operators 目录镜像。

先决条件

  • 推送到受支持的 registry 的自定义 Package Manifest Format 目录镜像
  • podman 版本 1.9.3+
  • oc 版本 4.3.5+
  • 访问支持 Docker v2-2 的镜像(mirror)registry

    重要

    OpenShift Container Platform 集群的内部 registry 不能用作目标 registry,因为它不支持没有标签的推送(在镜像过程中需要这个功能)。

  • grpcurl

流程

  1. 拉取 Operator 目录镜像:

    $ podman pull <registry_host_name>:<port>/olm/redhat-operators:v1
  2. 运行镜像:

    $ podman run -p 50051:50051 \
        -it <registry_host_name>:<port>/olm/redhat-operators:v1
  3. 使用 grpcurl 查询正在运行的镜像中的可用软件包:

    $ grpcurl -plaintext localhost:50051 api.Registry/ListPackages

    输出示例

    {
      "name": "3scale-operator"
    }
    {
      "name": "amq-broker"
    }
    {
      "name": "amq-online"
    }

  4. 在频道中获取最新的 Operator 捆绑包:

    $  grpcurl -plaintext -d '{"pkgName":"kiali-ossm","channelName":"stable"}' localhost:50051 api.Registry/GetBundleForChannel

    输出示例

    {
      "csvName": "kiali-operator.v1.0.7",
      "packageName": "kiali-ossm",
      "channelName": "stable",
    ...

  5. 获取镜像摘要:

    $ podman inspect \
        --format='{{index .RepoDigests 0}}' \
        <registry_host_name>:<port>/olm/redhat-operators:v1

    输出示例

    example_registry:5000/olm/redhat-operators@sha256:f73d42950021f9240389f99ddc5b0c7f1b533c054ba344654ff1edaf6bf827e3

  6. 假设命名空间 my-ns 中存在一个支持您的 Operator 及其依赖项的 Operator 组,使用镜像摘要创建一个 CatalogSource 对象。例如:

    apiVersion: operators.coreos.com/v1alpha1
    kind: CatalogSource
    metadata:
      name: custom-redhat-operators
      namespace: my-ns
    spec:
      sourceType: grpc
      image: example_registry:5000/olm/redhat-operators@sha256:f73d42950021f9240389f99ddc5b0c7f1b533c054ba344654ff1edaf6bf827e3
      displayName: Red Hat Operators
  7. 创建一个可从您的目录镜像解析最新可用 servicemeshoperator 及其依赖项的订阅:

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: servicemeshoperator
      namespace: my-ns
    spec:
      source: custom-redhat-operators
      sourceNamespace: my-ns
      name: servicemeshoperator
      channel: "1.0"