3.9. 为 Nutanix 配置 registry
按照本文档中介绍的步骤,用户可以优化容器镜像分布、安全性和访问控制,为 OpenShift Container Platform 上的 Nutanix 应用程序启用可靠的基础
3.9.1. 安装过程中删除的镜像 registry
在不提供可共享对象存储的平台上,OpenShift Image Registry Operator bootstraps 本身为 Removed
。这允许 openshift-installer
在这些平台类型上完成安装。
安装后,您必须编辑 Image Registry Operator 配置,将 managementState
从 Removed
切换到 Managed
。完成此操作后,您必须配置存储。
3.9.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.9.3. 镜像 registry 存储配置
对于不提供默认存储的平台,Image Registry Operator 最初不可用。安装后,您必须将 registry 配置为使用存储,以便 Registry Operator 可用。
显示配置生产集群所需的持久性卷的说明。如果适用,显示有关将空目录配置为存储位置的说明,这仅适用于非生产集群。
提供了在升级过程中使用 Recreate
rollout 策略来允许镜像 registry 使用块存储类型的说明。
3.9.3.1. 为 Nutanix 配置 registry 存储
作为集群管理员,在安装后需要配置 registry 来使用存储。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 - 在 Nutanix 上有一个集群。
您已为集群置备持久性存储,如 Red Hat OpenShift Data Foundation。
重要当您只有一个副本时,OpenShift Container Platform 支持对镜像 registry 存储的
ReadWriteOnce
访问。ReadWriteOnce
访问还要求 registry 使用Recreate
rollout 策略。要部署支持高可用性的镜像 registry,需要两个或多个副本,ReadWriteMany
访问。- 您必须有 100 Gi 容量。
流程
要将 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.13 True False False 6h50m
3.9.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.9.3.3. 为 Nutanix 卷配置块 registry 存储
要允许镜像 registry 在作为集群管理员升级过程中使用块存储类型,如 Nutanix 卷,您可以使用 Recreate
rollout 策略。
支持块存储卷或块持久性卷,但不建议在生产环境中使用镜像 registry。在块存储上配置 registry 的安装不具有高可用性,因为 registry 无法具有多个副本。
如果您选择将块存储卷与镜像 registry 搭配使用,则必须使用文件系统持久性卷声明(PVC)。
流程
输入以下命令将镜像 registry 存储设置为块存储类型,对 registry 进行补丁,使其使用
Recreate
rollout 策略,并只使用一个副本运行:1
$ oc patch config.imageregistry.operator.openshift.io/cluster --type=merge -p '{"spec":{"rolloutStrategy":"Recreate","replicas":1}}'
为块存储设备置备 PV,并为该卷创建 PVC。请求的块卷使用 ReadWriteOnce(RWO)访问模式。
创建包含以下内容的
pvc.yaml
文件以定义 NutanixPersistentVolumeClaim
对象: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。
3.9.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/router-certs-default -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.9.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.9.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