×

云平台和 OpenStack 上的镜像仓库

镜像仓库操作员安装 OpenShift 镜像仓库的单个实例,并管理所有仓库配置,包括设置仓库存储。

只有在您在 AWS、Azure、GCP、IBM® 或 OpenStack 上安装安装程序预配的基础设施集群时,才会自动配置存储。

在 AWS、Azure、GCP、IBM® 或 OpenStack 上安装或升级安装程序预配的基础设施集群时,镜像仓库操作员会将spec.storage.managementState参数设置为Managed。如果spec.storage.managementState参数设置为Unmanaged,则镜像仓库操作员不会执行与存储相关的任何操作。

在管理集群中部署控制平面后,操作员会根据在集群中检测到的配置创建默认的configs.imageregistry.operator.openshift.io资源实例。

如果可用信息不足以定义完整的configs.imageregistry.operator.openshift.io资源,则会定义不完整的资源,并且操作员会使用有关缺少哪些信息的信息更新资源状态。

镜像仓库操作员管理修剪程序的行为与为镜像仓库操作员的ClusterOperator对象指定的managementState无关。如果镜像仓库操作员未处于Managed状态,则仍然可以通过Pruning自定义资源配置和管理镜像修剪程序。

但是,镜像仓库操作员的managementState会改变已部署的镜像修剪程序作业的行为

  • Managed:镜像修剪程序的--prune-registry标志设置为true

  • Removed:镜像修剪程序的--prune-registry标志设置为false,这意味着它只修剪 etcd 中的镜像元数据。

裸机、Nutanix 和 vSphere 上的镜像仓库

安装过程中删除的镜像仓库

在不提供可共享对象存储的平台上,OpenShift 镜像仓库操作员会将自身引导为Removed。这允许openshift-installer在这些平台类型上完成安装。

安装后,您必须编辑镜像仓库操作员配置以将managementStateRemoved切换到Managed。完成后,您必须配置存储。

镜像仓库操作员在可用区中的分布

镜像仓库操作员的默认配置将镜像仓库 Pod 分布在拓扑区域中,以防止在所有 Pod 都受到影响的完整区域故障情况下出现延迟恢复时间。

在部署具有与区域相关的拓扑约束时,镜像仓库操作员默认为以下设置

部署具有与区域相关的拓扑约束的镜像仓库操作员
  topologySpreadConstraints:
  - labelSelector:
      matchLabels:
        docker-registry: default
    maxSkew: 1
    topologyKey: kubernetes.io/hostname
    whenUnsatisfiable: DoNotSchedule
  - labelSelector:
      matchLabels:
        docker-registry: default
    maxSkew: 1
    topologyKey: node-role.kubernetes.io/worker
    whenUnsatisfiable: DoNotSchedule
  - labelSelector:
      matchLabels:
        docker-registry: default
    maxSkew: 1
    topologyKey: topology.kubernetes.io/zone
    whenUnsatisfiable: DoNotSchedule

在部署没有与区域相关的拓扑约束时,镜像仓库操作员默认为以下设置,这适用于裸机和 vSphere 实例

部署没有与区域相关的拓扑约束的镜像仓库操作员
 topologySpreadConstraints:
  - labelSelector:
      matchLabels:
        docker-registry: default
    maxSkew: 1
    topologyKey: kubernetes.io/hostname
    whenUnsatisfiable: DoNotSchedule
  - labelSelector:
      matchLabels:
        docker-registry: default
    maxSkew: 1
    topologyKey: node-role.kubernetes.io/worker
    whenUnsatisfiable: DoNotSchedule

集群管理员可以通过配置configs.imageregistry.operator.openshift.io/cluster规范文件来覆盖默认的topologySpreadConstraints。在这种情况下,只有您提供的约束适用。

镜像仓库操作员配置参数

configs.imageregistry.operator.openshift.io资源提供以下配置参数。

参数 描述

managementState

Managed:操作员会在更新配置资源时更新注册表。

Unmanaged:操作员会忽略对配置资源的更改。

Removed:操作员会删除注册表实例并拆除操作员预配的任何存储。

logLevel

设置注册表实例的logLevel。默认为Normal

支持以下logLevel

  • Normal

  • Debug

  • Trace

  • TraceAll

httpSecret

注册表需要的值来保护上传,默认情况下生成。

operatorLogLevel

operatorLogLevel配置参数为操作员本身提供基于意图的日志记录,并提供一种简单的方法来管理操作员必须自行解释的粗粒度日志记录选择。此配置参数默认为Normal。它不提供细粒度控制。

