7.4. 使用集群外分层应用自定义分层镜像


您可以在特定机器配置池中的节点上轻松配置 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像层。Machine Config Operator (MCO) 使用新的自定义分层镜像重启这些节点,覆盖基本 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。

要将自定义分层镜像应用到集群,您必须在集群可访问的存储库中具有自定义层次镜像。然后,创建一个指向自定义分层镜像的 MachineConfig 对象。对于每个需要配置的集群配置池,都需要一个独立的 MachineConfig 对象。

重要

当您配置自定义分层镜像时,OpenShift Container Platform 不再自动更新任何使用自定义分层镜像的节点。根据需要手动进行节点更新是您自己的责任。如果您回滚自定义层,OpenShift Container Platform 将再次自动更新该节点。有关更新使用自定义分层镜像的节点的重要信息,请参阅以下附加资源部分。

先决条件

  • 您必须创建一个基于 OpenShift Container Platform 镜像摘要的自定义层次镜像,而不是标签。

    注意

    您应该使用与集群的其余部分上安装相同的基本 RHCOS 镜像。使用 oc adm release info --image-for rhel-coreos 命令获取集群中使用的基础镜像。

    例如,以下 Containerfile 从 OpenShift Container Platform 4.17 镜像创建一个自定义层次镜像,并使用 CentOS 9 Stream 中的内核软件包覆盖内核软件包:

    自定义层镜像的 Containerfile 示例

    # Using a 4.17.0 image
    FROM quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256... 
    1
    
    #Install hotfix rpm
    RUN rpm-ostree override replace http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/kernel-{,core-,modules-,modules-core-,modules-extra-}5.14.0-295.el9.x86_64.rpm && \ 
    2
    
        rpm-ostree cleanup -m && \
        ostree container commit
    Copy to Clipboard Toggle word wrap

    1
    指定集群的 RHCOS 基础镜像。
    2
    替换内核软件包。
    注意

    有关如何创建 Containerfile 的说明超出了本文档的范围。

  • 由于构建自定义分层镜像的过程是在集群之外执行,所以您必须在 Podman 或 Buildah 中使用 --authfile /path/to/pull-secret 选项。或者,要自动读取这些工具的 pull secret,您可以将其添加到默认文件位置之一:~/.docker/config.json, $XDG_RUNTIME_DIR/containers/auth.json, ~/.docker/config.json, 或 ~/.dockercfg。如需更多信息,请参阅 containers-auth.json 手册页。
  • 您必须将自定义分层镜像推送到集群可访问的存储库。

流程

  1. 创建机器配置文件。

    1. 创建一个类似以下示例的 YAML 文件:

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfig
      metadata:
        labels:
          machineconfiguration.openshift.io/role: worker 
      1
      
        name: os-layer-custom
      spec:
        osImageURL: quay.io/my-registry/custom-image@sha256... 
      2
      Copy to Clipboard Toggle word wrap
      1
      指定要部署自定义分层镜像的机器配置池。
      2
      指定存储库中自定义分层镜像的路径。
    2. 创建 MachineConfig 对象:

      $ oc create -f <file_name>.yaml
      Copy to Clipboard Toggle word wrap
      重要

      强烈建议您在推出集群前测试生产环境中的镜像。

验证

