8.4. 将基于 OLM 的 Operator 添加到断开连接的集群中


您可以通过将基于 OLM 的 Operator 嵌入到 Red Hat Enterprise Linux for Edge (RHEL for Edge)镜像中,在断开连接的环境中使用基于 OLM 的 Operator。

8.4.1. 关于将基于 OLM 的 Operator 添加到断开连接的集群中

对于在断开连接的集群中安装的 Operator,Operator Lifecycle Manager (OLM)默认无法访问远程 registry 上托管的源,因为这些远程源需要足够的互联网连接。因此,您必须将远程 registry 镜像到高度可用的容器 registry。

在断开连接的环境中,需要执行以下步骤来使用基于 OLM 的 Operator:

  • 将 OLM 包含在您的镜像 registry 的容器镜像列表中。
  • 通过直接更新 CRI-O 配置将系统配置为使用您的镜像 registry。MicroShift 不支持 ImageContentSourcePolicy
  • 在集群中添加 CatalogSource 对象,以便 OLM 目录 Operator 可以使用镜像 registry 上的本地目录。
  • 确保 MicroShift 已安装在断开连接的容量中运行。
  • 确保网络设置配置为在断开连接的模式下运行。

在断开连接的集群中启用 OLM 后,您可以继续使用互联网连接的工作站在发布较新版本的 Operator 时保持本地目录源更新。

8.4.1.1. 执行空运行

您可以使用 oc-mirror 来执行空运行,而无需实际镜像(mirror)。这可让您查看要镜像的镜像列表,以及从镜像 registry 修剪的所有镜像。使用空运行(dry run)还允许您在早期版本中捕获与镜像集配置相关的任何错误,或使用生成的镜像列表以及其他工具来执行镜像操作。

先决条件

  • 您可以访问互联网来获取所需的容器镜像。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 oc-mirror CLI 插件。
  • 您已创建了镜像设置配置文件。

流程

  1. 使用 --dry-run 标志运行 oc mirror 命令来执行空运行:

    $ oc mirror --config=./imageset-config.yaml \1
      docker://registry.example:5000            \2
      --dry-run                                  3
    1
    传递创建的镜像设置配置文件。此流程假设它名为 imageset-config.yaml
    2
    指定镜像 registry。在使用 --dry-run 标志时,不会镜像这个 registry。
    3
    使用 --dry-run 标志来生成空运行工件,而不是实际的镜像设置文件。

    输出示例

    Checking push permissions for registry.example:5000
    Creating directory: oc-mirror-workspace/src/publish
    Creating directory: oc-mirror-workspace/src/v2
    Creating directory: oc-mirror-workspace/src/charts
    Creating directory: oc-mirror-workspace/src/release-signatures
    No metadata detected, creating new workspace
    wrote mirroring manifests to oc-mirror-workspace/operators.1658342351/manifests-redhat-operator-index
    
    ...
    
    info: Planning completed in 31.48s
    info: Dry run complete
    Writing image mapping to oc-mirror-workspace/mapping.txt

  2. 进入生成的工作区目录:

    $ cd oc-mirror-workspace/
  3. 查看生成的 mapping.txt 文件。

    此文件包含将要镜像的所有镜像的列表。

  4. 查看生成的 prune-plan.json 文件。

    此文件包含在发布镜像集时从镜像 registry 中修剪的所有镜像的列表。

    注意

    只有在 oc-mirror 命令指向您的镜像 registry 且需要修剪的镜像时,才会生成 prune-plan.json 文件。

8.4.1.2. 获取在断开连接的环境中用于 RHEL for Edge 的目录和 Operator 容器镜像引用

在使用 oc-mirror 插件执行空运行后,以查看您要镜像的镜像列表,您必须获取所有容器镜像引用,然后格式化要添加到镜像构建器蓝图的输出。

注意

对于为专有 Operator 创建的目录,您可以在不按照以下流程的情况下格式化镜像构建器蓝图的镜像引用。

先决条件

  • 您有一个要使用的 Operator 的目录索引。
  • 已安装 jq CLI 工具。
  • 熟悉镜像构建器蓝图文件。
  • 您有一个 Image Builder 蓝图 TOML 文件。

