×

托管控制平面升级要求

Kubernetes Operator的多集群引擎可以管理一个或多个OpenShift Container Platform集群。在OpenShift Container Platform上创建托管集群后,必须在多集群引擎Operator中将托管集群导入为托管集群。然后,您可以将OpenShift Container Platform集群用作管理集群。

在开始更新托管控制平面之前,请考虑以下要求:

  • 在使用OpenShift Virtualization作为提供程序时,必须使用裸机平台作为OpenShift Container Platform集群。

  • 托管集群必须使用裸机或OpenShift Virtualization作为云平台。您可以在`HostedCluster`自定义资源 (CR) 的`spec.Platform.type`规范中找到托管集群的平台类型。

必须按照以下顺序更新托管控制平面:

  1. 将OpenShift Container Platform集群升级到最新版本。有关更多信息,请参见“使用Web控制台更新集群”或“使用CLI更新集群”。

  2. 将多集群引擎Operator升级到最新版本。有关更多信息,请参见“更新已安装的Operator”。

  3. 将托管集群和节点池从以前的OpenShift Container Platform版本升级到最新版本。有关更多信息,请参见“更新托管集群中的控制平面”和“更新托管集群中的节点池”。

在托管集群中设置通道

您可以在`HostedCluster`自定义资源 (CR) 的`HostedCluster.Status`字段中查看可用的更新。

可用的更新不是从托管集群的集群版本运算符 (CVO) 中获取的。可用更新的列表可能与`HostedCluster`自定义资源 (CR) 的以下字段中的可用更新不同:

  • status.version.availableUpdates

  • status.version.conditionalUpdates

初始`HostedCluster` CR在`status.version.availableUpdates`和`status.version.conditionalUpdates`字段中没有任何信息。设置`spec.channel`字段为稳定的OpenShift Container Platform发行版版本后,HyperShift Operator将协调`HostedCluster` CR并使用可用的和条件更新更新`status.version`字段。

请参见包含通道配置的`HostedCluster` CR 的以下示例:

spec:
  autoscaling: {}
  channel: stable-4.y (1)
  clusterID: d6d42268-7dff-4d37-92cf-691bd2d42f41
  configuration: {}
  controllerAvailabilityPolicy: SingleReplica
  dns:
    baseDomain: dev11.red-chesterfield.com
    privateZoneID: Z0180092I0DQRKL55LN0
    publicZoneID: Z00206462VG6ZP0H2QLWK
1 <4.y>替换为您在spec.release中指定的OpenShift Container Platform版本。例如,如果您将spec.release设置为ocp-release:4.16.4-multi,则必须将spec.channel设置为stable-4.16

HostedCluster CR中配置通道后,要查看status.version.availableUpdatesstatus.version.conditionalUpdates字段的输出,请运行以下命令