您可以通过执行以下任一方式来验证是否应用了自定义层次镜像:

  1. 检查 worker 机器配置池已使用新机器配置推出:

    1. 检查是否创建了新机器配置:

      $ oc get mc
      Copy to Clipboard Toggle word wrap

      输出示例

      NAME                                               GENERATEDBYCONTROLLER                      IGNITIONVERSION   AGE
      00-master                                          5bdb57489b720096ef912f738b46330a8f577803   3.4.0             95m
      00-worker                                          5bdb57489b720096ef912f738b46330a8f577803   3.4.0             95m
      01-master-container-runtime                        5bdb57489b720096ef912f738b46330a8f577803   3.4.0             95m
      01-master-kubelet                                  5bdb57489b720096ef912f738b46330a8f577803   3.4.0             95m
      01-worker-container-runtime                        5bdb57489b720096ef912f738b46330a8f577803   3.4.0             95m
      01-worker-kubelet                                  5bdb57489b720096ef912f738b46330a8f577803   3.4.0             95m
      99-master-generated-registries                     5bdb57489b720096ef912f738b46330a8f577803   3.4.0             95m
      99-master-ssh                                                                                 3.2.0             98m
      99-worker-generated-registries                     5bdb57489b720096ef912f738b46330a8f577803   3.4.0             95m
      99-worker-ssh                                                                                 3.2.0             98m
      os-layer-custom                                                                                                 10s 
      1
      
      rendered-master-15961f1da260f7be141006404d17d39b   5bdb57489b720096ef912f738b46330a8f577803   3.4.0             95m
      rendered-worker-5aff604cb1381a4fe07feaf1595a797e   5bdb57489b720096ef912f738b46330a8f577803   3.4.0             95m
      rendered-worker-5de4837625b1cbc237de6b22bc0bc873   5bdb57489b720096ef912f738b46330a8f577803   3.4.0             4s  
      2
      Copy to Clipboard Toggle word wrap

      1
      新机器配置
      2
      新的渲染机器配置
    2. 检查新机器配置中的 osImageURL 值是否指向预期的镜像:

      $ oc describe mc rendered-worker-5de4837625b1cbc237de6b22bc0bc873
      Copy to Clipboard Toggle word wrap

      输出示例

      Name:         rendered-worker-5de4837625b1cbc237de6b22bc0bc873
      Namespace:
      Labels:       <none>
      Annotations:  machineconfiguration.openshift.io/generated-by-controller-version: 5bdb57489b720096ef912f738b46330a8f577803
                    machineconfiguration.openshift.io/release-image-version: 4.17.0-ec.3
      API Version:  machineconfiguration.openshift.io/v1
      Kind:         MachineConfig
      ...
        Os Image URL: quay.io/my-registry/custom-image@sha256...
      Copy to Clipboard Toggle word wrap

    3. 检查关联的机器配置池是否使用新机器配置更新:

      $ oc get mcp
      Copy to Clipboard Toggle word wrap

      输出示例

      NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
      master   rendered-master-15961f1da260f7be141006404d17d39b   True      False      False      3              3                   3                     0                      39m
      worker   rendered-worker-5de4837625b1cbc237de6b22bc0bc873   True      False      False      3              0                   0                     0                      39m 
      1
      Copy to Clipboard Toggle word wrap

      1
      UPDATING 字段为 True 时,机器配置池会使用新机器配置进行更新。在这种情况下,您将无法在输出看到新机器配置列表。当字段变为 False 时,代表 worker 机器配置池已应用到新机器配置。
    4. 检查节点以查看是否禁用了在节点上调度。这表示要应用更改:

      $ oc get nodes
      Copy to Clipboard Toggle word wrap

      输出示例

      NAME                                         STATUS                     ROLES                  AGE   VERSION
      ip-10-0-148-79.us-west-1.compute.internal    Ready                      worker                 32m   v1.30.3
      ip-10-0-155-125.us-west-1.compute.internal   Ready,SchedulingDisabled   worker                 35m   v1.30.3
      ip-10-0-170-47.us-west-1.compute.internal    Ready                      control-plane,master   42m   v1.30.3
      ip-10-0-174-77.us-west-1.compute.internal    Ready                      control-plane,master   42m   v1.30.3
      ip-10-0-211-49.us-west-1.compute.internal    Ready                      control-plane,master   42m   v1.30.3
      ip-10-0-218-151.us-west-1.compute.internal   Ready                      worker                 31m   v1.30.3
      Copy to Clipboard Toggle word wrap

  2. 当节点重新处于 Ready 状态时,检查该节点是否使用自定义分层镜像:

    1. 打开节点的 oc debug 会话。例如:

      $ oc debug node/ip-10-0-155-125.us-west-1.compute.internal
      Copy to Clipboard Toggle word wrap
    2. /host 设置为 debug shell 中的根目录:

      sh-4.4# chroot /host
      Copy to Clipboard Toggle word wrap
    3. 运行 rpm-ostree status 命令,以查看自定义分层镜像正在使用:

      sh-4.4# sudo rpm-ostree status
      Copy to Clipboard Toggle word wrap

      输出示例

      State: idle
      Deployments:
      * ostree-unverified-registry:quay.io/my-registry/...
                         Digest: sha256:...
      Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat