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 的引用。
流程
创建目录自定义资源(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
运行以下命令在集群中添加目录:
$ oc apply -f redhat-operators.yaml
输出示例
catalog.catalogd.operatorframework.io/redhat-operators created
验证
运行以下命令以验证目录的状态:
运行以下命令检查目录是否可用:
$ oc get clustercatalog
输出示例
NAME AGE redhat-operators 20s
运行以下命令,检查目录的状态:
$ 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>
4.3.5. 删除目录
您可以通过删除其自定义资源 (CR) 来删除目录。
先决条件
- 已安装目录。
流程
运行以下命令来删除目录:
$ oc delete clustercatalog <catalog_name>
输出示例
catalog.catalogd.operatorframework.io "my-catalog" deleted
验证
运行以下命令验证目录是否已删除:
$ oc get clustercatalog