8.3. 关于 on-cluster 镜像模式


您可以通过创建 MachineOSConfig 自定义资源(CR)来使用 OpenShift on-cluster 构建过程的镜像模式将自定义分层镜像应用到节点,如 "Using On-cluster image mode to apply a custom layered image" 所述。

在创建对象时,Machine Config Operator (MCO) 会创建一个 MachineOSBuild 对象和 builder pod。此过程还会创建临时对象,如配置映射,这些对象会在构建完成后进行清理。MachineOSBuild 对象和相关 builder github pod 使用相同的命名方案 <MachineOSConfig_CR_name>-<hash>,例如:

MachineOSBuild 对象示例

NAME                                             PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED
layered-image-c8765e26ebc87e1e17a7d6e0a78e8bae   False      False      True        False         False

builder pod 示例

NAME                                                      READY   STATUS      RESTARTS        AGE
build-layered-image-c8765e26ebc87e1e17a7d6e0a78e8bae      2/2     Running     0               11m

您不需要与这些新对象或 machine-os-builder pod 交互。但是,如果需要,您可以使用所有这些资源进行故障排除。

构建完成后,MCO 将新的自定义分层镜像推送到仓库,并应用到关联的机器配置池中的节点。您可以在 MachineOSConfig 对象中看到新自定义分层镜像的摘要镜像拉取 spec。现在,这是此 MachineOSConfig 的活跃镜像拉取规格。

摘要镜像拉取规格示例

apiVersion: machineconfiguration.openshift.io/v1
kind: MachineOSConfig
metadata:
  annotations:
    machineconfiguration.openshift.io/current-machine-os-build: layered-9a8f89455246fa0c42ecee6ff1fa1a45
  labels:
    machineconfiguration.openshift.io/createdByOnClusterBuildsHelper: ""
  name: layered-image
# ...
status:
  currentImagePullSpec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image@sha256:3c8fc667adcb432ce0c83581f16086afec08a961dd28fed69bb6bad6db0a0754

提示

您可以使用包含非生产环境节点的自定义机器配置池,测试 MachineOSBuild 对象,以确保它在不将自定义分层镜像部署到活跃节点的情况下正确构建。另外,您可以使用没有节点的自定义机器配置池。即使没有 MCO 的节点将自定义分层镜像部署到其中,MachineOSBuild 对象也会构建。

您可以将自定义分层镜像应用到集群中的任何机器配置池,包括 control plane、worker 或自定义池。

注意

对于单节点 OpenShift 集群,您只能将自定义分层镜像应用到 control plane 节点。

MachineOSConfig 对象进行某些更改会触发关联的自定义分层镜像自动重建。您可以通过暂停应用自定义分层镜像的机器配置池来缓解重建的影响,如"使用机器配置池"中所述。当池暂停时,MCO 在构建完成后不会向节点推出新构建的镜像。但是,无论池是否暂停,构建仍会运行。例如,如果要删除并替换 MachineOSCOnfig 对象,请在进行更改前暂停机器配置池,防止 MCO 将关联的节点恢复到基础镜像,从而减少所需的重启数量。

当机器配置池暂停时,oc get machineconfigpools 会报告以下状态:

输出示例

NAME      CONFIG                                              UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
master    rendered-master-a0b404d061a6183cc36d302363422aba    True      False      False      3              3                   3                     0                      4h14m
worker    rendered-worker-221507009cbcdec0eec8ab3ccd789d18    False     False      False      2              2                   2                     0                      4h14m 
1

1
worker 机器配置池已暂停,由三个 False 状态和 READYMACHINECOUNT0 表示。

推出更改后,您可以取消暂停机器配置池。

如果构建失败,例如因为网络问题或无效的 secret,MCO 会在作业失败前重试构建三次。MCO 为每个构建尝试创建不同的构建 pod。您可以使用构建 pod 日志排除任何构建失败。但请注意,MCO 会在短时间内自动删除这些构建 pod。

失败的 MachineOSBuild 对象示例

NAME                                             PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED   AGE
layered-image-c8765e26ebc87e1e17a7d6e0a78e8bae   False      False      False        False        True     12m

