$ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'
按照本文档中概述的步骤,用户可以优化容器镜像分发、安全性和访问控制,从而为OpenShift Container Platform上的Nutanix应用程序奠定坚实的基础。
在不提供可共享对象存储的平台上,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
滚动策略使用块存储类型。
作为集群管理员,安装后必须配置注册表以使用存储。
您可以作为具有cluster-admin
角色的用户访问集群。
您在Nutanix上有一个集群。
您已为集群预配了持久性存储,例如Red Hat OpenShift Data Foundation。
当您只有一个副本时,OpenShift Container Platform支持镜像仓库存储的 |
您必须拥有100 Gi容量。
要配置注册表以使用存储,请更改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.13 True False False 6h50m
您必须为镜像注册表操作符配置存储。对于非生产集群,您可以将镜像注册表设置为空目录。如果您这样做,如果重新启动注册表,所有镜像都将丢失。
将镜像注册表存储设置为空目录
$ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}'
仅为非生产集群配置此选项。 |
如果您在镜像注册表操作符初始化其组件之前运行此命令,则oc patch
命令将失败并显示以下错误
Error from server (NotFound): configs.imageregistry.operator.openshift.io "cluster" not found
等待几分钟,然后再次运行命令。
要允许镜像注册表在升级期间使用块存储类型(例如 Nutanix 卷),作为集群管理员,您可以使用Recreate
滚动策略。
块存储卷或块持久卷受支持,但不建议在生产集群上与镜像注册表一起使用。注册表配置在块存储上的安装不是高可用的,因为注册表不能拥有多个副本。 如果您选择将块存储卷与镜像注册表一起使用,则必须使用文件系统持久卷声明 (PVC)。 |
输入以下命令以将镜像注册表存储设置为块存储类型,修补注册表使其使用Recreate
滚动策略,并仅使用一个 (1
) 副本运行
$ oc patch config.imageregistry.operator.openshift.io/cluster --type=merge -p '{"spec":{"rolloutStrategy":"Recreate","replicas":1}}'
为块存储设备预配 PV,并为该卷创建一个 PVC。请求的块卷使用 ReadWriteOnce (RWO) 访问模式。
创建一个包含以下内容的pvc.yaml
文件以定义 Nutanix 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。 |
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
项目下创建包含新存储桶 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
项目下创建包含新存储桶 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 文件存储。
创建 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
输入以下命令配置镜像注册表以使用 CephFS 文件系统存储
$ oc patch config.image/cluster -p '{"spec":{"managementState":"Managed","replicas":2,"storage":{"managementState":"Unmanaged","pvc":{"claim":"registry-storage-pvc"}}}}' --type=merge