×

机器配置操作员 (MCO) 使用启动镜像来启动 Red Hat Enterprise Linux CoreOS (RHCOS) 节点。默认情况下,OpenShift Container Platform 不管理启动镜像。

这意味着集群中的启动镜像不会随着集群一起更新。例如,如果您的集群最初使用 OpenShift Container Platform 4.12 创建,则集群用于创建节点的启动镜像仍然是 4.12 版本,即使您的集群已升级到更高版本也是如此。如果集群随后升级到 4.13 或更高版本,新节点将继续使用相同的 4.12 镜像进行扩展。

此过程可能导致以下问题:

  • 启动节点所需时间过长

  • 证书过期问题

  • 版本偏差问题

为了避免这些问题,您可以配置集群在更新集群时更新启动镜像。通过修改 `MachineConfiguration` 对象,您可以启用此功能。目前,更新启动镜像的功能仅适用于 Google Cloud Platform (GCP) 集群,并且作为技术预览功能适用于 Amazon Web Services (AWS) 集群。集群 CAPI 运算符管理的集群不支持此功能。

AWS 的更新启动镜像功能仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

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

如果您未在机器集中使用名为 worker-user-data 的默认用户数据密钥,或者您已修改 worker-user-data 密钥,则不应使用托管启动镜像更新。这是因为机器配置操作符 (MCO) 会更新机器集以使用密钥的托管版本。通过使用托管启动镜像功能,您将放弃自定义存储在机器集对象中的密钥的功能。

要查看集群中当前使用的启动镜像,请检查机器集。

包含启动镜像引用的示例机器集
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  name: ci-ln-hmy310k-72292-5f87z-worker-a
  namespace: openshift-machine-api
spec:
# ...
  template:
# ...
    spec:
# ...
      providerSpec:
# ...
        value:
          disks:
          - autoDelete: true
            boot: true
            image: projects/rhcos-cloud/global/images/rhcos-412-85-202203181601-0-gcp-x86-64 (1)
# ...
1 此启动镜像与最初安装的 OpenShift Container Platform 版本相同,在此示例中为 OpenShift Container Platform 4.12,与集群的当前版本无关。启动镜像在机器集中的表示方式取决于平台,因为 providerSpec 字段的结构因平台而异。

如果您将集群配置为更新启动镜像,则机器集中引用的启动镜像将与集群的当前版本匹配。

配置更新的启动镜像

默认情况下,OpenShift Container Platform 不管理启动镜像。您可以通过修改 MachineConfiguration 对象来配置集群,以便在更新集群时更新启动镜像。

目前,更新启动镜像的功能仅适用于 Google Cloud Platform (GCP) 集群,并且作为 Amazon Web Services (AWS) 集群的技术预览功能。它不支持由集群 CAPI 运算符管理的集群。

AWS 的更新启动镜像功能仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

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

步骤
  1. 编辑名为 clusterMachineConfiguration 对象以启用启动镜像的更新,方法是运行以下命令:

    $ oc edit MachineConfiguration cluster
    • 可选:为所有机器集配置启动镜像更新功能

      apiVersion: operator.openshift.io/v1
      kind: MachineConfiguration
      metadata:
        name: cluster
        namespace: openshift-machine-config-operator
      spec:
      # ...
        managedBootImages: (1)
          machineManagers:
          - resource: machinesets
            apiGroup: machine.openshift.io
            selection:
              mode: All (2)
      1 激活启动镜像更新功能。
      2 指定要更新集群中的所有机器集。
    • 可选:为特定机器集配置启动镜像更新功能

      apiVersion: operator.openshift.io/v1
      kind: MachineConfiguration
      metadata:
        name: cluster
        namespace: openshift-machine-config-operator
      spec:
      # ...
        managedBootImages: (1)
          machineManagers:
          - resource: machinesets
            apiGroup: machine.openshift.io
            selection:
              mode: Partial
              partial:
                machineResourceSelector:
                  matchLabels:
                    update-boot-image: "true" (2)
      1 激活启动镜像更新功能。
      2 指定具有此标签的任何机器集都将被更新。

      如果机器集上不存在相应的标签,请通过运行类似于以下的命令添加键值对:

      $ oc label machineset.machine ci-ln-hmy310k-72292-5f87z-worker-a update-boot-image=true -n openshift-machine-api
验证
  1. 通过查看机器配置对象来查看启动镜像更新的当前状态

    $ oc get machineconfiguration cluster -n openshift-machine-api -o yaml
    包含启动镜像引用的示例机器集
    kind: MachineConfiguration
    metadata:
      name: cluster
    # ...
    status:
      conditions:
      - lastTransitionTime: "2024-09-09T13:51:37Z" (1)
        message: Reconciled 1 of 2 MAPI MachineSets | Reconciled 0 of 0 CAPI MachineSets
          | Reconciled 0 of 0 CAPI MachineDeployments
        reason: BootImageUpdateConfigurationAdded
        status: "True"
        type: BootImageUpdateProgressing
      - lastTransitionTime: "2024-09-09T13:51:37Z" (2)
        message: 0 Degraded MAPI MachineSets | 0 Degraded CAPI MachineSets | 0 CAPI MachineDeployments
        reason: BootImageUpdateConfigurationAdded
        status: "False"
        type: BootImageUpdateDegraded
    1 启动镜像更新的状态。目前不支持集群 CAPI 运算符机器集和机器部署的启动镜像更新。
    2 指示是否有任何启动镜像更新失败。如果任何更新失败,则机器配置操作符将降级。在这种情况下,可能需要人工干预。
  2. 通过运行以下命令获取启动镜像版本:

    $ oc get machinesets <machineset_name> -n openshift-machine-api -o yaml
    包含启动镜像引用的示例机器集
    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: ci-ln-77hmkpt-72292-d4pxp
        update-boot-image: "true"
      name: ci-ln-77hmkpt-72292-d4pxp-worker-a
      namespace: openshift-machine-api
    spec:
    # ...
      template:
    # ...
        spec:
    # ...
          providerSpec:
    # ...
            value:
              disks:
              - autoDelete: true
                boot: true
                image: projects/rhcos-cloud/global/images/rhcos-416-92-202402201450-0-gcp-x86-64 (1)
    # ...
    1 此启动镜像与当前的 OpenShift Container Platform 版本相同。

禁用更新的启动镜像

要禁用更新的启动镜像功能,请编辑 MachineConfiguration 对象以移除 managedBootImages 部分。

如果您在某些节点使用新的启动镜像版本创建后禁用此功能,则任何现有节点都将保留其当前启动镜像。关闭此功能不会将节点或机器集回滚到最初安装的启动镜像。机器集将保留启用此功能时存在的启动镜像版本,并且在将来将集群升级到新的 OpenShift Container Platform 版本时不会再次更新。

步骤
  1. 通过编辑 MachineConfiguration 对象禁用更新的启动镜像

    $ oc edit MachineConfiguration cluster
  2. 移除 managedBootImages 部分

    apiVersion: operator.openshift.io/v1
    kind: MachineConfiguration
    metadata:
      name: cluster
      namespace: openshift-machine-config-operator
    spec:
    # ...
      managedBootImages: (1)
        machineManagers:
        - resource: machinesets
          apiGroup: machine.openshift.io
          selection:
            mode: All
    1 移除整个部分以禁用更新的启动镜像。