$ oc get -n <hosted_cluster_namespace> hostedcluster <hosted_cluster_name> -o yaml
示例输出
version:
  availableUpdates:
  - channels:
    - candidate-4.16
    - candidate-4.17
    - eus-4.16
    - fast-4.16
    - stable-4.16
    image: quay.io/openshift-release-dev/ocp-release@sha256:b7517d13514c6308ae16c5fd8108133754eb922cd37403ed27c846c129e67a9a
    url: https://access.redhat.com/errata/RHBA-2024:6401
    version: 4.16.11
  - channels:
    - candidate-4.16
    - candidate-4.17
    - eus-4.16
    - fast-4.16
    - stable-4.16
    image: quay.io/openshift-release-dev/ocp-release@sha256:d08e7c8374142c239a07d7b27d1170eae2b0d9f00ccf074c3f13228a1761c162
    url: https://access.redhat.com/errata/RHSA-2024:6004
    version: 4.16.10
  - channels:
    - candidate-4.16
    - candidate-4.17
    - eus-4.16
    - fast-4.16
    - stable-4.16
    image: quay.io/openshift-release-dev/ocp-release@sha256:6a80ac72a60635a313ae511f0959cc267a21a89c7654f1c15ee16657aafa41a0
    url: https://access.redhat.com/errata/RHBA-2024:5757
    version: 4.16.9
  - channels:
    - candidate-4.16
    - candidate-4.17
    - eus-4.16
    - fast-4.16
    - stable-4.16
    image: quay.io/openshift-release-dev/ocp-release@sha256:ea624ae7d91d3f15094e9e15037244679678bdc89e5a29834b2ddb7e1d9b57e6
    url: https://access.redhat.com/errata/RHSA-2024:5422
    version: 4.16.8
  - channels:
    - candidate-4.16
    - candidate-4.17
    - eus-4.16
    - fast-4.16
    - stable-4.16
    image: quay.io/openshift-release-dev/ocp-release@sha256:e4102eb226130117a0775a83769fe8edb029f0a17b6cbca98a682e3f1225d6b7
    url: https://access.redhat.com/errata/RHSA-2024:4965
    version: 4.16.6
  - channels:
    - candidate-4.16
    - candidate-4.17
    - eus-4.16
    - fast-4.16
    - stable-4.16
    image: quay.io/openshift-release-dev/ocp-release@sha256:f828eda3eaac179e9463ec7b1ed6baeba2cd5bd3f1dd56655796c86260db819b
    url: https://access.redhat.com/errata/RHBA-2024:4855
    version: 4.16.5
  conditionalUpdates:
  - conditions:
    - lastTransitionTime: "2024-09-23T22:33:38Z"
      message: |-
        Could not evaluate exposure to update risk SRIOVFailedToConfigureVF (creating PromQL round-tripper: unable to load specified CA cert /etc/tls/service-ca/service-ca.crt: open /etc/tls/service-ca/service-ca.crt: no such file or directory)
          SRIOVFailedToConfigureVF description: OCP Versions 4.14.34, 4.15.25, 4.16.7 and ALL subsequent versions include kernel datastructure changes which are not compatible with older versions of the SR-IOV operator. Please update SR-IOV operator to versions dated 20240826 or newer before updating OCP.
          SRIOVFailedToConfigureVF URL: https://issues.redhat.com/browse/NHE-1171
      reason: EvaluationFailed
      status: Unknown
      type: Recommended
    release:
      channels:
      - candidate-4.16
      - candidate-4.17
      - eus-4.16
      - fast-4.16
      - stable-4.16
      image: quay.io/openshift-release-dev/ocp-release@sha256:fb321a3f50596b43704dbbed2e51fdefd7a7fd488ee99655d03784d0cd02283f
      url: https://access.redhat.com/errata/RHSA-2024:5107
      version: 4.16.7
    risks:
    - matchingRules:
      - promql:
          promql: |
            group(csv_succeeded{_id="d6d42268-7dff-4d37-92cf-691bd2d42f41", name=~"sriov-network-operator[.].*"})
            or
            0 * group(csv_count{_id="d6d42268-7dff-4d37-92cf-691bd2d42f41"})
        type: PromQL
      message: OCP Versions 4.14.34, 4.15.25, 4.16.7 and ALL subsequent versions
        include kernel datastructure changes which are not compatible with older
        versions of the SR-IOV operator. Please update SR-IOV operator to versions
        dated 20240826 or newer before updating OCP.
      name: SRIOVFailedToConfigureVF
      url: https://issues.redhat.com/browse/NHE-1171

更新托管集群中的OpenShift Container Platform版本

托管控制平面支持控制平面和数据平面之间更新的解耦。

作为集群服务提供商或集群管理员,您可以分别管理控制平面和数据。

您可以通过修改HostedCluster自定义资源 (CR) 来更新控制平面,并通过修改其NodePool CR 来更新节点。HostedClusterNodePool CR都通过.release字段指定OpenShift Container Platform发行版镜像。

为了在更新过程中保持托管集群的完全运行,控制平面和节点更新必须遵循Kubernetes 版本偏差策略

多集群引擎 Operator 集线器管理集群

Kubernetes Operator 的多集群引擎需要特定的 OpenShift Container Platform 版本,才能使管理集群保持在受支持的状态。您可以从OpenShift Container Platform Web 控制台的 OperatorHub 安装多集群引擎 Operator。

请参阅以下多集群引擎 Operator 版本的支持矩阵

多集群引擎 Operator 支持以下OpenShift Container Platform版本

  • 最新的未发布版本

  • 最新的已发布版本

  • 最新的已发布版本之前的两个版本

您还可以将多集群引擎 Operator 版本作为 Red Hat Advanced Cluster Management (RHACM) 的一部分获取。

托管集群中受支持的OpenShift Container Platform版本

