第 3 章 执行集群更新


3.1. 使用 CLI 更新集群

您可以使用 OpenShift CLI (oc)在 OpenShift Container Platform 集群上执行次要版本和补丁更新。

3.1.1. 先决条件

  • 使用具有 admin 权限的用户访问集群。请参阅使用 RBAC 定义和应用权限
  • 具有最新的 etcd 备份,以防因为升级失败需要将集群恢复到以前的状态。
  • 如果您需要因为 pod 失败而恢复持久性卷,则有一个最新的 Container Storage Interface (CSI)卷快照
  • 您的 RHEL7 worker 替换为 RHEL8 或 RHCOS worker。红帽不支持对 RHEL worker 的 从 RHEL7 到 RHEL8 的原位升级 ; 这些主机必须使用干净的操作系统安装替换。
  • 您已将之前通过 Operator Lifecycle Manager (OLM) 安装的所有 Operator 更新至与目标发行版本兼容的版本。更新 Operator 可确保当默认软件目录在集群升级过程中从当前次要版本切换到下一个次版本时,它们具有有效的升级路径。如需有关如何检查兼容性以及根据需要更新 已安装的 Operator 的更多信息,请参阅更新已安装的 Operator。
  • 确保所有机器配置池 (MCP) 都正在运行且未暂停。在更新过程中跳过与暂停 MCP 关联的节点。如果要执行 canary rollout 更新策略,可以暂停 MCP。
  • 如果您的集群使用手动维护的凭证,请更新新发行版本的云供应商资源。如需更多信息,包括如何确定这是集群的要求,请参阅准备使用手动维护的凭证更新集群
  • 确保解决所有 Upgradeable=False 条件,以便集群可以更新到下一个次版本。当您有一个或多个无法更新的集群 Operator 时,Cluster Settings 页面的顶部会显示一个警报。您仍然可以更新到当前当前使用的次发行版本的下一个可用补丁更新。
  • 如果您运行 Operator 或您已配置了 pod 中断预算,您可能会在升级过程中遇到中断。如果在 PodDisruptionBudget 中将 minAvailable 设置为 1,则节点会排空以应用可能会阻止驱除过程的待处理机器配置。如果重启了几个节点,则所有 pod 只能有一个节点上运行,PodDisruptionBudget 字段可能会阻止节点排空。
重要
  • 当更新无法完成时,Cluster Version Operator(CVO)会在尝试协调更新时报告任何阻塞组件的状态。当前还不支持将集群还原到以前的版本。如果您的更新无法完成,请联系红帽支持。
  • 使用 unsupportedConfigOverrides 部分修改 Operator 配置不受支持,并可能会阻止集群更新。您必须在更新集群前删除此设置。

3.1.2. 暂停 MachineHealthCheck 资源

在更新过程中,集群中的节点可能会临时不可用。对于 worker 节点,MachineHealthCheck 资源可能会认为这样的节点不健康,并重新引导它们。为避免重新引导这样的节点,请在更新集群前暂停所有 MachineHealthCheck 资源。

注意

有些 MachineHealthCheck 资源可能不需要暂停。如果您的 MachineHealthCheck 资源依赖于不可恢复的条件,请暂停 MHC。

先决条件

  • 安装 OpenShift CLI (oc) 。

