This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第 9 章 在受限网络中使用 Operator Lifecycle Manager
如果在受限网络中安装 OpenShift Container Platform,Operator Lifecycle Manager (OLM) 将不再使用默认的 OperatorHub 源,因为这类源需要足够的网络连接。集群管理员可禁用这些默认源并创建本地镜像,以便 OLM 从本地源安装和管理 Operator。
9.1. 针对受限网络配置 OperatorHub 复制链接链接已复制到粘贴板!
集群管理员可对 OLM 和 OperatorHub 进行配置,以便在受限网络环境中使用本地内容。
先决条件
- 集群管理员访问 OpenShift Container Platform 集群及其内部 registry。
- 无网络限制的独立工作站。
- 如果向 OpenShift Container Platform 集群的内部 registry 推送镜像,则必须通过路由公开 registry。
-
podman1.4.4+ 版
流程
禁用默认 OperatorSource。
将
disableAllDefaultSources: true添加至 spec:oc patch OperatorHub cluster --type json \ -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'$ oc patch OperatorHub cluster --type json \ -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该操作将禁用在 OpenShift Container Platform 安装期间默认配置的默认 OperatorSource。
获取软件包列表。
要获取默认 OperatorSource 可用的软件包列表,请在不受网络限制的情况下从工作站运行以下
curl命令:curl https://quay.io/cnr/api/v1/packages?namespace=redhat-operators > packages.txt curl https://quay.io/cnr/api/v1/packages?namespace=community-operators >> packages.txt curl https://quay.io/cnr/api/v1/packages?namespace=certified-operators >> packages.txt
$ curl https://quay.io/cnr/api/v1/packages?namespace=redhat-operators > packages.txt $ curl https://quay.io/cnr/api/v1/packages?namespace=community-operators >> packages.txt $ curl https://quay.io/cnr/api/v1/packages?namespace=certified-operators >> packages.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新
packages.txt中的每个软件包均为一个 Operator,您可将其添加至您的受限网络目录中。在该列表中,您可拉取每个 Operator 或您想要向用户公开的子集。拉取 Operator 内容。
对于软件包列表中的给定 Operator,您必须拉取最新的内容:
curl https://quay.io/cnr/api/v1/packages/<namespace>/<operator_name>/<release>
$ curl https://quay.io/cnr/api/v1/packages/<namespace>/<operator_name>/<release>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 本例使用 etcd Operator:
检索摘要:
curl https://quay.io/cnr/api/v1/packages/community-operators/etcd/0.0.12
$ curl https://quay.io/cnr/api/v1/packages/community-operators/etcd/0.0.12Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从该 JSON 中获取摘要并用它拉取压缩存档:
curl -XGET https://quay.io/cnr/api/v1/packages/community-operators/etcd/blobs/sha256/8108475ee5e83a0187d6d0a729451ef1ce6d34c44a868a200151c36f3232822b \ -o etcd.tar.gz$ curl -XGET https://quay.io/cnr/api/v1/packages/community-operators/etcd/blobs/sha256/8108475ee5e83a0187d6d0a729451ef1ce6d34c44a868a200151c36f3232822b \ -o etcd.tar.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要拉取信息,必须将存档文件与您需要的所有其他 Operator 一起解压缩至
manifests/<operator_name>/目录中。例如,解压缩至名为manifests/etcd/的现有目录:mkdir -p manifests/etcd/ tar -xf etcd.tar.gz -C manifests/etcd/
$ mkdir -p manifests/etcd/1 $ tar -xf etcd.tar.gz -C manifests/etcd/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为每个解压的归档创建不同的子目录,这样文件就不会被其他 Operator 的后续解压所覆盖了。
如有必要,请拆分
bundle.yaml内容。在您的新
manifests/<operator_name>目录中,目的是让捆绑包采用以下目录结构:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的文件已采用该结构,则跳过这一步。而如果您只看到了一个名为
bundle.yaml的文件,则必须先拆分该文件以确保与要求的结构一致。您必须将
data.clusterServiceVersion下的 CSV 内容(列表中的每个文件)、data.customResourceDefinition下的 CRD 内容(列表中的每个文件)和data.Package下的软件包内容分开,放入各自文件中。要创建 CSV 文件,在
bundle.yaml文件中找到以下行:data: clusterServiceVersions: |
data: clusterServiceVersions: |Copy to Clipboard Copied! Toggle word wrap Toggle overflow 省略这些行,但保存由完整 CSV 资源内容组成的新文件,用以下行开头,并删除前置
-字符:clusterserviceversion.yaml文件片断示例apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion [...]
apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建 CRD 文件,在
bundle.yaml文件中找到以下行:customResourceDefinitions: |
customResourceDefinitions: |Copy to Clipboard Copied! Toggle word wrap Toggle overflow 省略该行,但保存由每个完整的 CRD 资源内容组成的新文件,用以下行开头,并删除前置
-字符:customresourcedefinition.yaml文件片断示例apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition [...]
apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建软件包文件,在
bundle.yaml文件中找到以下行:packages: |
packages: |Copy to Clipboard Copied! Toggle word wrap Toggle overflow 省略这一行,但保存由软件包内容组成的新文件,用以下行开头,删除前置
-字符,并以packageName条目结尾:package.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
识别您要使用的 Operator 所需的镜像。
检查每个 Operator 的 CSV 文件中的
image:字段,以明确 Operator 所需镜像的 pull spec,并做好记录以供后续步骤使用。例如,在 etcd Operator CSV 的以下
deploymentsspec 中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Operator 所需镜像。
创建 Operator 目录镜像。
将以下内容保存到某个 Dockerfile 中,如
custom-registry.Dockerfile:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
podman命令从 Dockerfile 中创建和标记容器镜像:podman build -f custom-registry.Dockerfile \ -t <local_registry_host_name>:<local_registry_host_port>/<namespace>/custom-registry$ podman build -f custom-registry.Dockerfile \ -t <local_registry_host_name>:<local_registry_host_port>/<namespace>/custom-registry1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为受限网络 OpenShift Container Platform 集群和任何命名空间的内部 registry 标记镜像。
将 Operator 目录镜像推送至 registry。
您的新 Operator 目录镜像必须推送至受限网络 OpenShift Container Platform 集群可访问的 registry 中。该 registry 可以是集群本身的内部 registry,也可以是集群可通过网络访问的另一 registry,如内部部署的 Quay Enterprise registry。
在本例中,需登录并推送该镜像至内部 registry OpenShift Container Platform 集群:
podman push <local_registry_host_name>:<local_registry_host_port>/<namespace>/custom-registry
$ podman push <local_registry_host_name>:<local_registry_host_port>/<namespace>/custom-registryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建指向新 Operator 目录镜像的 CatalogSource。
将以下内容保存到文件中,如
my-operator-catalog.yaml中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CatalogSource 资源:
oc create -f my-operator-catalog.yaml
$ oc create -f my-operator-catalog.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 CatalogSource 和软件包清单是否已创建成功:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此外,您还可在 Web 控制台的 OperatorHub 页面中查看这些内容。
对您要使用的 Operator 所需的镜像制作镜像。
确定您所期望的 Operator 定义的镜像。本例使用 etcd Operator,需要
quay.io/coreos/etcd-operator镜像。重要该流程仅显示被镜像(mirror)的 Operator 镜像本身,而非 Operand 镜像(受 Operator 管理的组件)。Operand 镜像必须被镜像(mirror);查看各个 Operator 的文档以识别所需的 Operand 镜像。
要使用被镜像的镜像,您必须首先为每个镜像创建一个 ImageContentSourcePolicy 来更改 Operator 目录镜像的源位置。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在不受网络限制的情况下,从工作站使用
oc image mirror命令,将镜像从源 registry 中拉取出来,并推送至内部 registry,而不存储在本地:oc image mirror quay.io/coreos/etcd-operator \ <local_registry_host_name>:<local_registry_host_port>/coreos/etcd-operator$ oc image mirror quay.io/coreos/etcd-operator \ <local_registry_host_name>:<local_registry_host_port>/coreos/etcd-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您可在受限网络 OpenShift Container Platform 集群上从 OperatorHub 中安装 Operator。
其他资源
- 有关将 OpenShift Container Platform 集群的内部 registry 公开至集群外访问权限的详细信息请参阅公开 registry。
- 有关访问内部 registry 的详细信息,请参阅访问 registry。