×

Red Hat Enterprise Linux CoreOS (RHCOS) 镜像分层允许您通过分层将其他镜像添加到基础镜像来轻松扩展基础 RHCOS 镜像的功能。此分层不会修改基础 RHCOS 镜像。相反,它会创建一个自定义分层镜像,其中包含所有 RHCOS 功能,并向集群中的特定节点添加其他功能。

关于 RHCOS 镜像分层

镜像分层允许您自定义集群任何工作节点上的底层节点操作系统。这有助于保持所有内容(包括节点操作系统和任何添加的自定义项,例如专用软件)的最新状态。

您可以使用 Containerfile 创建自定义分层镜像,并使用自定义对象将其应用于节点。您可以随时通过删除该自定义对象来删除自定义分层镜像。

使用 RHCOS 镜像分层,您可以将 RPM 安装到基础镜像中,并且您的自定义内容将与 RHCOS 一起启动。机器配置操作符 (MCO) 可以像处理默认 RHCOS 镜像一样,推出这些自定义分层镜像并监控这些自定义容器。RHCOS 镜像分层使您在管理 RHCOS 节点时具有更大的灵活性。

不建议将实时内核和扩展 RPM 作为自定义分层内容安装。这是因为这些 RPM 可能会与使用机器配置安装的 RPM 冲突。如果发生冲突,MCO 在尝试安装机器配置 RPM 时会进入降级状态。您需要在继续之前从机器配置中删除冲突的扩展。

应用自定义分层镜像到集群后,您便拥有了您的自定义分层镜像和这些节点。Red Hat 仍然负责维护和更新标准节点上的基础 RHCOS 镜像,但您负责维护和更新使用自定义分层镜像的节点上的镜像。您对使用自定义分层镜像应用的软件包以及该软件包可能引发的任何问题负责。

有两种方法可以将自定义分层镜像部署到您的节点

集群内分层

使用集群内分层,您可以创建一个MachineOSConfig对象,其中包含 Containerfile 和其他参数。构建在您的集群上执行,生成的自定义分层镜像会自动推送到您的存储库并应用于您在MachineOSConfig对象中指定的机器配置池。整个过程完全在您的集群内完成。

集群内镜像分层仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且功能可能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的早期访问,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参见技术预览功能支持范围

集群外分层

使用集群外分层,您可以创建一个引用 OpenShift Container Platform 镜像和您想要应用的 RPM 的 Containerfile,在您自己的环境中构建分层镜像,并将镜像推送到您的存储库。然后,在您的集群中,为目标节点池创建一个指向新镜像的MachineConfig对象。机器配置操作符会覆盖关联机器配置中osImageURL值指定的基础 RHCOS 镜像,并启动新镜像。

对于这两种方法,都使用安装在集群其余部分上的相同基础 RHCOS 镜像。使用oc adm release info --image-for rhel-coreos命令获取集群中使用的基础镜像。

示例 Containerfiles