流程

  1. 要列出您要暂停的所有可用 MachineHealthCheck 资源,请运行以下命令:

    $ oc get machinehealthcheck -n openshift-machine-api
    Copy to Clipboard Toggle word wrap
  2. 要暂停机器健康检查,请将 cluster.x-k8s.io/paused="" 注解添加到 MachineHealthCheck 资源。运行以下命令:

    $ oc -n openshift-machine-api annotate mhc <mhc-name> cluster.x-k8s.io/paused=""
    Copy to Clipboard Toggle word wrap

    注解的 MachineHealthCheck 资源类似以下 YAML 文件:

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineHealthCheck
    metadata:
      name: example
      namespace: openshift-machine-api
      annotations:
        cluster.x-k8s.io/paused: ""
    spec:
      selector:
        matchLabels:
          role: worker
      unhealthyConditions:
      - type:    "Ready"
        status:  "Unknown"
        timeout: "300s"
      - type:    "Ready"
        status:  "False"
        timeout: "300s"
      maxUnhealthy: "40%"
    status:
      currentHealthy: 5
      expectedMachines: 5
    Copy to Clipboard Toggle word wrap
    重要

    更新集群后恢复机器健康检查。要恢复检查,请运行以下命令从 MachineHealthCheck 资源中删除暂停注解:

    $ oc -n openshift-machine-api annotate mhc <mhc-name> cluster.x-k8s.io/paused-
    Copy to Clipboard Toggle word wrap

您可以使用控制台或 CLI 更新或升级单节点 OpenShift Container Platform 集群。

但请注意以下限制:

  • 不需要暂停 MachineHealthCheck 资源,因为没有其他节点可以执行健康检查。
  • 不支持使用 etcd 备份来恢复单节点 OpenShift Container Platform 集群。但是,最好在升级失败时执行 etcd 备份。如果 control plane 健康,您可以使用备份将集群恢复到以前的状态。
  • 更新单节点 OpenShift Container Platform 集群需要停机,并可包括自动重启。停机时间取决于更新有效负载,如下例所示:

    • 如果更新有效负载包含操作系统更新(需要重启),则停机时间会非常显著,并影响集群管理和用户工作负载。
    • 如果更新包含不需要重启的机器配置更改,则停机时间会减少,并且对集群管理和用户工作负载的影响会减少。在这种情况下,节点排空步骤会通过单节点 OpenShift Container Platform 跳过,因为集群中没有其他节点可以重新调度工作负载。
    • 如果更新有效负载不包含操作系统更新或机器配置更改,则会出现简短的 API 中断并快速解决。
重要

某些条件(如更新的软件包中的错误)可能会导致单个节点在重启后无法重启。在这种情况下,更新不会自动回滚。

3.1.4. 使用 CLI 更新集群

您可以使用 OpenShift CLI (oc) 来检查和请求集群更新。

您可以在客户门户网站的勘误部分找到有关可用 OpenShift Container Platform 公告和更新的信息。

先决条件

  • 安装与更新版本的版本匹配的 OpenShift CLI(oc)。
  • 使用具有 cluster-admin 权限的用户登陆到集群。
  • 暂停所有 MachineHealthCheck 资源。

