Menu Close

5.8.3. 发布包含捆绑 Operator 的目录

要安装和管理 Operator,Operator Lifecycle Manager(OLM)要求 Operator 捆绑包列在索引镜像中,该镜像由集群中的目录引用。作为 Operator 作者,您可以使用 Operator SDK 为 Operator 及其所有依赖项创建一个包含捆绑包的索引。这可用于测试远程集群并发布到容器 registry。

注意

Operator SDK 使用 opm CLI 来简化索引镜像的创建。不要求具备 opm 命令相关经验。对于高级用例,可以直接使用 opm 命令,而不是 Operator SDK。

先决条件

  • 在开发工作站上安装 operator SDK CLI
  • 构建并推送到 registry 的 Operator 捆绑包镜像
  • OLM安装在一个基于 Kubernetes 的集群上(如果使用 apiextensions.k8s.io/v1 CRD,则为 v1.16.0 或更新版本,如 OpenShift Container Platform 4.8)
  • 使用具有 cluster-admin 权限的账户使用 oc 登录到集群

流程

  1. 在 Operator 项目目录中运行以下 make 命令,以构建包含 Operator 捆绑包的索引镜像:

    $ make catalog-build CATALOG_IMG=<registry>/<user>/<index_image_name>:<tag>

    其中 CATALOG_IMG 参数引用您有权访问的存储库。您可以获取在存储库站点(如 Quay.io)存储容器的帐户。

  2. 将构建的索引镜像推送到存储库:

    $ make catalog-push CATALOG_IMG=<registry>/<user>/<index_image_name>:<tag>
    提示

    如果您要同时按顺序执行多个操作,您可以使用 Operator SDK make 命令。例如,如果您还没有为 Operator 项目构建捆绑包镜像,您可以使用以下语法构建和推送捆绑包镜像和索引镜像:

    $ make bundle-build bundle-push catalog-build catalog-push \
        BUNDLE_IMG=<bundle_image_pull_spec> \
        CATALOG_IMG=<index_image_pull_spec>

    另外,您可以将 Makefile 中的 IMAGE_TAG_BASE 字段设置为现有的存储库:

    IMAGE_TAG_BASE=quay.io/example/my-operator

    然后,您可以使用以下语法使用自动生成的名称构建和推送镜像,例如捆绑包镜像 quay.io/example/my-operator-bundle:v0.0.1quay.io/example/my-operator-catalog:v0.0.1 作为索引镜像:

    $ make bundle-build bundle-push catalog-build catalog-push
  3. 定义一个 CatalogSource 对象来引用您刚才生成的索引镜像,然后使用 oc apply 命令或 Web 控制台创建对象:

    CatalogSource YAML 示例

    apiVersion: operators.coreos.com/v1alpha1
    kind: CatalogSource
    metadata:
      name: cs-memcached
      namespace: default
    spec:
      displayName: My Test
      publisher: Company
      sourceType: grpc
      image: quay.io/example/memcached-catalog:v0.0.1 1
      updateStrategy:
        registryPoll:
          interval: 10m

    1
    image 设置为您之前与 CATALOG_IMG 参数搭配使用的镜像拉取规格。
  4. 检查目录源:

    $ oc get catalogsource

    输出示例

    NAME           DISPLAY     TYPE   PUBLISHER   AGE
    cs-memcached   My Test     grpc   Company     4h31m

验证

  1. 使用您的目录安装 Operator:

    1. 定义 OperatorGroup 对象并使用 oc apply 命令或 Web 控制台创建它:

      OperatorGroup YAML 示例

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: my-test
        namespace: default
      spec:
        targetNamespaces:
        - default

    2. 定义 Subscription 对象并使用 oc apply 命令或 Web 控制台创建它:

      Subscription YAML 示例

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: catalogtest
        namespace: default
      spec:
        channel: "alpha"
        installPlanApproval: Manual
        name: catalog
        source: cs-memcached
        sourceNamespace: default
        startingCSV: memcached-operator.v0.0.1

  2. 验证已安装的 Operator 是否正在运行:

    1. 检查 Operator 组:

      $ oc get og

      输出示例

      NAME             AGE
      my-test           4h40m

    2. 检查集群服务版本(CSV):

      $ oc get csv

      输出示例

      NAME                        DISPLAY   VERSION   REPLACES   PHASE
      memcached-operator.v0.0.1   Test      0.0.1                Succeeded

    3. 检查 Operator 的 pod:

      $ oc get pods

      输出示例

      NAME                                                              READY   STATUS      RESTARTS   AGE
      9098d908802769fbde8bd45255e69710a9f8420a8f3d814abe88b68f8ervdj6   0/1     Completed   0          4h33m
      catalog-controller-manager-7fd5b7b987-69s4n                       2/2     Running     0          4h32m
      cs-memcached-7622r                                                1/1     Running     0          4h33m

其他资源

  • 如需了解更多高级用例,请参阅管理自定义目录以了解有关 opm CLI 直接使用的详情。