×

对于断开连接环境中的 OpenShift Container Platform 集群,Operator Lifecycle Manager (OLM) 默认情况下无法访问托管在远程注册表上的 Red Hat 提供的 OperatorHub 源,因为这些远程源需要完全的互联网连接。

但是,如果您有一个具有完全互联网访问权限的工作站,则作为集群管理员,您仍然可以启用集群以在断开连接的环境中使用 OLM。该工作站需要完全的互联网访问权限才能提取远程 OperatorHub 内容,用于准备远程源的本地镜像,并将内容推送到镜像注册表。

镜像注册表可以位于堡垒主机上(需要连接到您的工作站和断开连接的集群),或者位于完全断开连接或“隔离”的主机上(需要可移动介质才能将镜像内容物理移动到断开连接的环境)。

本指南描述了在断开连接的环境中启用 OLM 所需的以下流程

  • 禁用 OLM 的默认远程 OperatorHub 源。

  • 使用具有完全互联网访问权限的工作站来创建和推送 OperatorHub 内容的本地镜像到镜像注册表。

  • 配置 OLM 以从镜像注册表上的本地源安装和管理 Operator,而不是默认的远程源。

在断开连接的环境中启用 OLM 后,您可以继续使用不受限制的工作站来保持本地 OperatorHub 源更新,因为会发布更新版本的 Operator。

虽然 OLM 可以管理本地源的 Operator,但在断开连接的环境中,给定 Operator 成功运行的能力仍然取决于 Operator 本身是否满足以下条件

  • 列出其 `ClusterServiceVersion` (CSV) 对象的 `relatedImages` 参数中 Operator 可能需要执行其功能的任何相关镜像或其他容器镜像。

  • 通过摘要 (SHA) 而不是标签引用所有指定的镜像。

您可以在 Red Hat 生态系统目录 上搜索软件,以获取支持在断开模式下运行的 Red Hat Operator 列表,方法是使用以下选项进行筛选

类型

容器化应用程序

部署方法

Operator

基础设施功能

断开连接

前提条件

  • 您已以具有 `cluster-admin` 权限的用户身份登录到您的 OpenShift Container Platform 集群。

  • 如果您在 IBM Z® 上断开连接的环境中使用 OLM,则必须至少为放置注册表的目录分配 12 GB。

禁用默认的 OperatorHub 目录源

在 OpenShift Container Platform 安装期间,默认情况下为 OperatorHub 配置了源自 Red Hat 和社区项目提供的 Operator 目录。在受限网络环境中,您必须作为集群管理员禁用默认目录。然后,您可以配置 OperatorHub 以使用本地目录源。

步骤
  • 通过向 `OperatorHub` 对象添加 `disableAllDefaultSources: true` 来禁用默认目录的源

    $ oc patch OperatorHub cluster --type json \
        -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'

或者,您可以使用 Web 控制台来管理目录源。在**管理** → **集群设置** → **配置** → **OperatorHub** 页面中,单击**源**选项卡,您可以在其中创建、更新、删除、禁用和启用各个源。

镜像 Operator 目录

有关镜像化 Operator 目录以用于断开连接的集群的说明,请参见镜像化 Operator 目录以用于断开连接的集群

从 OpenShift Container Platform 4.11 开始,默认的 Red Hat 提供的 Operator 目录使用基于文件的目录格式发布。OpenShift Container Platform 4.6 到 4.10 的默认 Red Hat 提供的 Operator 目录使用已弃用的 SQLite 数据库格式发布。

与 SQLite 数据库格式相关的 opm 子命令、标志和功能也已弃用,并将在将来的版本中删除。这些功能仍然受支持,必须用于使用已弃用的 SQLite 数据库格式的目录。

许多用于处理 SQLite 数据库格式的 opm 子命令和标志(例如 opm index prune)不适用于基于文件的目录格式。有关使用基于文件的目录的更多信息,请参见Operator Framework 打包格式管理自定义目录使用 oc-mirror 插件镜像断开连接安装的镜像

向集群添加目录源

向 OpenShift Container Platform 集群添加目录源可以使用户发现和安装 Operators。集群管理员可以创建一个引用索引镜像的 CatalogSource 对象。OperatorHub 使用目录源来填充用户界面。

或者,您可以使用 Web 控制台来管理目录源。在**管理** → **集群设置** → **配置** → **OperatorHub** 页面中,单击**源**选项卡,您可以在其中创建、更新、删除、禁用和启用各个源。

先决条件
  • 您已构建并推送了一个索引镜像到注册表。

  • 您可以作为具有 cluster-admin 角色的用户访问集群。

步骤
  1. 创建一个引用您的索引镜像的 CatalogSource 对象。如果您使用 oc adm catalog mirror 命令将您的目录镜像到目标注册表,您可以使用 manifests 目录中生成的 catalogSource.yaml 文件作为起点。

    1. 根据您的规格修改以下内容,并将其保存为 catalogSource.yaml 文件

      apiVersion: operators.coreos.com/v1alpha1
      kind: CatalogSource
      metadata:
        name: my-operator-catalog (1)
        namespace: openshift-marketplace (2)
      spec:
        sourceType: grpc
        grpcPodConfig:
          securityContextConfig: <security_mode> (3)
        image: <registry>/<namespace>/redhat-operator-index:v4.17 (4)
        displayName: My Operator Catalog
        publisher: <publisher_name> (5)
        updateStrategy:
          registryPoll: (6)
            interval: 30m
      1 如果您在上传到注册表之前将内容镜像到本地文件,请删除 metadata.name 字段中的任何反斜杠 (/) 字符,以避免在创建对象时出现“无效资源名称”错误。
      2 如果您希望目录源对所有命名空间中的用户全局可用,请指定 openshift-marketplace 命名空间。否则,您可以为目录指定不同的命名空间,使其仅在该命名空间中可用。
      3 指定 legacyrestricted 的值。如果未设置该字段,则默认值为 legacy。在将来的 OpenShift Container Platform 版本中,计划将默认值设置为 restricted。如果您的目录无法在 restricted 权限下运行,建议您手动将此字段设置为 legacy
      4 指定您的索引镜像。如果您在镜像名称后指定一个标签,例如 :v4.17,则目录源 pod 将使用 Always 的镜像拉取策略,这意味着 pod 始终会在启动容器之前拉取镜像。如果您指定一个摘要,例如 @sha256:<id>,则镜像拉取策略为 IfNotPresent,这意味着 pod 仅在节点上不存在镜像时才拉取镜像。
      5 指定发布目录的您的姓名或组织名称。
      6 目录源可以自动检查新版本以保持最新。
    2. 使用该文件创建 CatalogSource 对象

      $ oc apply -f catalogSource.yaml
  2. 验证以下资源是否已成功创建。

    1. 检查 pod

      $ oc get pods -n openshift-marketplace
      示例输出
      NAME                                    READY   STATUS    RESTARTS  AGE
      my-operator-catalog-6njx6               1/1     Running   0         28s
      marketplace-operator-d9f549946-96sgr    1/1     Running   0         26h
    2. 检查目录源

      $ oc get catalogsource -n openshift-marketplace
      示例输出
      NAME                  DISPLAY               TYPE PUBLISHER  AGE
      my-operator-catalog   My Operator Catalog   grpc            5s
    3. 检查包清单

      $ oc get packagemanifest -n openshift-marketplace
      示例输出
      NAME                          CATALOG               AGE
      jaeger-product                My Operator Catalog   93s

您现在可以从 OpenShift Container Platform Web 控制台上的 **OperatorHub** 页面安装 Operators。