3.7. 为 vSphere 配置 registry
3.7.1. 安装过程中删除的镜像 registry
在不提供可共享对象存储的平台上,OpenShift Image Registry Operator bootstraps 本身为 Removed
。这允许 openshift-installer
在这些平台类型上完成安装。
安装后,您必须编辑 Image Registry Operator 配置,将 managementState
从 Removed
切换到 Managed
。完成此操作后,您必须配置存储。
3.7.2. 更改镜像 registry 的管理状态
要启动镜像 registry,您必须将 Image Registry Operator 配置的 managementState
从 Removed 改为
Managed
。
流程
将
managementState
Image Registry Operator 配置从Removed 改为
Managed
。例如:$ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'
3.7.3. 镜像 registry 存储配置
对于不提供默认存储的平台,Image Registry Operator 最初不可用。安装后,您必须将 registry 配置为使用存储,以便 Registry Operator 可用。
显示配置生产集群所需的持久性卷的说明。如果适用,显示有关将空目录配置为存储位置的说明,这仅适用于非生产集群。
提供了在升级过程中使用 Recreate
rollout 策略来允许镜像 registry 使用块存储类型的说明。
3.7.3.1. 为 VMware vSphere 配置 registry 存储
作为集群管理员,在安装后需要配置 registry 来使用存储。
先决条件
- 集群管理员权限。
- VMware vSphere 上有一个集群。
为集群置备的持久性存储,如 Red Hat OpenShift Data Foundation。
重要当您只有一个副本时,OpenShift Container Platform 支持对镜像 registry 存储的
ReadWriteOnce
访问。ReadWriteOnce
访问还要求 registry 使用Recreate
rollout 策略。要部署支持高可用性的镜像 registry,需要两个或多个副本,ReadWriteMany
访问。必须具有"100Gi"容量.
重要测试显示在 RHEL 中使用 NFS 服务器作为核心服务的存储后端的问题。这包括 OpenShift Container Registry 和 Quay,Prometheus 用于监控存储,以及 Elasticsearch 用于日志存储。因此,不建议使用 RHEL NFS 作为 PV 后端用于核心服务。
市场上的其他 NFS 实现可能没有这些问题。如需了解更多与此问题相关的信息,请联络相关的 NFS 厂商。
流程
要将 registry 配置为使用存储,修改
configs.imageregistry/cluster
资源中的spec.storage.pvc
。注意使用共享存储时,请查看您的安全设置以防止外部访问。
验证您没有 registry pod:
$ oc get pod -n openshift-image-registry -l docker-registry=default
输出示例
No resourses found in openshift-image-registry namespace
注意如果您的输出中有一个 registry pod,则不需要继续这个过程。
检查 registry 配置:
$ oc edit configs.imageregistry.operator.openshift.io
输出示例
storage: pvc: claim: 1
- 1
- 将
claim
字段留空以允许自动创建image-registry-storage
持久性卷声明(PVC)。PVC 基于默认存储类生成。但请注意,默认存储类可能会提供 ReadWriteOnce (RWO)卷,如 RADOS 块设备(RBD),这可能会在复制到多个副本时导致问题。
检查
clusteroperator
状态:$ oc get clusteroperator image-registry
输出示例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE image-registry 4.7 True False False 6h50m
3.7.3.2. 在非生产集群中为镜像 registry 配置存储
您必须为 Image Registry Operator 配置存储。对于非生产集群,您可以将镜像 registry 设置为空目录。如果您这样做,重启 registry 时会丢失所有镜像。
流程
将镜像 registry 存储设置为空目录:
$ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}'
警告仅为非生产集群配置这个选项。
如果在 Image Registry Operator 初始化其组件前运行这个命令,
oc patch
命令会失败并显示以下错误:Error from server (NotFound): configs.imageregistry.operator.openshift.io "cluster" not found
等待几分钟,然后再次运行 命令。
3.7.3.3. 为 VMware vSphere 配置块 registry 存储
要允许镜像 registry 在作为集群管理员升级过程中使用块存储类型,如 vSphere Virtual Machine Disk(VMDK),您可以使用 Recreate rollout 策略
。
支持块存储卷,但不建议在生产环境中用于镜像 registry。在块存储上配置 registry 的安装不具有高可用性,因为 registry 无法具有多个副本。
流程
输入以下命令将镜像 registry 存储设置为块存储类型,对 registry 进行补丁,使其使用
Recreate
rollout 策略,并只使用一个
副本运行:$ oc patch config.imageregistry.operator.openshift.io/cluster --type=merge -p '{"spec":{"rolloutStrategy":"Recreate","replicas":1}}'
为块存储设备置备 PV,并为该卷创建 PVC。请求的块卷使用 ReadWriteOnce(RWO)访问模式。
创建包含以下内容的
pvc.yaml
文件以定义 VMware vSpherePersistentVolumeClaim
对象:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: image-registry-storage 1 namespace: openshift-image-registry 2 spec: accessModes: - ReadWriteOnce 3 resources: requests: storage: 100Gi 4
输入以下命令从文件创建
PersistentVolumeClaim
对象:$ oc create -f pvc.yaml -n openshift-image-registry
输入以下命令编辑 registry 配置,使其引用正确的 PVC:
$ oc edit config.imageregistry.operator.openshift.io -o yaml
输出示例
storage: pvc: claim: 1
- 1
- 通过创建自定义 PVC,您可以将
claim
字段留空,以便默认自动创建image-registry-storage
PVC。
有关配置 registry 存储以便引用正确的 PVC 的说明,请参阅 为 vSphere 配置 registry。
3.7.3.4. 将 Image Registry Operator 配置为使用带有 Red Hat OpenShift Data Foundation 的 Ceph RGW 存储
Red Hat OpenShift Data Foundation 集成了多个可与 OpenShift 镜像 registry 搭配使用的存储类型:
- Ceph、共享和分布式文件系统以及内部对象存储
- NooBaa 提供多云对象网关
本文档概述了将镜像 registry 配置为使用 Ceph RGW 存储的步骤。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 - 访问 OpenShift Container Platform web 控制台。
-
已安装
oc
CLI。 - 已安装 OpenShift Data Foundation Operator,提供对象存储和 Ceph RGW 对象存储。
流程
使用
ocs-storagecluster-ceph-rgw
存储类创建对象存储桶声明。例如:cat <<EOF | oc apply -f - apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: rgwbucket namespace: openshift-storage 1 spec: storageClassName: ocs-storagecluster-ceph-rgw generateBucketName: rgwbucket EOF
- 1
- 另外,您可以使用
openshift-image-registry
命名空间。
输入以下命令来获取存储桶名称:
$ bucket_name=$(oc get obc -n openshift-storage rgwbucket -o jsonpath='{.spec.bucketName}')
输入以下命令来获取 AWS 凭证:
$ AWS_ACCESS_KEY_ID=$(oc get secret -n openshift-storage rgwbucket -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 --decode)
$ AWS_SECRET_ACCESS_KEY=$(oc get secret -n openshift-storage rgwbucket -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 --decode)
输入以下命令,在
openshift-image-registry
项目下,使用新存储桶的 AWS 凭证创建 secretimage-registry-private-configuration-user
:$ oc create secret generic image-registry-private-configuration-user --from-literal=REGISTRY_STORAGE_S3_ACCESSKEY=${AWS_ACCESS_KEY_ID} --from-literal=REGISTRY_STORAGE_S3_SECRETKEY=${AWS_SECRET_ACCESS_KEY} --namespace openshift-image-registry
输入以下命令来获取
route
主机:$ route_host=$(oc get route ocs-storagecluster-cephobjectstore -n openshift-storage --template='{{ .spec.host }}')
输入以下命令来创建使用入口证书的配置映射:
$ oc extract secret/$(oc get ingresscontroller -n openshift-ingress-operator default -o json | jq '.spec.defaultCertificate.name // "router-certs-default"' -r) -n openshift-ingress --confirm
$ oc create configmap image-registry-s3-bundle --from-file=ca-bundle.crt=./tls.crt -n openshift-config
输入以下命令配置镜像 registry,以使用 Ceph RGW 对象存储:
$ oc patch config.image/cluster -p '{"spec":{"managementState":"Managed","replicas":2,"storage":{"managementState":"Unmanaged","s3":{"bucket":'\"${bucket_name}\"',"region":"us-east-1","regionEndpoint":'\"https://${route_host}\"',"virtualHostedStyle":false,"encrypt":false,"trustedCA":{"name":"image-registry-s3-bundle"}}}}}' --type=merge
3.7.3.5. 配置 Image Registry Operator,将 Noobaa 存储与 Red Hat OpenShift Data Foundation 一起使用
Red Hat OpenShift Data Foundation 集成了多个可与 OpenShift 镜像 registry 搭配使用的存储类型:
- Ceph、共享和分布式文件系统以及内部对象存储
- NooBaa 提供多云对象网关
本文档概述了将镜像 registry 配置为使用 Noobaa 存储的步骤。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 - 访问 OpenShift Container Platform web 控制台。
-
已安装
oc
CLI。 - 已安装 OpenShift Data Foundation Operator 以提供对象存储和 Noobaa 对象存储。
流程
使用
openshift-storage.nooba.io
存储类创建对象存储桶声明。例如:cat <<EOF | oc apply -f - apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: noobaatest namespace: openshift-storage 1 spec: storageClassName: openshift-storage.noobaa.io generateBucketName: noobaatest EOF
- 1
- 另外,您可以使用
openshift-image-registry
命名空间。
输入以下命令来获取存储桶名称:
$ bucket_name=$(oc get obc -n openshift-storage noobaatest -o jsonpath='{.spec.bucketName}')
输入以下命令来获取 AWS 凭证:
$ AWS_ACCESS_KEY_ID=$(oc get secret -n openshift-storage noobaatest -o yaml | grep -w "AWS_ACCESS_KEY_ID:" | head -n1 | awk '{print $2}' | base64 --decode)
$ AWS_SECRET_ACCESS_KEY=$(oc get secret -n openshift-storage noobaatest -o yaml | grep -w "AWS_SECRET_ACCESS_KEY:" | head -n1 | awk '{print $2}' | base64 --decode)
输入以下命令,在
openshift-image-registry
项目下,使用新存储桶的 AWS 凭证创建 secretimage-registry-private-configuration-user
:$ oc create secret generic image-registry-private-configuration-user --from-literal=REGISTRY_STORAGE_S3_ACCESSKEY=${AWS_ACCESS_KEY_ID} --from-literal=REGISTRY_STORAGE_S3_SECRETKEY=${AWS_SECRET_ACCESS_KEY} --namespace openshift-image-registry
输入以下命令来获取路由主机:
$ route_host=$(oc get route s3 -n openshift-storage -o=jsonpath='{.spec.host}')
输入以下命令来创建使用入口证书的配置映射:
$ oc extract secret/$(oc get ingresscontroller -n openshift-ingress-operator default -o json | jq '.spec.defaultCertificate.name // "router-certs-default"' -r) -n openshift-ingress --confirm
$ oc create configmap image-registry-s3-bundle --from-file=ca-bundle.crt=./tls.crt -n openshift-config
输入以下命令将镜像 registry 配置为使用 Nooba 对象存储:
$ oc patch config.image/cluster -p '{"spec":{"managementState":"Managed","replicas":2,"storage":{"managementState":"Unmanaged","s3":{"bucket":'\"${bucket_name}\"',"region":"us-east-1","regionEndpoint":'\"https://${route_host}\"',"virtualHostedStyle":false,"encrypt":false,"trustedCA":{"name":"image-registry-s3-bundle"}}}}}' --type=merge
3.7.4. 配置 Image Registry Operator,以使用 Red Hat OpenShift Data Foundation 的 CephFS 存储
Red Hat OpenShift Data Foundation 集成了多个可与 OpenShift 镜像 registry 搭配使用的存储类型:
- Ceph、共享和分布式文件系统以及内部对象存储
- NooBaa 提供多云对象网关
本文档概述了配置镜像 registry 以使用 CephFS 存储的步骤。
CephFS 使用持久性卷声明 (PVC) 存储。如果存在其他选项,如 Ceph RGW 或 Noobaa,则不建议将 PVC 用于镜像 registry 存储。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 - 访问 OpenShift Container Platform web 控制台。
-
已安装
oc
CLI。 - 已安装 OpenShift Data Foundation Operator,以提供对象存储和 CephFS 文件存储。
流程
创建一个 PVC 来使用
cephfs
存储类。例如:cat <<EOF | oc apply -f - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: registry-storage-pvc namespace: openshift-image-registry spec: accessModes: - ReadWriteMany resources: requests: storage: 100Gi storageClassName: ocs-storagecluster-cephfs EOF
输入以下命令配置镜像 registry,以使用 CephFS 文件系统存储:
$ oc patch config.image/cluster -p '{"spec":{"managementState":"Managed","replicas":2,"storage":{"managementState":"Unmanaged","pvc":{"claim":"registry-storage-pvc"}}}}' --type=merge