部署托管集群时,管理集群的OpenShift Container Platform版本不会影响托管集群的OpenShift Container Platform版本。

HyperShift Operator 在hypershift命名空间中创建supported-versions ConfigMap。supported-versions ConfigMap 描述了您可以部署的受支持OpenShift Container Platform版本的范围。

请参阅以下supported-versions ConfigMap示例

apiVersion: v1
data:
    server-version: 2f6cfe21a0861dea3130f3bed0d3ae5553b8c28b
    supported-versions: '{"versions":["4.17","4.16","4.15","4.14"]}'
kind: ConfigMap
metadata:
    creationTimestamp: "2024-06-20T07:12:31Z"
    labels:
        hypershift.openshift.io/supported-versions: "true"
    name: supported-versions
    namespace: hypershift
    resourceVersion: "927029"
    uid: f6336f91-33d3-472d-b747-94abae725f70

要创建托管集群,必须使用支持版本范围内的OpenShift Container Platform版本。但是,多集群引擎 Operator 只能管理n+1n-2之间的OpenShift Container Platform版本,其中n定义当前次要版本。您可以检查多集群引擎 Operator 支持矩阵,以确保由多集群引擎 Operator 管理的托管集群在受支持的OpenShift Container Platform范围内。

要在OpenShift Container Platform上部署更高版本的托管集群,必须将多集群引擎 Operator 更新到新的次要版本发行版才能部署新版本的 Hypershift Operator。将多集群引擎 Operator 更新到新的补丁或 z 流发行版不会将 HyperShift Operator 更新到下一个版本。

请参阅以下hcp version命令的示例输出,该输出显示管理集群中OpenShift Container Platform 4.16的受支持OpenShift Container Platform版本

Client Version: openshift/hypershift: fe67b47fb60e483fe60e4755a02b3be393256343. Latest supported OCP: 4.17.0
Server Version: 05864f61f24a8517731664f8091cedcfc5f9b60d
Server Supports OCP Versions: 4.17, 4.16, 4.15, 4.14

托管集群的更新

spec.release值决定控制平面的版本。HostedCluster对象将预期的spec.release值传输到HostedControlPlane.spec.release值,并运行相应的控制平面 Operator 版本。

托管控制平面通过新版本的集群版本 Operator (CVO) 管理新版本控制平面组件以及任何 OpenShift Container Platform 组件的推出。

在托管控制平面中,NodeHealthCheck资源无法检测CVO的状态。在执行关键操作(例如更新集群)之前,集群管理员必须手动暂停由NodeHealthCheck触发的修复,以防止新的修复操作干扰集群更新。

要暂停修复,请将字符串数组(例如pause-test-cluster)作为NodeHealthCheck资源中pauseRequests字段的值输入。有关更多信息,请参见关于节点健康检查 Operator

集群更新完成后,您可以编辑或删除修复。导航到**计算** → **NodeHealthCheck**页面,单击您的节点健康检查,然后单击**操作**,该操作将显示一个下拉列表。

节点池的更新

使用节点池,您可以通过公开spec.releasespec.config值来配置在节点中运行的软件。您可以通过以下方式启动滚动节点池更新

  • 更改spec.releasespec.config值。

  • 更改任何特定于平台的字段,例如 AWS 实例类型。结果是一组具有新类型的新实例。

  • 更改集群配置,如果更改传播到节点。

节点池支持替换更新和就地更新。nodepool.spec.release值决定任何特定节点池的版本。NodePool对象根据.spec.management.upgradeType值完成替换或就地滚动更新。

创建节点池后,您无法更改更新类型。如果要更改更新类型,则必须创建一个节点池并删除另一个节点池。

节点池的替换更新

替换更新会在创建新版本实例的同时删除先前版本中的旧实例。这种更新类型在云环境中非常有效,在这种环境中,这种级别的不变性具有成本效益。

替换更新不会保留任何手动更改,因为节点已完全重新配置。

节点池的就地更新

就地更新会直接更新实例的操作系统。此类型适用于基础设施约束较高的环境,例如裸机。

就地更新可以保留手动更改,但如果您对集群直接管理的任何文件系统或操作系统配置(例如 kubelet 证书)进行手动更改,则会报告错误。

更新托管集群中的节点池

您可以通过更新托管集群中的节点池来更新您的 OpenShift Container Platform 版本。节点池版本不得超过托管控制平面版本。

