$ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'
在不提供可共享对象存储的平台上,OpenShift 镜像注册表运算符将自身引导为Removed
。这允许openshift-installer
完成这些平台类型的安装。
安装后,必须编辑镜像注册表运算符配置以将managementState
从Removed
切换到Managed
。完成此操作后,必须配置存储。
要启动镜像注册表,必须将镜像注册表运算符配置的managementState
从Removed
更改为Managed
。
将managementState
镜像注册表运算符配置从Removed
更改为Managed
。例如
$ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'
对于不提供默认存储的平台,镜像注册表运算符最初不可用。安装后,必须配置注册表以使用存储,以便注册表运算符可用。
显示了配置持久卷的说明,这是生产集群所必需的。在适用的情况下,将显示说明,以将空目录配置为存储位置,这仅适用于非生产集群。
提供了其他说明,允许镜像注册表在升级期间使用Recreate
滚动策略使用块存储类型。
作为集群管理员,安装后必须配置注册表以使用存储。
集群管理员权限。
VMware vSphere 上的集群。
为您的集群预配的持久性存储,例如 Red Hat OpenShift Data Foundation。
当您只有一个副本时,OpenShift Container Platform 支持镜像注册表存储的 |
必须具有“100Gi”容量。
测试表明使用 RHEL 上的 NFS 服务器作为核心服务的存储后端存在问题。这包括 OpenShift Container Registry 和 Quay、用于监控存储的 Prometheus 以及用于记录存储的 Elasticsearch。因此,不建议使用 RHEL NFS 来支持核心服务使用的 PV。 市场上的其他 NFS 实现可能没有这些问题。请联系各个 NFS 实现供应商,以获取有关针对这些 OpenShift Container Platform 核心组件可能完成的任何测试的更多信息。 |
要配置注册表以使用存储,请更改configs.imageregistry/cluster
资源中的spec.storage.pvc
。
使用共享存储时,请查看您的安全设置以防止外部访问。 |
验证您没有注册表 pod
$ oc get pod -n openshift-image-registry -l docker-registry=default
No resourses found in openshift-image-registry namespace
如果您的输出中确实有注册表 pod,则无需继续执行此步骤。 |
检查注册表配置
$ 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
您必须为 Image Registry Operator 配置存储。对于非生产集群,您可以将镜像注册表设置为一个空目录。如果您这样做,则如果重新启动注册表,所有镜像都会丢失。
将镜像注册表存储设置为空目录
$ 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
等待几分钟,然后再次运行该命令。
要允许镜像注册表在升级期间使用块存储类型(例如 vSphere 虚拟机磁盘 (VMDK)),作为集群管理员,您可以使用Recreate
部署策略。
块存储卷受支持,但不建议在生产集群中与镜像注册表一起使用。在生产集群中,如果注册表配置在块存储上,则安装不是高可用的,因为注册表不能拥有多个副本。 |
输入以下命令以将镜像注册表存储设置为块存储类型,修补注册表使其使用Recreate
部署策略,并仅以1
个副本运行
$ oc patch config.imageregistry.operator.openshift.io/cluster --type=merge -p '{"spec":{"rolloutStrategy":"Recreate","replicas":1}}'
为块存储设备预配 PV,并为该卷创建 PVC。请求的块卷使用 ReadWriteOnce (RWO) 访问模式。
创建一个包含以下内容的pvc.yaml
文件以定义 VMware vSphere PersistentVolumeClaim
对象
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: image-registry-storage (1)
namespace: openshift-image-registry (2)
spec:
accessModes:
- ReadWriteOnce (3)
resources:
requests:
storage: 100Gi (4)
1 | 一个唯一名称,代表PersistentVolumeClaim 对象。 |
2 | PersistentVolumeClaim 对象的命名空间,即openshift-image-registry 。 |
3 | 持久卷声明的访问模式。使用ReadWriteOnce ,卷可以被单个节点以读写权限挂载。 |
4 | 持久卷声明的大小。 |
输入以下命令从文件创建PersistentVolumeClaim
对象
$ oc create -f pvc.yaml -n openshift-image-registry
输入以下命令编辑注册表配置,使其引用正确的 PVC
$ oc edit config.imageregistry.operator.openshift.io -o yaml
storage:
pvc:
claim: (1)
1 | 通过创建自定义 PVC,您可以将claim 字段留空,以便默认情况下自动创建image-registry-storage PVC。 |
有关配置注册表存储以引用正确的 PVC 的说明,请参阅为 vSphere 配置注册表。
Red Hat OpenShift Data Foundation 集成了多种存储类型,您可以将这些存储类型与 OpenShift 镜像注册表一起使用
Ceph,一个共享的分布式文件系统和本地对象存储
NooBaa,提供多云对象网关
本文档概述了将镜像注册表配置为使用 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 project
下创建包含新存储桶的 AWS 凭据的密钥image-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
输入以下命令配置镜像注册表以使用 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
Red Hat OpenShift Data Foundation 集成了多种存储类型,您可以将这些存储类型与 OpenShift 镜像注册表一起使用
Ceph,一个共享的分布式文件系统和本地对象存储
NooBaa,提供多云对象网关
本文档概述了将镜像注册表配置为使用 Noobaa 存储的过程。
您可以作为具有cluster-admin
角色的用户访问集群。
您可以访问 OpenShift Container Platform Web 控制台。
您已安装oc
CLI。
您已安装OpenShift Data Foundation Operator以提供对象存储和 Noobaa 对象存储。
使用openshift-storage.noobaa.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 project
下创建包含新存储桶的 AWS 凭据的密钥image-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
输入以下命令配置镜像注册表以使用 Noobaa 对象存储
$ 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
Red Hat OpenShift Data Foundation 集成了多种存储类型,您可以将这些存储类型与 OpenShift 镜像注册表一起使用
Ceph,一个共享的分布式文件系统和本地对象存储
NooBaa,提供多云对象网关
本文档概述了将镜像注册表配置为使用 CephFS 存储的过程。
CephFS 使用持久卷声明 (PVC) 存储。如果不提供其他选项(例如 Ceph RGW 或 Noobaa),则不建议将 PVC 用于镜像注册表存储。 |
您可以作为具有cluster-admin
角色的用户访问集群。
您可以访问 OpenShift Container Platform Web 控制台。
您已安装oc
CLI。
您已安装OpenShift Data Foundation Operator以提供对象存储和 CephFS 文件存储。
创建一个使用cephfs
存储类的 PVC。例如
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
输入以下命令配置镜像注册表以使用 CephFS 文件系统存储
$ oc patch config.image/cluster -p '{"spec":{"managementState":"Managed","replicas":2,"storage":{"managementState":"Unmanaged","pvc":{"claim":"registry-storage-pvc"}}}}' --type=merge