您可以通过修改 MachineOSConfig 对象或将注解应用到 MachineOSConfig 对象来手动重建自定义层次镜像。如需更多信息,请参阅"重新构建集群自定义分层镜像"。

如果您使用自定义机器配置池将集群分层镜像应用到节点,您可以从节点中删除自定义分层镜像,并恢复到基础镜像。如需更多信息,请参阅"恢复集群分层节点"。

您可以通过编辑 MachineOSConfig 对象来修改 on-custom 分层镜像,安装附加软件包、删除现有软件包、更改仓库、更新 secret 或其他类似的更改。如需更多信息,请参阅"修改自定义分层镜像"。

8.3.1. On-cluster 镜像模式已知限制

在使用集群层功能时请注意以下限制:

  • 在多架构计算机器上不支持 on-cluster 镜像模式。
  • 不支持在同一机器配置池中使用多个 MachineOSConfig 对象。对于您要使用不同的自定义分层镜像的每个机器配置池,您需要单独的 MachineOSConfig CR。
  • 如果您扩展使用自定义分层镜像的机器集,节点会重新引导两次。首先,节点最初使用基础镜像创建,第二次应用自定义分层镜像时。
  • 使用自定义分层镜像的节点上不支持节点中断策略。因此,以下配置更改会导致节点重新引导:

    • 修改 /var/etc 目录中的配置文件
    • 添加或修改 systemd 服务
    • 更改 SSH 密钥
    • ICSPITMSIDMS 对象中删除镜像规则
    • 通过更新 openshift-config 命名空间中的 user-ca-bundle configmap 来更改可信 CA
  • 创建自定义分层镜像中使用的镜像在推送 registry 中占用空间。始终注意 registry 中的可用空间,并根据需要修剪镜像。您可以通过删除创建镜像的 MachineOSBuild 对象,从仓库自动删除 on-cluster 自定义分层镜像。请注意,registry push secret 提供的凭证还必须授予从 registry 中删除镜像的权限。如需更多信息,请参阅"删除集群自定义分层镜像"。

要使用 on-cluster 构建过程将自定义分层镜像应用到集群,请创建一个 MachineOSConfig 自定义资源 (CR) 来指定以下参数:

  • 要构建的 Containerfile
  • 关联构建的机器配置池
  • 应该推送和拉取最终镜像的位置
  • 要使用的推送和 pull secret

您只能为每个机器配置池创建一个 MachineOSConfig CR。

先决条件

  • openshift-machine-config-operator 命名空间中具有 Machine Config Operator (MCO) 所需的 pull secret,以便从存储库拉取基础操作系统镜像。默认情况下,MCO 使用集群全局 pull secret,它将同步到 openshift-machine-config-operator 命名空间中。您可以将 pull secret 添加到 OpenShift Container Platform 全局 pull secret 中,也可以使用不同的 pull secret。有关修改全局 pull secret 的详情,请参考"更新全局集群 pull secret"。
  • 具有 MCO 将新的自定义分层镜像推送到的 registry 的推送 secret。secret 提供的凭证还必须授予从 registry 中删除镜像的权限。

    注意

    在断开连接的环境中,确保断开连接的集群可以访问您要推送镜像的 registry。Image mirroring 仅适用于拉取镜像。

  • 您有一个 pull secret,节点需要从 registry 中拉取新的自定义分层镜像。这应该与用于将镜像推送到存储库的 secret 不同。
  • 您熟悉如何配置 Containerfile。有关如何创建 Containerfile 的说明超出了本文档的范围。
  • 可选:为要应用自定义分层镜像的节点有单独的机器配置池。为具有自定义机器配置池的节点具有其中一个好处,您可以根据需要轻松恢复到基础镜像。如需更多信息,请参阅"恢复集群分层节点"。