流程

  1. 解析目录 index.json 文件,以获取 Image Builder 蓝图中包含的镜像引用。您可以使用未过滤的目录,也可以过滤掉无法镜像的镜像:

    1. 运行以下命令,解析未过滤的目录 index.json 文件以获取镜像引用:

      jq -r --slurp '.[] | select(.relatedImages != null) | "[[containers]]\nsource = \"" + .relatedImages[].image + "\"\n"'   ./oc-mirror-workspace/src/catalogs/registry.redhat.io/redhat/redhat-operator-index/v4.17/index/index.json
    2. 如果要过滤无法镜像的镜像,请运行以下命令来过滤并解析目录 index.json 文件:

      $ jq -r --slurp '.[] | select(.relatedImages != null) | .relatedImages[] | select(.name |  contains("ppc") or contains("s390x") | not) | "[[containers]]\\nsource = \\"" + .image + "\\"\\n"' ./oc-mirror-workspace/src/catalogs/registry.redhat.io/redhat/redhat-operator-index/v4.17/index/index.json
      注意

      此步骤使用 AMQ Broker Operator 作为示例。您可以在 jq 命令中添加其他条件,以便根据您的用例的要求进行进一步过滤。

      image-reference 输出示例

      [[containers]]
      source = "registry.redhat.io/amq7/amq-broker-init-rhel8@sha256:0b2126cfb6054fdf428c1f43b69e36e93a09a49ce15350e9273c98cc08c6598b"
      
      [[containers]]
      source = "registry.redhat.io/amq7/amq-broker-init-rhel8@sha256:0dde839c2dce7cb684094bf26523c8e16677de03149a0fff468b8c3f106e1f4f"
      ...
      ...
      
      [[containers]]
      source = "registry.redhat.io/amq7/amq-broker-rhel8@sha256:e8fa2a00e576ecb95561ffbdbf87b1c82d479c8791ab2c6ce741dd0d0b496d15"
      
      [[containers]]
      source = "registry.redhat.io/amq7/amq-broker-rhel8@sha256:ff6fefad518a6c997d4c5a6e475ba89640260167f0bc27715daf3cc30116fad1"
      …
      EOF

      重要

      对于镜像和断开连接的用例,请确保从目录 index.json 文件过滤的所有源都是摘要。如果有任何源使用标签而不是摘要,Operator 安装会失败。标签需要互联网连接。

  2. 运行以下命令,查看 imageset-config.yaml 以获取 CatalogSource 自定义资源(CR)的目录镜像引用:

    $ cat imageset-config.yaml

    输出示例

    kind: ImageSetConfiguration
    apiVersion: mirror.openshift.io/v1alpha2
    storageConfig:
      registry:
        imageURL: registry.example.com/microshift-mirror
    mirror:
      operators:
      - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.17 1
        packages:
        - name: amq-broker-rhel8
          channels:
          - name: 7.11.x

    1
    使用 mirror.catalog 目录镜像引用中的值对 follwing jq 命令获取镜像摘要。在本例中,< registry.redhat.io/redhat/redhat-operator-index:v4.17 >。
  3. 运行以下命令,获取目录索引镜像的 SHA:

    $ skopeo inspect docker://<registry.redhat.io/redhat/redhat-operator-index:v4.17> | jq `.Digest` 1
    1
    使用 jq 命令的 mirror.catalog 目录镜像引用中的值来获取镜像摘要。在本例中,< registry.redhat.io/redhat/redhat-operator-index:v4.17 >。

    输出示例

    "sha256:7a76c0880a839035eb6e896d54ebd63668bb37b82040692141ba39ab4c539bc6"

  4. 要准备好将镜像引用添加到 Image Builder 蓝图文件中,请使用以下示例格式化目录镜像引用:

    [[containers]]
    source = "registry.redhat.io/redhat/redhat-operator-index@sha256:7a76c0880a839035eb6e896d54ebd63668bb37b82040692141ba39ab4c539bc6"
  5. 将之前所有步骤中的镜像引用添加到镜像构建器蓝图中。

    生成的镜像构建器蓝图示例片断

    name = "microshift_blueprint"
    description = "MicroShift 4.17.1 on x86_64 platform"
    version = "0.0.1"
    modules = []
    groups = []
    
    [[packages]] 1
    name = "microshift"
    version = "4.17.1"
    ...
    ...
    
    [customizations.services] 2
    enabled = ["microshift"]
    
    [customizations.firewall]
    ports = ["22:tcp", "80:tcp", "443:tcp", "5353:udp", "6443:tcp", "30000-32767:tcp", "30000-32767:udp"]
    ...
    ...
    
    [[containers]] 3
    source = "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:f41e79c17e8b41f1b0a5a32c3e2dd7cd15b8274554d3f1ba12b2598a347475f4"
    
    [[containers]]
    source = "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:dbc65f1fba7d92b36cf7514cd130fe83a9bd211005ddb23a8dc479e0eea645fd"
    ...
    ...
    
    [[containers]] 4
    source = "registry.redhat.io/redhat/redhat-operator-index@sha256:7a76c0880a839035eb6e896d54ebd63668bb37b82040692141ba39ab4c539bc6"
    ...
    ...
    
    [[containers]]
    source = "registry.redhat.io/amq7/amq-broker-init-rhel8@sha256:0dde839c2dce7cb684094bf26523c8e16677de03149a0fff468b8c3f106e1f4f"
    ...
    ...
    
    [[containers]]
    source = "registry.redhat.io/amq7/amq-broker-rhel8@sha256:e8fa2a00e576ecb95561ffbdbf87b1c82d479c8791ab2c6ce741dd0d0b496d15"
    
    [[containers]]
    source = "registry.redhat.io/amq7/amq-broker-rhel8@sha256:ff6fefad518a6c997d4c5a6e475ba89640260167f0bc27715daf3cc30116fad1"
    …
    EOF

    1
    使用与 microshift-release-info RPM 兼容的同一版本,所有非可选 MicroShift RPM 软件包的引用。
    2
    有关在系统引导时自动启用 MicroShift 并应用默认网络设置的引用。
    3
    对断开连接的部署所需的所有非可选 MicroShift 容器镜像的引用。
    4
    目录索引的引用。

