×

安装过程中镜像注册表被移除

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

为裸机和其他手动安装配置注册表存储

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

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

  • 您的集群使用手动配置的Red Hat Enterprise Linux CoreOS (RHCOS) 节点,例如裸机。

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

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

  • 必须有100Gi容量。

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

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

  2. 验证您没有注册表Pod

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

    如果您的输出中确实有注册表Pod,则无需继续执行此过程。

  3. 检查注册表配置

    $ oc edit configs.imageregistry.operator.openshift.io
    示例输出
    storage:
      pvc:
        claim:

    claim字段留空,以允许自动创建image-registry-storage PVC。

  4. 检查clusteroperator状态

    $ oc get clusteroperator image-registry
    示例输出
    NAME             VERSION              AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    image-registry   4.17                 True        False         False      6h50m
  5. 确保您的注册表设置为已管理,以启用镜像的构建和推送。

    • 运行

      $ oc edit configs.imageregistry/cluster

      然后,更改该行

      managementState: Removed

      managementState: Managed

为非生产集群配置镜像注册表存储

必须为镜像注册表操作符配置存储。对于非生产集群,您可以将镜像注册表设置为空目录。如果您这样做,如果您重新启动注册表,所有镜像都将丢失。

步骤
  • 要将镜像注册表存储设置为空目录

    $ 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

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

为裸机配置块注册表存储

要允许镜像注册表在升级期间作为集群管理员使用块存储类型,您可以使用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文件,以定义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的自动创建。

配置镜像注册表操作符以使用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项目下,使用以下命令创建包含新桶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. 输入以下命令创建使用Ingress证书的ConfigMap:

    $ 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

配置镜像注册表操作符以使用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项目下,使用以下命令创建包含新桶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 s3 -n openshift-storage -o=jsonpath='{.spec.host}')
  6. 输入以下命令创建使用Ingress证书的ConfigMap:

    $ 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

配置镜像注册表操作符以使用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