NodePool 自定义资源 (CR) 中的.spec.release 字段显示节点池的版本。

步骤
  • 通过输入以下命令更改节点池中的spec.release.image 值:

    $ oc patch nodepool <node_pool_name> -n <hosted_cluster_namespace> --type=merge -p '{"spec":{"nodeDrainTimeout":"60s","release":{"image":"<openshift_release_image>"}}}'  (1) (2)
    1 分别将<node_pool_name><hosted_cluster_namespace> 替换为您的节点池名称和托管集群命名空间。
    2 <openshift_release_image> 变量指定您要升级到的新的 OpenShift Container Platform 发布镜像,例如 quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64。将<4.y.z> 替换为受支持的 OpenShift Container Platform 版本。
验证
  • 要验证新版本是否已推出,请通过运行以下命令检查节点池中的.status.conditions 值:

    $ oc get -n <hosted_cluster_namespace> nodepool <node_pool_name> -o yaml
    示例输出
    status:
     conditions:
     - lastTransitionTime: "2024-05-20T15:00:40Z"
           message: 'Using release image: quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64' (1)
           reason: AsExpected
           status: "True"
           type: ValidReleaseImage
    1 <4.y.z> 替换为受支持的 OpenShift Container Platform 版本。

更新托管集群中的控制平面

在托管控制平面上,您可以通过更新托管集群来升级您的 OpenShift Container Platform 版本。HostedCluster 自定义资源 (CR) 中的.spec.release 显示控制平面的版本。HostedCluster.spec.release 字段更新为HostedControlPlane.spec.release 并运行相应的 Control Plane Operator 版本。

HostedControlPlane 资源通过新版本的 Cluster Version Operator (CVO) 来协调控制平面组件以及数据平面中的 OpenShift Container Platform 组件的新版本的推出。HostedControlPlane 包括以下工件:

  • CVO

  • 集群网络操作员 (CNO)

  • 集群入口操作员

  • Kube API 服务器、调度程序和管理器的清单

  • 机器审批器

  • 自动缩放器

  • 启用控制平面端点(例如 Kube API 服务器、点火和 Konnectivity)的入口的基础设施资源

您可以使用status.version.availableUpdatesstatus.version.conditionalUpdates 字段中的信息,设置HostedCluster CR 中的.spec.release 字段来更新控制平面。

步骤
  1. 通过输入以下命令,将hypershift.openshift.io/force-upgrade-to=<openshift_release_image> 注解添加到托管集群:

    $ oc annotate hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> "hypershift.openshift.io/force-upgrade-to=<openshift_release_image>" --overwrite  (1) (2)
    1 分别将<hosted_cluster_name><hosted_cluster_namespace> 替换为您的托管集群名称和托管集群命名空间。
    2 <openshift_release_image> 变量指定您要升级到的新的 OpenShift Container Platform 发布镜像,例如 quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64。将<4.y.z> 替换为受支持的 OpenShift Container Platform 版本。
  2. 通过输入以下命令更改托管集群中的spec.release.image 值:

    $ oc patch hostedcluster <hosted_cluster_name> -n <hosted_cluster_namespace> --type=merge -p '{"spec":{"release":{"image":"<openshift_release_image>"}}}'
验证
  • 要验证新版本是否已推出,请通过运行以下命令检查托管集群中的.status.conditions.status.version 值:

    $ oc get -n <hosted_cluster_namespace> hostedcluster <hosted_cluster_name> -o yaml
    示例输出
    status:
     conditions:
     - lastTransitionTime: "2024-05-20T15:01:01Z"
            message: Payload loaded version="4.y.z" image="quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64" (1)
            status: "True"
            type: ClusterVersionReleaseAccepted
    #...
    version:
          availableUpdates: null
          desired:
          image: quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64 (1)
          version: 4.y.z
    1 <4.y.z> 替换为受支持的 OpenShift Container Platform 版本。

使用多集群引擎 Operator 控制台更新托管集群

您可以使用多集群引擎 Operator 控制台更新托管集群。

更新托管集群之前,您必须参考托管集群的可用更新和条件更新。选择错误的发布版本可能会破坏托管集群。

步骤
  1. 选择**所有集群**。

  2. 导航到**基础设施** → **集群**以查看托管的托管集群。

  3. 单击**可用升级**链接以更新控制平面和节点池。