流程

  1. 创建 MachineOSconfig 对象:

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

      apiVersion: machineconfiguration.openshift.io/v1 
      1
      
      kind: MachineOSConfig
      metadata:
        name: layered-image 
      2
      
      spec:
        machineConfigPool:
          name: layered-image 
      3
      
        containerFile: 
      4
      
        - containerfileArch: NoArch 
      5
      
          content: |-
            FROM configs AS final
            RUN dnf install -y cowsay && \
              dnf clean all && \
              ostree container commit
        imageBuilder: 
      6
      
          imageBuilderType: Job
        baseImagePullSecret: 
      7
      
          name: global-pull-secret-copy
        renderedImagePushSpec: image-registry.openshift-image-registry.svc:5000/openshift/os-image:latest  
      8
      
        renderedImagePushSecret: 
      9
      
          name: builder-dockercfg-mtcl23
      1
      指定 MachineConfig CR 所需的 machineconfiguration.openshift.io/v1 API。
      2
      指定 MachineOSConfig 对象的名称。名称必须与关联的机器配置池的名称匹配。此名称与其他 on-cluster 镜像模式资源一起使用。本文档中的示例使用名称 layered-image
      3
      指定与要部署自定义分层镜像的节点关联的机器配置池的名称。本文档中的示例使用 layered-image 机器配置池。
      4
      指定用于配置自定义分层镜像的 Containerfile。
      5
      指定此容器文件要针对的构架:ARM64, AMD64, PPC64LE, S390X, 或 NoArch。默认值为 NoArch,它定义了一个可应用于任何架构的 Containerfile。
      6
      指定要使用的镜像构建器的名称。这必须是 Job,这是对管理镜像构建的 job 对象的引用。
      7
      可选:指定 MCO 从 registry 中拉取基础操作系统镜像的 pull secret 名称。默认情况下使用全局 pull secret。
      8
      指定要将新构建的自定义分层镜像推送到的镜像 registry。这可以是集群可以访问的任何 registry,格式为 host[:port][/namespace]/namesvc_name.namespace.svc[:port]/repository/name:<tag> 格式。本例使用内部 OpenShift Container Platform registry。如果集群被正确配置为使用镜像 registry,您可以指定镜像 registry。
      9
      指定 MCO 将新构建的自定义分层镜像推送到该 registry 的推送 secret 名称。
    2. 创建 MachineOSConfig 对象:

      $ oc create -f <filename>.yaml
  2. 如果需要,当 MachineOSBuild 对象被创建且处于 READY 状态时,修改您要使用新自定义分层镜像的节点 spec:

    1. 运行以下命令,检查 MachineOSBuild 对象是否已就绪:

      $ oc get machineosbuild

      SUCCEEDED 值为 True 时,构建已完成:

      显示 MachineOSBuild 对象已就绪的输出示例

      NAME                                                     PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED   AGE
      layered-image-ad5a3cad36303c363cf458ab0524e7c0-builder   False      False      True        False         False    43s

    2. 通过为 MachineOSConfig 对象中指定的机器配置池添加标签来编辑您要部署自定义分层镜像的节点:

      $ oc label node <node_name> 'node-role.kubernetes.io/<mcp_name>='

      其中:

      node-role.kubernetes.io/<mcp_name>=
      指定用于标识用于部署自定义分层镜像的节点选择器。

      当您保存更改时,MCO 会排空、封锁并重启节点。重新引导后,节点将使用新的自定义分层镜像。