8.4.1.3. 在断开连接的部署 RHEL for Edge 镜像中应用目录和 Operator

为断开连接的环境创建 RHEL for Edge 镜像并配置了 MicroShift 网络设置以进行断开连接的使用后,您可以配置命名空间并创建目录和 Operator 自定义资源(CR)以运行 Operator。

先决条件

  • 您有一个 RHEL for Edge 镜像。
  • 联网配置为断开连接使用。
  • 您已完成了 oc-mirror 插件空运行过程。

流程

  1. 创建 CatalogSource 自定义资源(CR),类似以下示例:

    my-catalog-source-cr.yaml 文件示例

    apiVersion: operators.coreos.com/v1alpha1
    kind: CatalogSource
    metadata:
      name: cs-redhat-operator-index
      namespace: openshift-marketplace 1
    spec:
      image: registry.example.com/redhat/redhat-operator-index:v4.17
      sourceType: grpc
      displayName:
      publisher:
      updateStrategy:
        registryPoll:
          interval: 60m

    1
    全局命名空间。将 metadata.namespace 设置为 openshift-marketplace 可让目录在所有命名空间中运行。任何命名空间中的订阅可以引用在 openshift-marketplace 命名空间中创建的目录。
    注意

    openshift-marketplace 的默认 pod 安全准入定义是 baseline,因此在该命名空间中创建的目录源自定义资源(CR)不需要设置 spec.grpcPodConfig.securityContextConfig 值。如果需要使用命名空间和 Operator,您可以设置 legacyrestricted 值。

  2. 将目录索引提交的 SHA 添加到 Catalog Source (CR)中,如下例所示:

    命名空间 spec.image 配置示例

    apiVersion: operators.coreos.com/v1alpha1
    kind: CatalogSource
    metadata:
      name: cs-redhat-operator-index
      namespace: openshift-marketplace
    spec:
      image: registry.example.com/redhat/redhat-operator-index@sha256:7a76c0880a839035eb6e896d54ebd63668bb37b82040692141ba39ab4c539bc6 1
      sourceType: grpc
      displayName:
      publisher:
      updateStrategy:
        registryPoll:
          interval: 60m

    1
    镜像提交的 SHA。使用添加到镜像构建器蓝图中的同一 SHA。
    重要

    您必须在目录 CR 中使用 SHA 而不是标签,否则 pod 无法启动。

  3. 运行以下命令,将 oc-mirror 插件试运行结果目录中的 YAML 文件应用到集群:

    $ oc apply -f ./oc-mirror-workspace/results-1708508014/catalogSource-cs-redhat-operator-index.yaml

    输出示例

    catalogsource.operators.coreos.com/cs-redhat-operator-index created

  4. 运行以下命令验证 CatalogSource 资源是否已成功安装:

    $ oc get catalogsource --all-namespaces
  5. 使用以下命令验证目录源是否正在运行:

    $ oc get pods -n openshift-marketplace

    输出示例

    NAME                             READY   STATUS    RESTARTS   AGE
    cs-redhat-operator-index-4227b   2/2     Running   0          2m5s

  6. 创建一个 Subscription CR,类似以下示例:

    my-subscription-cr.yaml 文件示例

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: amq-broker
      namespace: openshift-operators
    spec:
      channel: 7.11.x
      name: amq-broker-rhel8
      source: cs-redhat-operator-index
      sourceNamespace: openshift-marketplace

  7. 运行以下命令来应用 Subscription CR:

    $ oc apply -f ./<my-subscription-cr.yaml> 1
    1
    指定 Subscription CR 的名称,如 my-subscription-cr.yaml

    输出示例

    subscription.operators.coreos.com/amq-broker created

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.