RHCOS镜像分层允许您使用以下类型的镜像来创建自定义分层镜像

  • OpenShift Container Platform 热修复。您可以与客户体验和参与 (CEE) 团队合作,获取并应用热修复程序包到您的 RHCOS 镜像之上。在某些情况下,您可能需要在官方 OpenShift Container Platform 版本中包含错误修复或增强功能之前就应用它们。RHCOS 镜像分层允许您轻松添加热修复程序(在正式发布之前),并在底层 RHCOS 镜像包含该修复程序后将其移除。

    某些热修复程序需要 Red Hat 支持例外,并且不在 OpenShift Container Platform 支持范围或生命周期策略的正常范围内。

    热修复程序是根据Red Hat 热修复程序策略提供的。将其应用于基础镜像之上,并在非生产环境中测试新的自定义分层镜像。当您确认自定义分层镜像可在生产环境中安全使用时,您可以根据自己的时间表将其部署到特定的节点池。出于任何原因,您可以轻松回滚自定义分层镜像并返回到使用默认 RHCOS。

    在集群内应用热修复程序的 Containerfile 示例
    # Using a 4.17.0 image
    containerfileArch: noarch
    content: |-
      FROM configs AS final
      #Install hotfix rpm
      RUN dnf install -y https://example.com/myrepo/haproxy-1.0.16-5.el8.src.rpm && \
          dnf clean all && \
          ostree container commit
    在集群外应用热修复程序的 Containerfile 示例
    # Using a 4.17.0 image
    FROM quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256...
    #Install hotfix rpm
    RUN dnf install -y https://example.com/myrepo/haproxy-1.0.16-5.el8.src.rpm && \
        dnf clean all && \
        ostree container commit
  • RHEL 软件包。您可以从Red Hat 客户门户下载 Red Hat Enterprise Linux (RHEL) 软件包,例如 chrony、firewalld 和 iputils。

    在集群外应用 libreswan 实用程序的 Containerfile 示例
    # Get RHCOS base image of target cluster `oc adm release info --image-for rhel-coreos`
    # hadolint ignore=DL3006
    FROM quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256...
    
    # Install our config file
    COPY my-host-to-host.conf /etc/ipsec.d/
    
    # RHEL entitled host is needed here to access RHEL packages
    # Install libreswan as extra RHEL package
    RUN dnf install -y libreswan && \
        dnf clean all && \
        systemctl enable ipsec && \
        ostree container commit

    由于 libreswan 需要额外的 RHEL 软件包,因此必须在授权的 RHEL 主机上构建镜像。为了使 RHEL 授权生效,您必须将 `etc-pki-entitlement` 密钥复制到 `openshift-machine-api` 命名空间。

  • 第三方软件包。您可以下载并安装来自第三方组织的 RPM 包,例如以下类型的软件包:

    • 最新的驱动程序和内核增强功能,以提高性能或添加功能。

    • 取证客户端工具,用于调查可能的和实际的入侵。

    • 安全代理。

    • 提供整个集群一致视图的清单代理。

    • SSH 密钥管理软件包。

    在集群内应用来自 EPEL 的第三方软件包的 Containerfile 示例
    FROM configs AS final
    
    #Enable EPEL (more info at https://docs.fedoraproject.org/en-US/epel/ ) and install htop
    RUN dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \
        dnf install -y htop && \
        dnf clean all && \
        ostree container commit
    在集群外应用来自 EPEL 的第三方软件包的 Containerfile 示例
    # Get RHCOS base image of target cluster `oc adm release info --image-for rhel-coreos`
    # hadolint ignore=DL3006
    FROM quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256...
    
    #Enable EPEL (more info at https://docs.fedoraproject.org/en-US/epel/ ) and install htop
    RUN dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \
        dnf install -y htop && \
        dnf clean all && \
        ostree container commit

    此 Containerfile 安装 RHEL fish 程序。由于 fish 需要额外的 RHEL 软件包,因此必须在授权的 RHEL 主机上构建镜像。为了使 RHEL 授权生效,您必须将 `etc-pki-entitlement` 密钥复制到 `openshift-machine-api` 命名空间。

    在集群内应用具有 RHEL 依赖项的第三方软件包的 Containerfile 示例
    FROM configs AS final
    
    # RHEL entitled host is needed here to access RHEL packages
    # Install fish as third party package from EPEL
    RUN dnf install -y https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/Packages/f/fish-3.3.1-3.el9.x86_64.rpm && \
        dnf clean all && \
        ostree container commit
    在集群外应用具有 RHEL 依赖项的第三方软件包的 Containerfile 示例
    # Get RHCOS base image of target cluster `oc adm release info --image-for rhel-coreos`
    # hadolint ignore=DL3006
    FROM quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256...
    
    # RHEL entitled host is needed here to access RHEL packages
    # Install fish as third party package from EPEL
    RUN dnf install -y https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/Packages/f/fish-3.3.1-3.el9.x86_64.rpm && \
        dnf clean all && \
        ostree container commit

创建机器配置后,机器配置操作员 (MCO) 将执行以下步骤:

  1. 为指定的池或池渲染新的机器配置。

  2. 对池或池中的节点执行 cordon 和 drain 操作。

  3. 将其余的机器配置参数写入节点。

  4. 将自定义分层镜像应用于节点。

  5. 使用新镜像重新启动节点。

强烈建议您在将镜像部署到集群之前,在生产环境之外对其进行测试。

使用集群内分层来应用自定义分层镜像