流程

  1. 查看可用更新,记录下要应用的更新的版本号:

    $ oc adm upgrade recommend
    Copy to Clipboard Toggle word wrap

    输出示例

    Failing=True:
    
      Reason: ClusterOperatorNotAvailable
      Message: Cluster operator monitoring is not available
    ...
    Upstream update service: https://api.integration.openshift.com/api/upgrades_info/graph
    Channel: candidate-4.16 (available channels: candidate-4.16, candidate-4.17, candidate-4.18, eus-4.16, fast-4.16, fast-4.17, stable-4.16, stable-4.17)
    
    Updates to 4.16:
      VERSION     ISSUES
      4.16.32     no known issues relevant to this cluster
      4.16.30     no known issues relevant to this cluster
    And 2 older 4.16 updates you can see with '--show-outdated-releases' or '--version VERSION'.
    Copy to Clipboard Toggle word wrap

    注意
    • 您可以使用 -version 标志来确定是否推荐使用特定版本进行更新。如果没有推荐的更新,则已知问题的更新可能仍然可用。
    • 有关如何执行 Control Plane Only 更新的详情和信息,请参阅附加资源部分中列出的 准备执行 Control Plane Only 更新页。
  2. 根据您的机构要求,设置适当的升级频道。例如,您可以将频道设置为 stable-4.13fast-4.13。有关频道的更多信息,请参阅在额外资源项中的了解更新频道和发行版本

    $ oc adm upgrade channel <channel>
    Copy to Clipboard Toggle word wrap

    例如,要将频道设置为 stable-4.20

    $ oc adm upgrade channel stable-4.20
    Copy to Clipboard Toggle word wrap
    重要

    对于生产环境中的集群,您必须订阅一个 stable-*eus-*fast-* 频道。

    注意

    当您准备好升级到下一个次版本时,请选择与该次版本对应的频道。声明更新频道后,集群可以更方便地为您的目标版本更新路径。集群可能需要一些时间来评估所有可用的更新,并提供最佳更新建议。更新建议可能会随时间变化,因为它们基于哪些更新选项。

    如果您无法看到到目标次版本的更新路径,请保持将集群更新至当前版本的最新补丁版本,直到下一个次版本在路径中可用。

  3. 应用更新:

    • 要更新到最新版本:

      $ oc adm upgrade --to-latest=true 
      1
      Copy to Clipboard Toggle word wrap
    • 要更新到一个特定版本:

      $ oc adm upgrade --to=<version> 
      1
      Copy to Clipboard Toggle word wrap
      1 1
      &lt;version>是从 oc adm upgrade recommend 命令的输出中获取的更新版本。
      1. 如果集群管理员已评估了潜在的已知风险,并确定它对于当前集群是可以接受的,那么管理员可以通过运行以下命令确保安全保护并继续更新:

        $ oc adm upgrade --allow-not-recommended --to <version>
        Copy to Clipboard Toggle word wrap
        重要

        使用 oc adm upgrade --help 时,会列出 --force 的选项。强烈不鼓励这样做,因为使用 --force 选项会绕过集群端保护,包括版本验证和预条件检查。使用 --force 不保证成功更新。绕过保护会使集群面临风险。

  4. 可选:运行以下命令来查看 Cluster Version Operator 的状态:

    $ oc adm upgrade status
    Copy to Clipboard Toggle word wrap
    注意

    要实时监控更新,请在 watch 工具中运行 oc adm upgrade status

  5. 更新完成后,可以通过以下方法确认集群已更新为新版本:

    $ oc adm upgrade
    Copy to Clipboard Toggle word wrap

    输出示例

    Cluster version is <version>
    
    Upstream is unset, so the cluster will use an appropriate default.
    Channel: stable-<version> (available channels: candidate-<version>, eus-<version>, fast-<version>, stable-<version>)
    
    No updates available. You may force an update to a specific release image, but doing so might not be supported and might result in downtime or data loss.
    Copy to Clipboard Toggle word wrap

  6. 如果您要将集群升级到下一个次版本,如 X.y 升级到 X. (y+1),建议在部署依赖新功能的工作负载前确认您的节点已升级:

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                           STATUS   ROLES    AGE   VERSION
    ip-10-0-168-251.ec2.internal   Ready    master   82m   v1.33.4
    ip-10-0-170-223.ec2.internal   Ready    master   82m   v1.33.4
    ip-10-0-179-95.ec2.internal    Ready    worker   70m   v1.33.4
    ip-10-0-182-134.ec2.internal   Ready    worker   70m   v1.33.4
    ip-10-0-211-16.ec2.internal    Ready    master   82m   v1.33.4
    ip-10-0-250-100.ec2.internal   Ready    worker   69m   v1.33.4
    Copy to Clipboard Toggle word wrap

3.1.5. 使用 oc adm upgrade status 的集群更新状态

在更新集群时,oc adm upgrade 命令会返回有关更新状态的有限信息。集群管理员可以使用 oc adm upgrade status 命令将状态信息与 oc adm upgrade 命令分离,并返回有关集群更新的特定信息,包括 control plane 和 worker 节点更新的状态。worker 也称为 compute。

oc adm upgrade status 命令是只读的,不会更改集群中的任何状态。

oc adm upgrade status 命令可用于从 4.12 版本到最新支持的发行版本的集群。

