×

Operator Lifecycle Manager (OLM) v1 仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围

集群管理员可以将 *目录*(或经过精心挑选的 Operators 和 Kubernetes 扩展集合)添加到其集群中。Operator 作者将其产品发布到这些目录。将目录添加到集群后,您可以访问发布到该目录的 Operators 和扩展的版本、补丁和无线更新。

您可以使用自定义资源 (CR) 通过 CLI 以声明方式管理目录和扩展。

*基于文件的目录* 是 Operator Lifecycle Manager (OLM) 中目录格式的最新迭代。它是基于纯文本(JSON 或 YAML)的声明性配置演变,取代了早期的 SQLite 数据库格式,并且完全向后兼容。

Kubernetes 定期弃用某些 API,这些 API 在后续版本中将被删除。因此,从使用删除该 API 的 Kubernetes 版本的 OpenShift Container Platform 版本开始,Operators 将无法使用已删除的 API。

如果您的集群使用自定义目录,请参阅 控制 Operator 与 OpenShift Container Platform 版本的兼容性,了解有关 Operator 作者如何更新其项目以避免工作负载问题并防止不兼容升级的更多详细信息。

关于 OLM v1 中的目录

您可以通过查询目录以获取 Kubernetes 扩展(例如 Operators 和控制器),使用 catalogd 组件来发现可安装的内容。Catalogd 是一个 Kubernetes 扩展,它为集群内客户端解压缩目录内容,并且是 Operator Lifecycle Manager (OLM) v1 微服务套件的一部分。目前,catalogd 解压缩作为容器镜像打包和分发的目录内容。

如果您尝试安装没有唯一名称的 Operator 或扩展,则安装可能会失败或导致不可预测的结果。出现这种情况的原因如下:

  • 如果在集群上安装了多个目录,则 Operator Lifecycle Manager (OLM) v1 不包含在安装 Operator 或扩展时指定目录的机制。

  • OLM v1 要求所有可安装在集群上的 Operators 和扩展都为其捆绑包和包使用唯一名称。

附加资源

OLM v1 中 Red Hat 提供的 Operator 目录

Operator Lifecycle Manager (OLM) v1 默认不包含 Red Hat 提供的 Operator 目录。如果您想将 Red Hat 提供的目录添加到您的集群,请为该目录创建一个自定义资源 (CR) 并将其应用于集群。以下自定义资源 (CR) 示例展示了如何为 OLM v1 创建目录资源。

  • 目前,Operator Lifecycle Manager (OLM) v1 无法验证私有注册表,例如 Red Hat 提供的 Operator 目录。这是一个已知问题。因此,依赖于安装 Red Hat Operators 目录的 OLM v1 流程无法正常工作。(OCPBUGS-36364)

  • 如果您想使用托管在私有注册表上的目录,例如来自 registry.redhat.io 的 Red Hat 提供的 Operator 目录,则必须拥有一个作用域为 openshift-catalogd 命名空间的拉取密钥。

    更多信息,请参见“为托管在安全注册表上的目录创建拉取密钥”。

Red Hat Operators 目录示例
apiVersion: catalogd.operatorframework.io/v1alpha1
kind: ClusterCatalog
metadata:
  name: redhat-operators
spec:
  source:
    type: image
    image:
      ref: registry.redhat.io/redhat/redhat-operator-index:v4.17
      pullSecret: <pull_secret_name>
      pollInterval: <poll_interval_duration> (1)
1 指定轮询远程注册表以查找较新镜像摘要的间隔。默认值为 24h。有效单位包括秒 (s)、分钟 (m) 和小时 (h)。要禁用轮询,请设置零值,例如 0s
经过认证的 Operators 目录示例
apiVersion: catalogd.operatorframework.io/v1alpha1
kind: ClusterCatalog
metadata:
  name: certified-operators
spec:
  source:
    type: image
    image:
      ref: registry.redhat.io/redhat/certified-operator-index:v4.17
      pullSecret: <pull_secret_name>
      pollInterval: 24h
社区 Operators 目录示例
apiVersion: catalogd.operatorframework.io/v1alpha1
kind: ClusterCatalog
metadata:
  name: community-operators
spec:
  source:
    type: image
    image:
      ref: registry.redhat.io/redhat/community-operator-index:v4.17
      pullSecret: <pull_secret_name>
      pollInterval: 24h

以下命令将目录添加到您的集群

命令语法
$ oc apply -f <catalog_name>.yaml (1)
1 指定目录 CR,例如 redhat-operators.yaml

为托管在私有注册表上的目录创建拉取密钥

如果您想使用托管在私有注册表上的目录,例如来自 registry.redhat.io 的 Red Hat 提供的 Operator 目录,则必须拥有一个作用域为 openshift-catalogd 命名空间的拉取密钥。

Catalogd 无法从 OpenShift Container Platform 集群读取全局拉取密钥。Catalogd 只能读取其部署命名空间中密钥的引用。

目前,Operator Lifecycle Manager (OLM) v1 无法验证私有注册表,例如 Red Hat 提供的 Operator 目录。这是一个已知问题。因此,依赖于安装 Red Hat Operators 目录的 OLM v1 流程无法正常工作。(OCPBUGS-36364)

先决条件
  • 安全注册表的登录凭据

  • 在您的工作站上安装 Docker 或 Podman