要使用集群内构建过程将自定义分层镜像应用于您的集群,请创建一个包含 Containerfile、机器配置池引用、存储库推送和拉取密钥以及预设条件中所述的其他参数的 `MachineOSConfig` 自定义资源。

创建对象时,机器配置操作员 (MCO) 将创建一个 `MachineOSBuild` 对象和一个 `machine-os-builder` pod。构建过程还会创建临时对象(例如配置映射),这些对象在构建完成后将被清除。

构建完成后,MCO 将新的自定义分层镜像推送到您的存储库,以便在部署新节点时使用。您可以在 `MachineOSBuild` 对象和 `machine-os-builder` pod 中看到新自定义分层镜像的已处理镜像拉取规范。

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

您需要为要在其中使用自定义分层镜像的每个机器配置池创建一个单独的 `MachineOSConfig` CR。

集群内镜像分层仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且功能可能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的早期访问,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参见技术预览功能支持范围

先决条件
  • 您已使用功能网关启用了 `TechPreviewNoUpgrade` 功能集。有关更多信息,请参阅“使用功能网关启用功能”。

  • 您在 `openshift-machine-config-operator` 命名空间中拥有 MCO 拉取基础操作系统镜像所需的拉取密钥。

  • 您拥有 MCO 将新自定义分层镜像推送到您的注册表所需的推送密钥。

  • 您拥有节点从您的注册表拉取新自定义分层镜像所需的拉取密钥。这应该与用于将镜像推送到存储库的密钥不同。

  • 您熟悉如何配置 Containerfile。有关如何创建 Containerfile 的说明不在本文档的范围内。

  • 可选:您为要应用自定义分层镜像的节点创建了单独的机器配置池。