oc adm upgrade status 命令将输出三个部分、control plane 更新、worker 节点更新和健康分析。

  • Control Plane Update: 显示更新集群 control plane 的详细信息,包含高级别评估、完成状态、持续时间估算或集群 Operator 健康状况。本节还显示具有 control plane 节点更新信息的表。

    如果使用了-- details=operators or- details -all 标志,control plane update 部分也可以显示列出集群操作器被更新的额外表。请注意,由于 OpenShift Container Platform 的异步分布式性质,在更新期间,Operator 可能会多次出现。只有在观察 Cluster Operator 进行更新时,才会显示这个部分。在更新过程中,在特定时间段内观察未更新 Cluster Operator 是正常的;不是每个执行的操作都可以被分配给可观察到的 Cluster Operator。

  • worker 备注 更新 :显示 worker 节点更新信息。worker nodes 部分以表开头,其中显示了集群中配置的每个 worker 池的信息摘要。每个非空 worker 池输出都会显示一个专用表,列出关于属于该池的节点的更新信息。如果集群没有任何 worker 节点,输出将不包含 worker 节点部分。您可以使用-- details=nodes 或-- details= all 使节点表显示所有行
  • Health Insights: 显示与持续更新相关的集群中状态和事件的深入了解。您可以使用-- details=health 将本节中的项目扩展为更详细的形式,包含更多内容,如文档链接、较长的格式描述或深入了解中涉及的集群资源。
注意

oc adm upgrade status 命令目前不支持托管的 control plane 集群。

以下是您成功看到的更新进度的输出示例:

= Control Plane =
Assessment:      Progressing
Target Version:  4.17.1 (from 4.17.0)
Updating:        machine-config
Completion:      97% (32 operators updated, 1 updating, 0 waiting)
Duration:        54m (Est. Time Remaining: <10m)
Operator Status: 32 Healthy, 1 Unavailable

Control Plane Nodes
NAME                                        ASSESSMENT    PHASE      VERSION   EST    MESSAGE
ip-10-0-53-40.us-east-2.compute.internal    Progressing   Draining   4.17.0    +10m
ip-10-0-30-217.us-east-2.compute.internal   Outdated      Pending    4.17.0    ?
ip-10-0-92-180.us-east-2.compute.internal   Outdated      Pending    4.17.0    ?

= Worker Upgrade =

WORKER POOL   ASSESSMENT    COMPLETION   STATUS
worker        Progressing   0% (0/2)     1 Available, 1 Progressing, 1 Draining
infra         Progressing   50% (1/2)    1 Available, 1 Progressing, 1 Draining

Worker Pool Nodes: Worker
NAME                                       ASSESSMENT    PHASE      VERSION   EST    MESSAGE
ip-10-0-4-159.us-east-2.compute.internal   Progressing   Draining   4.17.0    +10m
ip-10-0-99-40.us-east-2.compute.internal   Outdated      Pending    4.17.0    ?

Worker Pool Nodes: infra
NAME                                             ASSESSMENT    PHASE      VERSION   EST    MESSAGE
ip-10-0-4-159-infra.us-east-2.compute.internal   Progressing   Draining   4.17.0    +10m
ip-10-0-20-162.us-east-2.compute.internal        Completed     Updated    4.17.1    -

= Update Health =
SINCE   LEVEL   IMPACT   MESSAGE
54m4s   Info    None     Update is proceeding well
Copy to Clipboard Toggle word wrap

3.1.6. 使用 CLI 更改更新服务器

更改更新服务器是可选的。如果您在本地安装和配置了 OpenShift Update Service (OSUS),您必须将服务器的 URL 设置为 upstream,以便在更新期间使用本地服务器。upstream 的默认值是 https://api.openshift.com/api/upgrades_info/v1/graph

流程

  • 更改集群版本中的 upstream 参数值:

    $ oc patch clusterversion/version --patch '{"spec":{"upstream":"<update-server-url>"}}' --type=merge
    Copy to Clipboard Toggle word wrap

    <update-server-url> 变量指定更新服务器的 URL。

    输出示例

    clusterversion.config.openshift.io/version patched
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat