×

安装过程中删除镜像仓库

在不提供可共享对象存储的平台上,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滚动策略使用块存储类型。

为Nutanix配置注册表存储

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

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

  • 您在Nutanix上有一个集群。

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

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

  • 您必须拥有100 Gi容量。

步骤
  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.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 卷配置块注册表存储

要允许镜像注册表在升级期间使用块存储类型(例如 Nutanix 卷),作为集群管理员,您可以使用Recreate滚动策略。

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

如果您选择将块存储卷与镜像注册表一起使用,则必须使用文件系统持久卷声明 (PVC)。

步骤
  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文件以定义 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 持久卷声明的大小。
    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。

配置镜像注册表操作符以与 Red Hat OpenShift Data Foundation 一起使用 Ceph RGW 存储

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项目下创建包含新存储桶 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

配置镜像注册表操作符以与 Red Hat OpenShift Data Foundation 一起使用 Noobaa 存储

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项目下创建包含新存储桶 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

配置镜像注册表操作符以与 Red Hat OpenShift Data Foundation 一起使用 CephFS 存储

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

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