支持以下operatorLogLevel

  • Normal

  • Debug

  • Trace

  • TraceAll

proxy

定义在调用主 API 和上游注册表时要使用的代理。

affinity

您可以使用affinity参数配置镜像注册表操作符 Pod 的调度偏好和约束。

亲和性设置可以使用podAffinitypodAntiAffinity规范。这两个选项都可以使用preferredDuringSchedulingIgnoredDuringExecution规则或requiredDuringSchedulingIgnoredDuringExecution规则。

存储

Storagetype:配置注册表存储的详细信息,例如 S3 存储桶坐标。通常默认为配置。

只读

指示注册表实例是否应拒绝推送新镜像或删除现有镜像的尝试。

请求

API 请求限制详细信息。控制给定注册表实例在将附加请求排队之前将处理多少个并行请求。

默认路由

确定是否使用默认主机名定义外部路由。如果启用,则路由使用重新加密加密。默认为false

路由

要创建的其他路由的数组。您需要提供路由的主机名和证书。

发布策略

定义镜像注册表部署的发布策略。默认为RollingUpdate

副本数

注册表的副本数。

禁用重定向

控制是将所有数据通过注册表路由,还是重定向到后端。默认为false

spec.storage.managementState

对于在 AWS 或 Azure 上使用安装程序预配的基础架构的新安装或升级集群,镜像注册表操作符会将spec.storage.managementState参数设置为Managed

  • Managed:确定镜像注册表操作符管理底层存储。如果镜像注册表操作符的managementState设置为Removed,则存储将被删除。

    • 如果managementState设置为Managed,则镜像注册表操作符会尝试对底层存储单元应用一些默认配置。例如,如果设置为Managed,则操作符会在将其提供给注册表之前尝试启用 S3 存储桶上的加密。如果您不希望将默认设置应用于您提供的存储,请确保将managementState设置为Unmanaged

  • Unmanaged:确定镜像注册表操作符忽略存储设置。如果镜像注册表操作符的managementState设置为Removed,则存储不会被删除。如果您提供了底层存储单元配置(例如存储桶或容器名称),并且spec.storage.managementState尚未设置为任何值,则镜像注册表操作符将其配置为Unmanaged

使用自定义资源定义启用镜像注册表默认路由

在 OpenShift Container Platform 中,Registry 操作符控制 OpenShift 镜像注册表功能。操作符由configs.imageregistry.operator.openshift.io自定义资源定义 (CRD) 定义。

如果您需要自动启用镜像注册表默认路由,请修补镜像注册表操作符 CRD。

步骤
  • 修补镜像注册表操作符 CRD

    $ oc patch configs.imageregistry.operator.openshift.io/cluster --type merge -p '{"spec":{"defaultRoute":true}}'

为镜像注册表访问配置额外的信任存储

image.config.openshift.io/cluster自定义资源可以包含对包含在镜像注册表访问期间应信任的其他证书颁发机构的配置映射的引用。

先决条件
  • 证书颁发机构 (CA) 必须是 PEM 编码的。

步骤

您可以在openshift-config命名空间中创建一个配置映射,并在image.config.openshift.io自定义资源中的AdditionalTrustedCA中使用其名称来提供联系外部注册表时应信任的其他 CA。

配置映射键是具有应为此 CA 信任的端口的注册表的主机名,而 PEM 证书内容是每个其他应信任的注册表 CA 的值。

镜像注册表 CA 配置映射示例
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-registry-ca
data:
  registry.example.com: |
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----
  registry-with-port.example.com..5000: | (1)
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----
1 如果注册表具有端口,例如registry-with-port.example.com:5000,则应将:替换为..

您可以使用以下步骤配置其他 CA。

  • 配置其他 CA

    $ oc create configmap registry-config --from-file=<external_registry_address>=ca.crt -n openshift-config
    $ oc edit image.config.openshift.io cluster
    spec:
      additionalTrustedCA:
        name: registry-config

为镜像注册表操作符配置存储凭据

除了configs.imageregistry.operator.openshift.io和 ConfigMap 资源外,存储凭据配置还通过位于openshift-image-registry命名空间中的单独密钥资源提供给操作符。

image-registry-private-configuration-user密钥提供访问和管理存储所需的凭据。如果找到默认凭据,它将覆盖操作符使用的默认凭据。

步骤
  • 创建一个包含所需密钥的 OpenShift Container Platform 密钥。

    $ oc create secret generic image-registry-private-configuration-user --from-literal=KEY1=value1 --from-literal=KEY2=value2 --namespace openshift-image-registry