步骤
  1. 创建 `machineOSconfig` 对象

    1. 创建一个类似于以下内容的 YAML 文件:

      apiVersion: machineconfiguration.openshift.io/v1alpha1
      kind: MachineOSConfig
      metadata:
        name: layered
      spec:
        machineConfigPool:
          name: <mcp_name> (1)
        buildInputs:
          containerFile: (2)
          - containerfileArch: noarch
            content: |-
              FROM configs AS final
              RUN dnf install -y cowsay && \
               dnf clean all && \
               ostree container commit
          imageBuilder: (3)
            imageBuilderType: PodImageBuilder
          baseImagePullSecret: (4)
            name: global-pull-secret-copy
          renderedImagePushspec: image-registry.openshift-image-registry.svc:5000/openshift/os-image:latest  (5)
          renderedImagePushSecret: (6)
            name: builder-dockercfg-7lzwl
        buildOutputs: (7)
          currentImagePullSecret:
            name: builder-dockercfg-7lzwl
      1 指定与要部署自定义分层镜像的节点关联的机器配置池的名称。
      2 指定用于配置自定义分层镜像的 Containerfile。
      3 指定要使用的镜像构建器的名称。这必须是 `PodImageBuilder`。
      4 指定 MCO 从注册表拉取基础操作系统镜像所需的拉取密钥的名称。
      5 指定要将新构建的自定义分层镜像推送到其中的镜像注册表。这可以是您的集群可以访问的任何注册表。此示例使用内部 OpenShift Container Platform 注册表。
      6 指定 MCO 将新构建的自定义分层镜像推送到该注册表所需的推送密钥的名称。
      7 指定节点拉取新构建的自定义分层镜像所需的镜像注册表所需的密钥。这应该与用于将镜像推送到存储库的密钥不同。
    2. 创建 `MachineOSConfig` 对象

      $ oc create -f <file_name>.yaml
  2. 如有必要,当 `MachineOSBuild` 对象已创建并处于 `READY` 状态时,请修改要使用新自定义分层镜像的节点的规范

    1. 检查 `MachineOSBuild` 对象是否为 `READY`。当 `SUCCEEDED` 值为 `True` 时,表示构建完成。

      $ oc get machineosbuild
      `MachineOSBuild` 对象已准备就绪的示例输出
      NAME                                                                PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED
      layered-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0-builder   False      False      True        False         False
    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 <machineosbuilds_namespace>
    NAME                                                              READY   STATUS    RESTARTS   AGE
    build-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0           2/2     Running   0          2m40s (1)
    # ...
    machine-os-builder-6fb66cfb99-zcpvq                               1/1     Running   0          2m42s (2)
    
    1 这是正在构建自定义分层镜像的构建 pod。
    2 此 pod 可用于故障排除。
  2. 验证 `MachineOSConfig` 对象是否包含对新自定义分层镜像的引用

    $ oc describe MachineOSConfig <object_name>
    apiVersion: machineconfiguration.openshift.io/v1alpha1
    kind: MachineOSConfig
    metadata:
      name: layered
    spec:
      buildInputs:
        baseImagePullSecret:
          name: global-pull-secret-copy
        containerFile:
        - containerfileArch: noarch
          content: ""
        imageBuilder:
          imageBuilderType: PodImageBuilder
        renderedImagePushSecret:
          name: builder-dockercfg-ng82t-canonical
        renderedImagePushspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image:latest
      buildOutputs:
        currentImagePullSecret:
          name: global-pull-secret-copy
      machineConfigPool:
        name: layered
    status:
      currentImagePullspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image@sha256:f636fa5b504e92e6faa22ecd71a60b089dab72200f3d130c68dfec07148d11cd (1)
    1 新自定义分层镜像的已消化镜像拉取规范。
  3. 验证MachineOSBuild对象是否包含对新的自定义分层镜像的引用。

    $ oc describe machineosbuild <object_name>
    apiVersion: machineconfiguration.openshift.io/v1alpha1
    kind: MachineOSBuild
    metadata:
      name: layered-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0-builder
    spec:
      desiredConfig:
        name: rendered-layered-ad5a3cad36303c363cf458ab0524e7c0
      machineOSConfig:
        name: layered
      renderedImagePushspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image:latest
    # ...
    status:
      conditions:
        - lastTransitionTime: "2024-05-21T20:25:06Z"
          message: Build Ready
          reason: Ready
          status: "True"
          type: Succeeded
      finalImagePullspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image@sha256:f636fa5b504e92e6faa22ecd71a60b089dab72200f3d130c68dfec07148d11cd (1)
    1 新自定义分层镜像的已消化镜像拉取规范。
  4. 验证相应的节点是否正在使用新的自定义分层镜像

    1. 以root用户身份启动控制平面节点的调试会话

      $ oc debug node/<node_name>
    2. 在调试shell中将/host设置为根目录

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

      sh-5.1# rpm-ostree status
      示例输出
      # ...
      Deployments:
      * ostree-unverified-registry:quay.io/openshift-release-dev/os-image@sha256:f636fa5b504e92e6faa22ecd71a60b089dab72200f3d130c68dfec07148d11cd (1)
                         Digest: sha256:bcea2546295b2a55e0a9bf6dd4789433a9867e378661093b6fdee0031ed1e8a4
                        Version: 416.94.202405141654-0 (2024-05-14T16:58:43Z)
      1 新自定义分层镜像的已消化镜像拉取规范。

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

您可以轻松地在特定机器配置池中的节点上配置Red Hat Enterprise Linux CoreOS (RHCOS)镜像分层。机器配置操作符(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/ocp-release@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
    1 指定集群的RHCOS基础镜像。
    2 替换内核包。

    关于如何创建Containerfile的说明不在本文档范围之内。

  • 由于创建自定义分层镜像的过程是在集群外部执行的,因此您必须使用--authfile /path/to/pull-secret选项与Podman或Buildah一起使用。或者,为了让这些工具自动读取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)
      1 指定要应用自定义分层镜像的机器配置池。
      2 指定存储库中自定义分层镜像的路径。
    2. 创建MachineConfig对象

      $ oc create -f <file_name>.yaml

      强烈建议您在将镜像部署到集群之前,在生产环境之外对其进行测试。

验证