步骤
  • 如果您已经有包含安全注册表登录凭据的 .dockercfg 文件,请运行以下命令创建拉取密钥

    $ oc create secret generic <pull_secret_name> \
        --from-file=.dockercfg=<file_path>/.dockercfg \
        --type=kubernetes.io/dockercfg \
        --namespace=openshift-catalogd
    命令示例
    $ oc create secret generic redhat-cred \
        --from-file=.dockercfg=/home/<username>/.dockercfg \
        --type=kubernetes.io/dockercfg \
        --namespace=openshift-catalogd
  • 如果您已经有包含安全注册表登录凭据的 $HOME/.docker/config.json 文件,请运行以下命令创建拉取密钥

    $ oc create secret generic <pull_secret_name> \
        --from-file=.dockerconfigjson=<file_path>/.docker/config.json \
        --type=kubernetes.io/dockerconfigjson \
        --namespace=openshift-catalogd
    命令示例
    $ oc create secret generic redhat-cred \
        --from-file=.dockerconfigjson=/home/<username>/.docker/config.json \
        --type=kubernetes.io/dockerconfigjson \
        --namespace=openshift-catalogd
  • 如果您没有包含安全注册表登录凭据的 Docker 配置文件,请运行以下命令创建拉取密钥

    $ oc create secret docker-registry <pull_secret_name> \
        --docker-server=<registry_server> \
        --docker-username=<username> \
        --docker-password=<password> \
        --docker-email=<email> \
        --namespace=openshift-catalogd
    命令示例
    $ oc create secret docker-registry redhat-cred \
        --docker-server=registry.redhat.io \
        --docker-username=username \
        --docker-password=password \
        --docker-email=[email protected] \
        --namespace=openshift-catalogd

将目录添加到集群

要将目录添加到集群,请创建一个目录自定义资源 (CR) 并将其应用于集群。

目前,Operator Lifecycle Manager (OLM) v1 无法验证私有注册表,例如 Red Hat 提供的 Operator 目录。这是一个已知问题。因此,依赖于安装 Red Hat Operators 目录的 OLM v1 流程无法正常工作。(OCPBUGS-36364)

先决条件
  • 如果您想使用托管在私有注册表上的目录,例如来自 registry.redhat.io 的 Red Hat 提供的 Operator 目录,则必须拥有一个作用域为 openshift-catalogd 命名空间的拉取密钥。

    Catalogd 无法从 OpenShift Container Platform 集群读取全局拉取密钥。Catalogd 只能读取其部署命名空间中密钥的引用。

步骤
  1. 创建一个类似于以下示例的目录自定义资源 (CR)

    redhat-operators.yaml 示例
    apiVersion: catalogd.operatorframework.io/v1alpha1
    kind: ClusterCatalog
    metadata:
      name: redhat-operators
    spec:
      source:
        type: image
        image:
          ref: registry.redhat.io/redhat/redhat-operator-index:v4.17 (1)
          pullSecret: <pull_secret_name> (2)
          pollInterval: <poll_interval_duration> (3)
    1 spec.source.image 字段中指定目录的镜像。
    2 如果您的目录托管在安全注册表(例如 registry.redhat.io)上,则必须创建一个作用域为 openshift-catalog 命名空间的拉取密钥。
    3 指定轮询远程注册表以查找较新镜像摘要的间隔。默认值为 24h。有效单位包括秒 (s)、分钟 (m) 和小时 (h)。要禁用轮询,请设置零值,例如 0s
  2. 运行以下命令将目录添加到您的集群

    $ oc apply -f redhat-operators.yaml
    输出示例
    catalog.catalogd.operatorframework.io/redhat-operators created
验证
  • 运行以下命令以验证目录的状态

    1. 运行以下命令检查您的目录是否可用

      $ oc get clustercatalog
      输出示例
      NAME                  AGE
      redhat-operators      20s
    2. 运行以下命令检查目录的状态

      $ oc describe clustercatalog
      输出示例
      Name:         redhat-operators
      Namespace:
      Labels:       <none>
      Annotations:  <none>
      API Version:  catalogd.operatorframework.io/v1alpha1
      Kind:         ClusterCatalog
      Metadata:
        Creation Timestamp:  2024-06-10T17:34:53Z
        Finalizers:
          catalogd.operatorframework.io/delete-server-cache
        Generation:        1
        Resource Version:  46075
        UID:               83c0db3c-a553-41da-b279-9b3cddaa117d
      Spec:
        Source:
          Image:
            Pull Secret:  redhat-cred
            Ref:          registry.redhat.io/redhat/redhat-operator-index:v4.17
          Type:           image
      Status: (1)
        Conditions:
          Last Transition Time:  2024-06-10T17:35:15Z
          Message:
          Reason:                UnpackSuccessful (2)
          Status:                True
          Type:                  Unpacked
        Content URL:             https://catalogd-catalogserver.openshift-catalogd.svc/catalogs/redhat-operators/all.json
        Observed Generation:     1
        Phase:                   Unpacked (3)
        Resolved Source:
          Image:
            Last Poll Attempt:  2024-06-10T17:35:10Z
            Ref:                registry.redhat.io/redhat/redhat-operator-index:v4.17
            Resolved Ref:       registry.redhat.io/redhat/redhat-operator-index@sha256:f2ccc079b5e490a50db532d1dc38fd659322594dcf3e653d650ead0e862029d9 (4)
          Type:                 image
      Events:                   <none>
      1 描述目录的状态。
      2 显示目录处于当前状态的原因。
      3 显示安装过程的阶段。
      4 显示目录的镜像引用。

删除目录

您可以通过删除其自定义资源 (CR) 来删除目录。

先决条件
  • 您已安装了一个目录。

步骤
  • 运行以下命令删除目录

    $ oc delete clustercatalog <catalog_name>
    输出示例
    catalog.catalogd.operatorframework.io "my-catalog" deleted
验证
  • 运行以下命令验证目录是否已删除

    $ oc get clustercatalog