×

安装期间删除镜像注册表

在不提供可共享对象存储的平台上,OpenShift 镜像注册表运算符将自身引导为Removed。这允许openshift-installer完成这些平台类型的安装。

安装后,必须编辑镜像注册表运算符配置以将managementStateRemoved切换到Managed。完成此操作后,必须配置存储。

更改镜像注册表的管理状态

要启动镜像注册表,必须将镜像注册表运算符配置的managementStateRemoved更改为Managed

步骤
  • managementState镜像注册表运算符配置从Removed更改为Managed。例如

    $ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'

镜像注册表存储配置

对于不提供默认存储的平台,镜像注册表运算符最初不可用。安装后,必须配置注册表以使用存储,以便注册表运算符可用。

显示了配置持久卷的说明,这是生产集群所必需的。在适用的情况下,将显示说明,以将空目录配置为存储位置,这仅适用于非生产集群。

提供了其他说明,允许镜像注册表在升级期间使用Recreate滚动策略使用块存储类型。

为 VMware vSphere 配置注册表存储

作为集群管理员,安装后必须配置注册表以使用存储。

先决条件
  • 集群管理员权限。

  • VMware vSphere 上的集群。

  • 为您的集群预配的持久性存储,例如 Red Hat OpenShift Data Foundation。

    当您只有一个副本时,OpenShift Container Platform 支持镜像注册表存储的ReadWriteOnce访问。ReadWriteOnce访问还要求注册表使用Recreate滚动策略。要部署支持具有两个或多个副本的高可用性的镜像注册表,需要ReadWriteMany访问。

  • 必须具有“100Gi”容量。

测试表明使用 RHEL 上的 NFS 服务器作为核心服务的存储后端存在问题。这包括 OpenShift Container Registry 和 Quay、用于监控存储的 Prometheus 以及用于记录存储的 Elasticsearch。因此,不建议使用 RHEL NFS 来支持核心服务使用的 PV。

市场上的其他 NFS 实现可能没有这些问题。请联系各个 NFS 实现供应商,以获取有关针对这些 OpenShift Container Platform 核心组件可能完成的任何测试的更多信息。

步骤
  1. 要配置注册表以使用存储,请更改configs.imageregistry/cluster资源中的spec.storage.pvc

    使用共享存储时,请查看您的安全设置以防止外部访问。

  2. 验证您没有注册表 pod

    $ oc get pod -n openshift-image-registry -l docker-registry=default
    示例输出
    No resourses found in openshift-image-registry namespace

    如果您的输出中确实有注册表 pod,则无需继续执行此步骤。

  3. 检查注册表配置

    $ oc edit configs.imageregistry.operator.openshift.io
    示例输出
    storage:
      pvc:
        claim: (1)
    1 claim字段留空以允许自动创建image-registry-storage持久卷声明 (PVC)。PVC 是根据默认存储类生成的。但是,请注意,默认存储类可能会提供 ReadWriteOnce (RWO) 卷,例如 RADOS 块设备 (RBD),当您复制到多个副本时,这可能会导致问题。
  4. 检查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

    等待几分钟,然后再次运行该命令。

为 VMware vSphere 配置块注册表存储

要允许镜像注册表在升级期间使用块存储类型(例如 vSphere 虚拟机磁盘 (VMDK)),作为集群管理员,您可以使用Recreate部署策略。

块存储卷受支持,但不建议在生产集群中与镜像注册表一起使用。在生产集群中,如果注册表配置在块存储上,则安装不是高可用的,因为注册表不能拥有多个副本。