您可以通过执行以下任何检查来验证是否应用了自定义分层镜像

  1. 检查工作机器配置池是否已使用新的机器配置推出

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

      $ oc get mc
      示例输出
      NAME                                               GENERATEDBYCONTROLLER                      IGNITIONVERSION   AGE
      00-master                                          5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      00-worker                                          5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      01-master-container-runtime                        5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      01-master-kubelet                                  5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      01-worker-container-runtime                        5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      01-worker-kubelet                                  5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      99-master-generated-registries                     5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      99-master-ssh                                                                                 3.2.0             98m
      99-worker-generated-registries                     5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      99-worker-ssh                                                                                 3.2.0             98m
      os-layer-custom                                                                                                 10s (1)
      rendered-master-15961f1da260f7be141006404d17d39b   5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      rendered-worker-5aff604cb1381a4fe07feaf1595a797e   5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      rendered-worker-5de4837625b1cbc237de6b22bc0bc873   5bdb57489b720096ef912f738b46330a8f577803   3.2.0             4s  (2)
      
      1 新的机器配置
      2 新的渲染机器配置
    2. 检查新机器配置中的osImageURL值是否指向预期的镜像

      $ oc describe mc rendered-worker-5de4837625b1cbc237de6b22bc0bc873
      示例输出
      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...
    3. 检查关联的机器配置池是否已更新为新的机器配置

      $ oc get mcp
      示例输出
      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)
      
      1 UPDATING字段为True时,机器配置池正在使用新的机器配置进行更新。在这种情况下,您将不会看到输出中列出的新机器配置。当该字段变为False时,工作机器配置池已推出到新的机器配置。
    4. 检查节点以查看节点上的调度是否已禁用。这表示正在应用更改

      $ oc get nodes
      示例输出
      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
  2. 当节点恢复到Ready状态时,检查节点是否正在使用自定义分层镜像

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

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

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

      sh-4.4# sudo rpm-ostree status
      示例输出
      State: idle
      Deployments:
      * ostree-unverified-registry:quay.io/my-registry/...
                         Digest: sha256:...

删除RHCOS自定义分层镜像

您可以轻松地从特定机器配置池中的节点还原Red Hat Enterprise Linux CoreOS (RHCOS)镜像分层。机器配置操作符(MCO)将使用集群基础Red Hat Enterprise Linux CoreOS (RHCOS)镜像重新引导这些节点,从而覆盖自定义分层镜像。

要从集群中删除Red Hat Enterprise Linux CoreOS (RHCOS)自定义分层镜像,您需要删除应用该镜像的机器配置。

步骤
  1. 删除应用自定义分层镜像的机器配置。

    $ oc delete mc os-layer-custom

    删除机器配置后,节点将重新引导。

验证

您可以通过执行以下任何检查来验证是否已删除自定义分层镜像

  1. 检查工作机器配置池是否正在使用之前的机器配置进行更新

    $ oc get mcp
    示例输出
    NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master   rendered-master-6faecdfa1b25c114a58cf178fbaa45e2   True      False      False      3              3                   3                     0                      39m
    worker   rendered-worker-6b000dbc31aaee63c6a2d56d04cd4c1b   False     True       False      3              0                   0                     0                      39m (1)
    
    1 UPDATING字段为True时,机器配置池正在使用之前的机器配置进行更新。当该字段变为False时,工作机器配置池已推出到之前的机器配置。
  2. 检查节点以查看节点上的调度是否已禁用。这表示正在应用更改

    $ oc get nodes
    示例输出
    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
  3. 当节点恢复到Ready状态时,检查节点是否正在使用基础镜像

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

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

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

      sh-4.4# sudo rpm-ostree status
      示例输出
      State: idle
      Deployments:
      * ostree-unverified-registry:podman pull quay.io/openshift-release-dev/ocp-release@sha256:e2044c3cfebe0ff3a99fc207ac5efe6e07878ad59fd4ad5e41f88cb016dacd73
                         Digest: sha256:e2044c3cfebe0ff3a99fc207ac5efe6e07878ad59fd4ad5e41f88cb016dacd73

使用RHCOS自定义分层镜像更新

配置Red Hat Enterprise Linux CoreOS (RHCOS)镜像分层后,OpenShift Container Platform将不再自动更新使用自定义分层镜像的节点池。您将负责根据需要手动更新您的节点。

要更新使用自定义分层镜像的节点,请遵循以下一般步骤

  1. 集群会自动升级到x.y.z+1版本,但使用自定义分层镜像的节点除外。

  2. 然后,您可以创建一个新的Containerfile,该文件引用更新的OpenShift Container Platform镜像和您之前应用的RPM。

  3. 创建一个指向更新的自定义分层镜像的新机器配置。

不需要使用自定义分层镜像更新节点。但是,如果该节点落后于当前OpenShift Container Platform版本太远,您可能会遇到意外的结果。