×

您可以通过替换当前的拉取密钥或附加新的拉取密钥来更新集群的全局拉取密钥。当用户使用与安装期间使用的注册表不同的注册表来存储镜像时,需要此过程。更多信息,请参见 使用镜像拉取密钥

有关镜像以及配置镜像流或镜像注册表的信息,请参见以下文档

为断开连接的集群配置镜像流

在断开连接的环境中安装 OpenShift Container Platform 后,请为集群样本操作器和must-gather镜像流配置镜像流。

集群样本操作器协助镜像

安装期间,OpenShift Container Platform 在openshift-cluster-samples-operator命名空间中创建一个名为imagestreamtag-to-image的配置映射。imagestreamtag-to-image配置映射包含一个条目(填充镜像),用于每个镜像流标签。

配置映射数据字段中每个条目的键的格式为<image_stream_name>_<image_stream_tag_name>

在断开连接安装 OpenShift Container Platform 期间,集群示例运算符的状态设置为已移除。如果您选择将其更改为已管理,它将安装示例。

在网络受限或断开连接的环境中使用示例可能需要访问网络外部的服务。一些示例服务包括:Github、Maven Central、npm、RubyGems、PyPi 等。可能需要采取其他步骤才能使集群示例运算符的对象访问其所需的服务。

您可以使用此 ConfigMap 作为参考,了解哪些镜像需要镜像才能导入您的镜像流。

  • 当集群示例运算符设置为已移除时,您可以创建镜像注册表,或确定要使用哪个现有的镜像注册表。

  • 使用新的 ConfigMap 作为指南,将您想要的示例镜像到镜像注册表。

  • 将您未镜像的任何镜像流添加到集群示例运算符配置对象的skippedImagestreams列表中。

  • 将集群示例运算符配置对象的samplesRegistry设置为镜像注册表。

  • 然后将集群示例运算符设置为已管理以安装您已镜像的镜像流。

使用具有备用或镜像注册表的集群示例运算符镜像流

集群示例运算符管理的openshift命名空间中的大多数镜像流指向位于 Red Hat 注册表 registry.redhat.io 中的镜像。

cliinstallermust-gathertests镜像流虽然是安装负载的一部分,但不受集群示例运算符管理。本程序不涉及这些镜像流。

在断开连接的环境中,必须将集群示例运算符设置为已管理。要安装镜像流,您需要一个镜像注册表。

先决条件
  • 以具有cluster-admin角色的用户身份访问集群。

  • 为您的镜像注册表创建一个拉取密钥。

步骤
  1. 访问要镜像的特定镜像流的镜像,例如

    $ oc get is <imagestream> -n openshift -o json | jq .spec.tags[].from.name | grep registry.redhat.io
  2. 镜像来自 registry.redhat.io 的与您需要的任何镜像流关联的镜像

    $ oc image mirror registry.redhat.io/rhscl/ruby-25-rhel7:latest ${MIRROR_ADDR}/rhscl/ruby-25-rhel7:latest
  3. 创建集群的镜像配置对象

    $ oc create configmap registry-config --from-file=${MIRROR_ADDR_HOSTNAME}..5000=$path/ca.crt -n openshift-config
  4. 在集群的镜像配置对象中添加镜像所需的受信任 CA。

    $ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-config"}}}' --type=merge
  5. 更新集群示例运算符配置对象中的samplesRegistry字段,使其包含镜像配置中定义的镜像位置的主机名部分。

    $ oc edit configs.samples.operator.openshift.io -n openshift-cluster-samples-operator

    这是必需的,因为镜像流导入过程目前不使用镜像或搜索机制。

  6. 将任何未镜像的镜像流添加到集群示例运算符配置对象的skippedImagestreams字段中。或者,如果您不想支持任何示例镜像流,请在集群示例运算符配置对象中将集群示例运算符设置为已移除

    如果镜像流导入失败,但集群示例运算符正在定期重试或似乎没有重试,则集群示例运算符会发出警报。

    openshift命名空间中的许多模板都引用了镜像流。因此,使用已移除来清除镜像流和模板,将消除在缺少任何镜像流的情况下它们无法正常工作时尝试使用它们的可能性。

准备您的集群以收集支持数据

使用受限网络的集群必须导入默认的 must-gather 镜像才能为 Red Hat 支持收集调试数据。must-gather 镜像不会默认导入,并且受限网络上的集群无法访问互联网以从远程存储库拉取最新的镜像。

步骤
  1. 如果您尚未将镜像注册表的受信任 CA 添加到集群的镜像配置对象(作为集群示例运算符配置的一部分),请执行以下步骤

    1. 创建集群的镜像配置对象

      $ oc create configmap registry-config --from-file=${MIRROR_ADDR_HOSTNAME}..5000=$path/ca.crt -n openshift-config
    2. 在集群的镜像配置对象中添加镜像所需的受信任 CA。

      $ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-config"}}}' --type=merge
  2. 从您的安装负载导入默认的 must-gather 镜像

    $ oc import-image is/must-gather -n openshift

运行oc adm must-gather命令时,使用--image标志并指向负载镜像,如下例所示

$ oc adm must-gather --image=$(oc adm release info --image-for must-gather)

配置定期导入集群示例运算符镜像流标签

您可以通过在出现新版本时定期导入镜像流标签来确保始终可以访问集群示例运算符镜像的最新版本。

步骤
  1. 通过运行以下命令获取openshift命名空间中的所有镜像流

    oc get imagestreams -nopenshift
  2. 通过运行以下命令获取openshift命名空间中每个镜像流的标签

    $ oc get is <image-stream-name> -o jsonpath="{range .spec.tags[*]}{.name}{'\t'}{.from.name}{'\n'}{end}" -nopenshift

    例如

    $ oc get is ubi8-openjdk-17 -o jsonpath="{range .spec.tags[*]}{.name}{'\t'}{.from.name}{'\n'}{end}" -nopenshift
    示例输出
    1.11	registry.access.redhat.com/ubi8/openjdk-17:1.11
    1.12	registry.access.redhat.com/ubi8/openjdk-17:1.12
  3. 通过运行以下命令安排对镜像流中每个标签的镜像进行定期导入

    $ oc tag <repository/image> <image-stream-name:tag> --scheduled -nopenshift

    例如

    $ oc tag registry.access.redhat.com/ubi8/openjdk-17:1.11 ubi8-openjdk-17:1.11 --scheduled -nopenshift
    $ oc tag registry.access.redhat.com/ubi8/openjdk-17:1.12 ubi8-openjdk-17:1.12 --scheduled -nopenshift

    此命令使 OpenShift Container Platform 定期更新此特定的镜像流标签。此周期是集群范围的设置,默认为 15 分钟。

  4. 通过运行以下命令验证定期导入的调度状态

    oc get imagestream <image-stream-name> -o jsonpath="{range .spec.tags[*]}Tag: {.name}{'\t'}Scheduled: {.importPolicy.scheduled}{'\n'}{end}" -nopenshift

    例如

    oc get imagestream ubi8-openjdk-17 -o jsonpath="{range .spec.tags[*]}Tag: {.name}{'\t'}Scheduled: {.importPolicy.scheduled}{'\n'}{end}" -nopenshift
    示例输出
    Tag: 1.11	Scheduled: true
    Tag: 1.12	Scheduled: true