3.6. 为裸机配置 registry

3.6.1. 安装过程中删除的镜像 registry

在不提供可共享对象存储的平台上,OpenShift Image Registry Operator bootstraps 本身为 Removed。这允许 openshift-installer 在这些平台类型上完成安装。

安装后,您必须编辑 Image Registry Operator 配置,将 managementStateRemoved 切换到 Managed

3.6.2. 更改镜像 registry 的管理状态

要启动镜像 registry,您必须将 Image Registry Operator 配置的 managementStateRemoved 改为 Managed

流程

  • managementState Image Registry Operator 配置从 Removed 改为 Managed。例如:

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

3.6.3. 镜像 registry 存储配置

对于不提供默认存储的平台,Image Registry Operator 最初不可用。安装后,您必须将 registry 配置为使用存储,以便 Registry Operator 可用。

显示配置生产集群所需的持久性卷的说明。如果适用,显示有关将空目录配置为存储位置的说明,这仅适用于非生产集群。

提供了在升级过程中使用 Recreate rollout 策略来允许镜像 registry 使用块存储类型的说明。

3.6.3.1. 为裸机和其他手动安装配置 registry 存储

作为集群管理员,在安装后需要配置 registry 来使用存储。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 您有一个使用手动置备的 Red Hat Enterprise Linux CoreOS(RHCOS)节点(如裸机)的集群。
  • 您已为集群置备持久性存储,如 Red Hat OpenShift Data Foundation。

    重要

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

  • 必须具有 100Gi 容量。

流程

  1. 要将 registry 配置为使用存储,修改 configs.imageregistry/cluster 资源中的 spec.storage.pvc

    注意

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

  2. 验证您没有 registry pod:

    $ oc get pod -n openshift-image-registry -l docker-registry=default

    输出示例

    No resources found in openshift-image-registry namespace

    注意

    如果您的输出中有一个 registry pod,则不需要继续这个过程。

  3. 检查 registry 配置:

    $ 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.12                 True        False         False      6h50m

  5. 确保 registry 设置为 managed,以启用镜像的构建和推送。

    • 运行:

      $ oc edit configs.imageregistry/cluster

      然后,更改行

      managementState: Removed

      managementState: Managed

3.6.3.2. 在非生产集群中为镜像 registry 配置存储

您必须为 Image Registry Operator 配置存储。对于非生产集群,您可以将镜像 registry 设置为空目录。如果您这样做,重启 registry 时会丢失所有镜像。

流程

  • 将镜像 registry 存储设置为空目录:

    $ 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

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

3.6.3.3. 为裸机配置块 registry 存储

要允许镜像 registry 在作为集群管理员升级过程中使用块存储类型,您可以使用 Recreate rollout 策略

重要

支持块存储卷或块持久性卷,但不建议在生产环境中使用镜像 registry。在块存储上配置 registry 的安装不具有高可用性,因为 registry 无法具有多个副本。

如果您选择将块存储卷与镜像 registry 搭配使用,则必须使用文件系统持久性卷声明(PVC)。

流程

  1. 输入以下命令将镜像 registry 存储设置为块存储类型,对 registry 进行补丁,使其使用 Recreate rollout 策略,并只使用一个副本运行:

    $ 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. 输入以下命令编辑 registry 配置,使其引用正确的 PVC:

    $ oc edit config.imageregistry.operator.openshift.io -o yaml

    输出示例

    storage:
      pvc:
        claim: 1

    1
    通过创建自定义 PVC,您可以将 claim 字段留空,以便默认自动创建 image-registry-storage PVC。

3.6.3.4. 将 Image Registry Operator 配置为使用带有 Red Hat OpenShift Data Foundation 的 Ceph RGW 存储

Red Hat OpenShift Data Foundation 集成了多个可与 OpenShift 镜像 registry 搭配使用的存储类型:

  • Ceph、共享和分布式文件系统以及内部对象存储
  • NooBaa 提供多云对象网关

本文档概述了将镜像 registry 配置为使用 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 凭证创建 secret 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. 输入以下命令来获取 buckethost 值:

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

    $ oc extract secret/router-certs-default  -n openshift-ingress  --confirm
    $ oc create configmap image-registry-s3-bundle --from-file=ca-bundle.crt=./tls.crt  -n openshift-config
  7. 输入以下命令配置镜像 registry,以使用 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

3.6.3.5. 配置 Image Registry Operator,将 Noobaa 存储与 Red Hat OpenShift Data Foundation 一起使用

Red Hat OpenShift Data Foundation 集成了多个可与 OpenShift 镜像 registry 搭配使用的存储类型:

  • Ceph、共享和分布式文件系统以及内部对象存储
  • NooBaa 提供多云对象网关

本文档概述了将镜像 registry 配置为使用 Noobaa 存储的步骤。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 访问 OpenShift Container Platform web 控制台。
  • 已安装 oc CLI。
  • 已安装 OpenShift Data Foundation Operator 以提供对象存储和 Noobaa 对象存储。

流程

  1. 使用 openshift-storage.nooba.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 凭证创建 secret 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/router-certs-default  -n openshift-ingress  --confirm
    $ oc create configmap image-registry-s3-bundle --from-file=ca-bundle.crt=./tls.crt  -n openshift-config
  7. 输入以下命令将镜像 registry 配置为使用 Nooba 对象存储:

    $ 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

3.6.4. 配置 Image Registry Operator,以使用 Red Hat OpenShift Data Foundation 的 CephFS 存储

Red Hat OpenShift Data Foundation 集成了多个可与 OpenShift 镜像 registry 搭配使用的存储类型:

  • Ceph、共享和分布式文件系统以及内部对象存储
  • NooBaa 提供多云对象网关

本文档概述了配置镜像 registry 以使用 CephFS 存储的步骤。

注意

CephFS 使用持久性卷声明 (PVC) 存储。如果存在其他选项,如 Ceph RGW 或 Noobaa,则不建议将 PVC 用于镜像 registry 存储。

先决条件

  • 您可以使用具有 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. 输入以下命令配置镜像 registry,以使用 CephFS 文件系统存储:

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

3.6.5. 其他资源