步骤
  1. 输入以下命令以将镜像注册表存储设置为块存储类型,修补注册表使其使用Recreate部署策略,并仅以1个副本运行

    $ oc patch config.imageregistry.operator.openshift.io/cluster --type=merge -p '{"spec":{"rolloutStrategy":"Recreate","replicas":1}}'
  2. 为块存储设备预配 PV,并为该卷创建 PVC。请求的块卷使用 ReadWriteOnce (RWO) 访问模式。

    1. 创建一个包含以下内容的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 持久卷声明的大小。
    2. 输入以下命令从文件创建PersistentVolumeClaim对象

      $ oc create -f pvc.yaml -n openshift-image-registry
  3. 输入以下命令编辑注册表配置,使其引用正确的 PVC

    $ oc edit config.imageregistry.operator.openshift.io -o yaml
    示例输出
    storage:
      pvc:
        claim: (1)
    1 通过创建自定义 PVC,您可以将claim字段留空,以便默认情况下自动创建image-registry-storage PVC。

有关配置注册表存储以引用正确的 PVC 的说明,请参阅为 vSphere 配置注册表

配置 Image Registry Operator 以使用 Ceph RGW 存储和 Red Hat OpenShift Data Foundation

Red Hat OpenShift Data Foundation 集成了多种存储类型,您可以将这些存储类型与 OpenShift 镜像注册表一起使用

  • Ceph,一个共享的分布式文件系统和本地对象存储

  • NooBaa,提供多云对象网关

本文档概述了将镜像注册表配置为使用 Ceph RGW 存储的过程。

先决条件
  • 您可以作为具有cluster-admin角色的用户访问集群。

  • 您可以访问 OpenShift Container Platform Web 控制台。

  • 您已安装oc CLI。

  • 您已安装OpenShift Data Foundation Operator以提供对象存储和 Ceph RGW 对象存储。

步骤
  1. 使用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命名空间。
  2. 输入以下命令获取存储桶名称

    $ bucket_name=$(oc get obc -n openshift-storage rgwbucket -o jsonpath='{.spec.bucketName}')
  3. 输入以下命令获取 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)
  4. 输入以下命令在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
  5. 输入以下命令获取route主机

    $ route_host=$(oc get route ocs-storagecluster-cephobjectstore -n openshift-storage --template='{{ .spec.host }}')
  6. 输入以下命令创建使用入口证书的配置映射

    $ 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
  7. 输入以下命令配置镜像注册表以使用 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

配置 Image Registry Operator 以使用 Noobaa 存储和 Red Hat OpenShift Data Foundation

Red Hat OpenShift Data Foundation 集成了多种存储类型,您可以将这些存储类型与 OpenShift 镜像注册表一起使用

  • Ceph,一个共享的分布式文件系统和本地对象存储

  • NooBaa,提供多云对象网关

本文档概述了将镜像注册表配置为使用 Noobaa 存储的过程。

先决条件
  • 您可以作为具有cluster-admin角色的用户访问集群。

  • 您可以访问 OpenShift Container Platform Web 控制台。

  • 您已安装oc CLI。

  • 您已安装OpenShift Data Foundation Operator以提供对象存储和 Noobaa 对象存储。

步骤
  1. 使用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命名空间。
  2. 输入以下命令获取存储桶名称

    $ bucket_name=$(oc get obc -n openshift-storage noobaatest -o jsonpath='{.spec.bucketName}')
  3. 输入以下命令获取 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)
  4. 输入以下命令在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
  5. 输入以下命令获取路由主机

    $ route_host=$(oc get route s3 -n openshift-storage -o=jsonpath='{.spec.host}')
  6. 输入以下命令创建使用入口证书的配置映射

    $ 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
  7. 输入以下命令配置镜像注册表以使用 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

配置 Image Registry Operator 以使用 CephFS 存储和 Red Hat OpenShift Data Foundation

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 文件存储。

步骤
  1. 创建一个使用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
  2. 输入以下命令配置镜像注册表以使用 CephFS 文件系统存储

    $ oc patch config.image/cluster -p '{"spec":{"managementState":"Managed","replicas":2,"storage":{"managementState":"Unmanaged","pvc":{"claim":"registry-storage-pvc"}}}}' --type=merge