验证

  1. 运行以下命令验证新 pod 是否已就绪:

    $ oc get pods -n openshift-machine-config-operator

    输出示例

    NAME                                                                    READY   STATUS    RESTARTS   AGE
    build-layered-image-ad5a3cad36303c363cf458ab0524e7c0-hxrws              2/2     Running   0          2m40s 
    1
    
    # ...
    machine-os-builder-6fb66cfb99-zcpvq                                     1/1     Running   0          2m42s 
    2

    1
    这是自定义分层镜像构建的构建 pod,以 build-<MachineOSConfig_CR_name>-<hash> 格式命名。
    2
    此 pod 可用于故障排除。
  2. 运行以下命令,验证分层构建的当前阶段:

    $ oc get machineosbuilds

    输出示例

    NAME                                             PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED   AGE
    layered-image-ad5a3cad36303c363cf458ab0524e7c0   False      True       False       False         False    12m 
    1

    1
    MachineOSBuild<MachineOSConfig_CR_name>-<hash> 格式命名。
  3. 运行以下命令,验证 MachineOSConfig 对象是否包含对新自定义分层镜像的引用:

    $ oc describe machineosconfig <object_name>

    摘要镜像拉取规格示例

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineOSConfig
    metadata:
      annotations:
        machineconfiguration.openshift.io/current-machine-os-build: layered-9a8f89455246fa0c42ecee6ff1fa1a45
      labels:
        machineconfiguration.openshift.io/createdByOnClusterBuildsHelper: ""
      name: layered-image
    # ...
    status:
      currentImagePullSpec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image@sha256:3c8fc667adcb432ce0c83581f16086afec08a961dd28fed69bb6bad6db0a0754 
    1

    1
    新自定义分层镜像的摘要镜像拉取 spec。
  4. 验证适当的节点是否使用新的自定义分层镜像:

    1. 运行以下命令,以 root 用户身份为 control plane 节点启动一个 debug 会话:

      $ oc debug node/<node_name>
    2. /host 设置为 debug shell 中的根目录:

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

      sh-5.1# rpm-ostree status

      输出示例

      # ...
      Deployments:
      * ostree-unverified-registry:image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-images@sha256:3c8fc667adcb432ce0c83581f16086afec08a961dd28fed69bb6bad6db0a0754
                         Digest: sha256:3c8fc667adcb432ce0c83581f16086afec08a961dd28fed69bb6bad6db0a0754 
      1
      
                        Version: 419.94.202502100215-0 (2025-02-12T19:20:44Z)

      1
      新自定义分层镜像的摘要镜像拉取 spec。

8.3.3. 修改集群自定义分层镜像

您可以根据需要修改集群自定义分层镜像。这可让您安装附加软件包、删除现有软件包、更改拉取或推送仓库、更新 secret 或其他类似的更改。您可以编辑 MachineOSConfig 对象,将更改应用到创建 MachineOSConfig 对象的 YAML 文件,或为该目的创建新的 YAML 文件。

如果您修改并应用 MachineOSConfig 对象 YAML 或创建新的 YAML 文件,YAML 会覆盖您直接对 MachineOSConfig 对象本身所做的任何更改。

MachineOSConfig 对象进行某些更改会触发关联的自定义分层镜像自动重建。您可以通过暂停应用自定义分层镜像的机器配置池来缓解重建的影响,如"使用机器配置池"中所述。当池暂停时,MCO 在构建完成后不会向节点推出新构建的镜像。但是,无论池是否暂停,构建仍会运行。例如,如果要删除并替换 MachineOSCOnfig 对象,请在进行更改前暂停机器配置池,防止 MCO 将关联的节点恢复到基础镜像,从而减少所需的重启数量。

当机器配置池暂停时,oc get machineconfigpools 会报告以下状态:

输出示例

NAME      CONFIG                                              UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
master    rendered-master-a0b404d061a6183cc36d302363422aba    True      False      False      3              3                   3                     0                      4h14m
worker    rendered-worker-221507009cbcdec0eec8ab3ccd789d18    False     False      False      2              2                   2                     0                      4h14m 
1

1
worker 机器配置池已暂停,由三个 False 状态和 READYMACHINECOUNT0 表示。

推出更改后,您可以取消暂停机器配置池。

先决条件

  • 您可以通过创建 MachineOSConfig 对象来选择 on-cluster 镜像模式。

