4.3. 管理目录


重要

Operator Lifecycle Manager (OLM) v1 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

集群管理员可向其集群添加 目录、或策展 Operator 和 Kubernetes 扩展集合。Operator 作者将其产品发布到这些目录中。当您向集群添加目录时,您可以访问发布到目录中的 Operator 和扩展的版本、补丁和无线更新。

您可以使用自定义资源 (CR) 从 CLI 中声明性管理目录和扩展。

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

重要

Kubernetes 定期弃用后续版本中删除的某些 API。因此,从使用删除 API 的 Kubernetes 版本的 OpenShift Container Platform 版本开始,Operator 无法使用删除 API 的 API。

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

4.3.1. 关于 OLM v1 中的目录

您可以使用 catalogd 组件查询 Kubernetes 扩展的目录,如 Operator 和控制器,从而发现可安装的内容。Catalogd 是一个 Kubernetes 扩展,为集群客户端解包目录内容,并是微服务的 Operator Lifecycle Manager (OLM) v1 套件的一部分。目前,catalogd 解包要打包并分发为容器镜像的目录内容。

重要

如果您尝试安装没有唯一名称的 Operator 或扩展,则安装可能会失败,或者导致无法预计的结果。这是因为以下原因:

  • 如果在集群中安装 mulitple 目录,Operator Lifecycle Manager (OLM) v1 不包含在安装 Operator 或扩展时指定目录的机制。
  • OLM v1 要求在集群中安装的所有 Operator 和扩展都使用其捆绑包和软件包的唯一名称。

其他资源

4.3.2. OLM v1 中红帽提供的 Operator 目录

Operator Lifecycle Manager (OLM) v1 默认不包括红帽提供的 Operator 目录。如果要在集群中添加红帽提供的目录,请为目录创建一个自定义资源 (CR),并将其应用到集群。以下自定义资源 (CR) 示例演示了如何为 OLM v1 创建目录资源。

重要
  • 目前,Operator Lifecycle Manager (OLM) v1 无法验证私有 registry,如红帽提供的 Operator 目录。这是个已知问题。因此,依赖 Red Hat Operator 目录的 OLM v1 流程无法正常工作。(OCPBUGS-36364)

  • 如果要使用托管在一个私有 registry 上的目录,如来自 registry.redhat.io 的红帽提供的 Operator 目录,则必须有一个范围到 openshift-catalogd 命名空间的 pull secret。

    如需更多信息,请参阅"为在安全 registry 上托管的目录创建 pull secret"。

Red Hat Operator 目录示例

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
指定轮询远程 registry 以获取较新的镜像摘要的时间间隔。默认值为 24h。有效单位包括秒 (s)、分钟 (m) 和小时 (h)。要禁用轮询,请设置零值,如 0s

认证的 Operator 目录示例

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

Community 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

4.3.3. 为私有 registry 上托管的目录创建 pull secret

如果要使用托管在一个私有 registry 上的目录,如来自 registry.redhat.io 的红帽提供的 Operator 目录,则必须有一个范围到 openshift-catalogd 命名空间的 pull secret。

Catalogd 无法从 OpenShift Container Platform 集群读取全局 pull secret。Catalogd 只能读取对部署它的命名空间中的 secret 的引用。

重要

目前,Operator Lifecycle Manager (OLM) v1 无法验证私有 registry,如红帽提供的 Operator 目录。这是个已知问题。因此,依赖 Red Hat Operator 目录的 OLM v1 流程无法正常工作。(OCPBUGS-36364)

先决条件

  • 安全 registry 的登录凭证
  • 工作站上安装的 Docker 或 Podman

流程

  • 如果您已经有一个带有安全 registry 的登录凭证的 .dockercfg 文件,请运行以下命令创建一个 pull secret:

    $ oc create secret generic <pull_secret_name> \
        --from-file=.dockercfg=<file_path>/.dockercfg \
        --type=kubernetes.io/dockercfg \
        --namespace=openshift-catalogd

    例 4.9. 示例命令

    $ oc create secret generic redhat-cred \
        --from-file=.dockercfg=/home/<username>/.dockercfg \
        --type=kubernetes.io/dockercfg \
        --namespace=openshift-catalogd
  • 如果您已经有一个带有安全 registry 的登录凭证的 $HOME/.docker/config.json 文件,请运行以下命令创建一个 pull secret:

    $ oc create secret generic <pull_secret_name> \
        --from-file=.dockerconfigjson=<file_path>/.docker/config.json \
        --type=kubernetes.io/dockerconfigjson \
        --namespace=openshift-catalogd

    例 4.10. 示例命令

    $ oc create secret generic redhat-cred \
        --from-file=.dockerconfigjson=/home/<username>/.docker/config.json \
        --type=kubernetes.io/dockerconfigjson \
        --namespace=openshift-catalogd
  • 如果您没有安全 registry 的登录凭证的 Docker 配置文件,请运行以下命令来创建 pull secret:

    $ oc create secret docker-registry <pull_secret_name> \
        --docker-server=<registry_server> \
        --docker-username=<username> \
        --docker-password=<password> \
        --docker-email=<email> \
        --namespace=openshift-catalogd

    例 4.11. 示例命令

    $ oc create secret docker-registry redhat-cred \
        --docker-server=registry.redhat.io \
        --docker-username=username \
        --docker-password=password \
        --docker-email=user@example.com \
        --namespace=openshift-catalogd

4.3.4. 在集群中添加目录

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

重要

目前,Operator Lifecycle Manager (OLM) v1 无法验证私有 registry,如红帽提供的 Operator 目录。这是个已知问题。因此,依赖 Red Hat Operator 目录的 OLM v1 流程无法正常工作。(OCPBUGS-36364)

先决条件

  • 如果要使用托管在一个私有 registry 上的目录,如来自 registry.redhat.io 的红帽提供的 Operator 目录,则必须有一个范围到 openshift-catalogd 命名空间的 pull secret。

    Catalogd 无法从 OpenShift Container Platform 集群读取全局 pull secret。Catalogd 只能读取对部署它的命名空间中的 secret 的引用。

流程

  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 上,如 registry.redhat.io,您必须创建一个范围到 openshift-catalog 命名空间的 pull secret。
    3
    指定轮询远程 registry 以获取较新的镜像摘要的时间间隔。默认值为 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
      显示目录的镜像引用。

4.3.5. 删除目录

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

先决条件

  • 已安装目录。

流程

  • 运行以下命令来删除目录:

    $ oc delete clustercatalog <catalog_name>

    输出示例

    catalog.catalogd.operatorframework.io "my-catalog" deleted

验证

  • 运行以下命令验证目录是否已删除:

    $ oc get clustercatalog
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.