流程

  • 修改对象以更新关联的自定义分层镜像:

    1. 编辑 MachineOSConfig 对象以修改自定义分层镜像。以下示例将 rngd 守护进程添加到已具有使用自定义分层镜像安装的 tree 软件包的节点。

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineOSConfig
      metadata:
        name: layered-image
      spec:
        machineConfigPool:
          name: layered-image
        containerFile:
        - containerfileArch: noarch
          content: |- 
      1
      
            FROM configs AS final
      
            RUN rpm-ostree install rng-tools && \
                systemctl enable rngd && \
                rpm-ostree cleanup -m && \
                ostree container commit
      
            RUN rpm-ostree install tree && \
                ostree container commit
        imageBuilder:
          imageBuilderType: PodImageBuilder
        baseImagePullSecret:
          name: global-pull-secret-copy 
      2
      
        renderedImagePushspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-images:latest 
      3
      
        renderedImagePushSecret:  
      4
      
          name: new-secret-name
      1
      可选:修改 Containerfile,例如添加或删除软件包。
      2
      可选:更新从 registry 中拉取基础操作系统镜像所需的 secret。
      3
      可选:修改镜像 registry,将新构建的自定义分层镜像推送到。
      4
      可选:更新将新构建的自定义分层镜像推送到 registry 所需的 secret。

      当您保存更改时,MCO 会排空、封锁并重启节点。重启后,节点使用集群基本 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。如果您的更改仅修改 secret,则不会触发新构建,且不会执行重启。

验证

  1. 使用以下命令验证新的 MachineOSBuild 对象是否已创建:

    $ oc get machineosbuild

    输出示例

    NAME                                             PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED   AGE
    layered-image-a5457b883f5239cdcb71b57e1a30b6ef   False      False      True        False         False    4d17h
    layered-image-f91f0f5593dd337d89bf4d38c877590b   False      True       False       False         False    2m41s 
    1

    1
    BUILDING 列中的值 True 表示 MachineOSBuild 对象正在构建。当 SUCCEEDED 列报告 True 时,构建已完成。
  2. 您可以使用以下命令观察新机器配置是否已应用到节点:

    $ oc get machineconfigpools

    输出示例

    NAME      CONFIG                                              UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master    rendered-master-a0b404d061a6183cc36d302363422aba    True      False      False      3              3                   3                     0                      3h38m
    worker    rendered-worker-221507009cbcdec0eec8ab3ccd789d18    False     True       False      2              2                   2                     0                      3h38m 
    1

    1
    UPDATED 列中的值 FALSE 表示 MachineOSBuild 对象正在构建。当 UPDATED 列报告 FALSE 时,新的自定义分层镜像已应用到节点。
  3. 当节点重新处于 Ready 状态时,检查是否应用了更改:

    1. 运行以下命令,打开节点的 oc debug 会话:

      $ oc debug node/<node_name>
    2. 运行以下命令,将 /host 设置为 debug shell 中的根目录:

      sh-5.1# chroot /host
    3. 使用适当的命令来验证是否应用了更改。以下示例显示安装了 rngd 守护进程:

      sh-5.1# rpm -qa |grep rng-tools

      输出示例

      rng-tools-6.17-3.fc41.x86_64

      sh-5.1# rngd -v

      输出示例

      rngd 6.16

其他资源

8.3.4. 重建集群自定义分层镜像

如果要重建集群自定义分层镜像时,您可以修改 MachineOSConfig 对象,或向 MachineOSConfig 对象添加注解。这两个操作都触发对象自动重建。例如,如果您更改 Containerfile 或需要更新机器配置中的 osimageurl 位置,您可以执行重建。

添加注解后,Machine Config Operator (MCO)会删除当前的 MachineOSBuild 对象,并在该位置创建一个新 MachineOSBuild 对象。构建过程完成后,MCO 会自动删除注解。

先决条件

  • 您可以通过创建 MachineOSConfig 对象来选择集群镜像模式。

流程

  • 编辑 MachineOSConfig 对象,使用以下命令添加 machineconfiguration.openshift.io/rebuild 注解:

    $ oc edit MachineOSConfig <object_name>

    MachineOSConfig 对象示例

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineOSConfig
    metadata:
      annotations:
        machineconfiguration.openshift.io/current-machine-os-build: layering-c26d4a003432df70ee66c83981144cfa
        machineconfiguration.openshift.io/rebuild: "" 
    1
    
    # ...
      name: layered-image
    # ...

    1
    添加此注解以触发自定义分层镜像的重新构建。

验证

  • 使用以下命令检查 MachineOSBuild 对象是否已构建:

    $ oc get machineosbuild

    输出示例

    NAME                                             PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED   AGE
    layered-image-d6b929a29c6dbfa8e4007c8069a2fd08   False      True       False       False         False    2m41s 
    1

    1
    BUILDING 列中的值 True 表示 MachineOSBuild 对象正在构建。
  • 编辑 MachineOSConfig 对象,使用以下命令验证 MCO 是否删除了 machineconfiguration.openshift.io/rebuild 注解:

    $ oc edit MachineOSConfig <object_name>

    MachineOSConfig 对象示例

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineOSConfig
    metadata:
      annotations:
        machineconfiguration.openshift.io/current-machine-os-build: layering-c26d4a003432df70ee66c83981144cfa
    # ...
      name: layered-image
    # ...

8.3.5. 恢复集群自定义分层镜像

如果您将 on-cluster 分层镜像应用到自定义机器配置池(MCP)中的节点,您可以从节点中删除自定义分层镜像,并恢复到基础镜像。

要恢复节点,请通过从节点中删除自定义机器配置池标签从自定义 MCP 中删除节点。删除标签后,Machine Config Operator (MCO)使用集群基本 Red Hat Enterprise Linux CoreOS (RHCOS)镜像重启节点,覆盖自定义分层镜像。

重要

在删除标签前,请确保节点与另一个 MCP 关联。

先决条件

  • 您可以通过创建 MachineOSConfig 对象来选择 On-cluster 镜像模式。
  • 您已将 MachineOSConfig 对象应用到自定义机器配置池中的节点。

流程

  • 使用以下命令从节点中删除该标签:

    $ oc label node/<node_name> node-role.kubernetes.io/<mcp_name>-

    当您保存更改时,MCO 会排空、封锁并重启节点。重启后,节点使用集群基本 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。

验证

  • 通过执行以下任一方式来验证自定义层次镜像是否已移除:

    • 检查 worker 机器配置池是否使用以前的机器配置更新:

      $ oc get mcp

      输出示例

      NAME      CONFIG                                              UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
      layered   rendered-layered-e8c8bc1de69777325003e80bc0c04b82   True      False      False      0              0                   0                     0                      4h20m 
      1
      
      master    rendered-master-50d7bc27ee8b9ca2250383f0647ade7f    True      False      False      3              3                   3                     0                      5h39m
      worker    rendered-worker-e8c8bc1de69777325003e80bc0c04b82    True      False      False      3              3                   3                     0                      5h39m 
      2

      1
      自定义机器配置池不再具有任何节点。
      2
      UPDATING 字段为 True 时,机器配置池会使用以前的机器配置进行更新。当字段变为 False 时,worker 机器配置池已应用到以前的机器配置。
    • 检查节点以查看是否禁用了在节点上调度。这表示要应用更改:

      $ oc get nodes

      输出示例

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

    • 当节点重新处于 Ready 状态时,检查该节点是否使用基础镜像:

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

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

        sh-4.4# chroot /host
      3. 运行 rpm-ostree status 命令,以查看基础镜像正在使用:

        sh-4.4# rpm-ostree status

        输出示例

        State: idle
        Deployments:
        * ostree-unverified-registry:registry.build05.ci.openshift.org/ci-ln-qd0hmqk/stable@sha256:a8bd32573f787f6d1c23e1d669abbefd1e31339826d06e750c0ca632ad6c414f
                           Digest: sha256:a8bd32573f787f6d1c23e1d669abbefd1e31339826d06e750c0ca632ad6c414f
                          Version: 419.96.202501202201-0 (2025-01-20T22:06:13Z)

8.3.6. 删除集群自定义分层镜像

要防止自定义分层镜像在 registry 中占用过量空间,您可以通过删除创建镜像的 MachineOSBuild 对象来从仓库自动删除 on-cluster 自定义分层镜像。

您添加到 MachineOSBuild 对象的 registry push secret 提供的凭证必须授予从 registry 中删除镜像的权限。如果没有提供 delete 权限,则在删除 MachineOSBuild 对象时不会删除镜像。

如果镜像当前在节点上使用,或者节点需要,则自定义分层镜像不会被删除,如 machineconfiguration.openshift.io/currentImagemachineconfiguration.openshift.io/desiredImage 注解,在创建 MachineOSConfig 对象时添加到节点。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部