3.5. 更新包含使用 RHEL 的计算(compute)系统的集群


您可以在 OpenShift Container Platform 集群上执行次版本和补丁更新。如果您的集群包含 Red Hat Enterprise Linux (RHEL) 机器,则必须执行额外的步骤来更新这些机器。

3.5.1. 先决条件

  • 使用具有 admin 权限的用户访问集群。请参阅使用 RBAC 定义和应用权限
  • 具有最新的 etcd 备份,以防因为升级失败需要将集群恢复到以前的状态。
  • 您的 RHEL7 worker 替换为 RHEL8 或 RHCOS worker。红帽不支持对 RHEL worker 的 从 RHEL7 到 RHEL8 的原位升级 ; 这些主机必须使用干净的操作系统安装替换。
  • 如果您的集群使用手动维护的凭证,请更新新发行版本的云供应商资源。如需更多信息,包括如何确定这是集群的要求,请参阅准备使用手动维护的凭证更新集群
  • 如果您运行 Operator 或您已配置了 pod 中断预算,您可能会在升级过程中遇到中断。如果在 PodDisruptionBudget 中将 minAvailable 设置为 1,则节点会排空以应用可能会阻止驱除过程的待处理机器配置。如果重启了几个节点,则所有 pod 只能有一个节点上运行,PodDisruptionBudget 字段可能会阻止节点排空。

3.5.2. 使用Web控制台更新集群

如果有可用更新,您可以从Web控制台更新集群。

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

先决条件

  • 使用具有 cluster-admin 权限的用户访问 Web 控制台。
  • 访问 OpenShift Container Platform web 控制台。
  • 暂停所有 MachineHealthCheck 资源。
  • 您已将之前通过 Operator Lifecycle Manager (OLM) 安装的所有 Operator 更新至与目标发行版本兼容的版本。更新 Operator 可确保当默认 OperatorHub 目录在集群升级过程中从当前次要版本切换到下一个次版本时,它们有有效的升级路径。如需了解如何检查兼容性的更多信息,请参阅"添加资源"部分中的"更新已安装的 Operator"部分,如有必要,更新已安装的 Operator。
  • 您的机器配置池 (MCP) 正在运行且未暂停。在更新过程中跳过与暂停 MCP 关联的节点。如果要执行 canary rollout 更新策略,可以暂停 MCP。
  • 您的 RHEL7 worker 替换为 RHEL8 或 RHCOS worker。红帽不支持对 RHEL worker 的 从 RHEL7 到 RHEL8 的原位升级 ; 这些主机必须使用干净的操作系统安装替换。

流程

  1. 在 web 控制台中点击 Administration Cluster Settings 并查看 Details 选项卡中的内容。
  2. 对于生产环境中的集群,请确保将 Channel 设置为您要升级到的版本的正确频道,如 stable-4.15

    重要

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

    注意

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

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

    • 如果 Update 状态 不是 Updates available,则无法升级集群。
    • Select channel 表示集群正在运行或正在更新的集群版本。
  3. 选择要更新到的版本,然后单击 Save

    输入频道 Update Status 变为Update to <product-version> in progress,您可以通过监视 Operator 和节点的进度条来查看集群更新的进度。

    注意

    如果您要将集群升级到下一个次版本,例如从 4.10 升级到 4.11,请在部署依赖新功能的工作负载前确认您的节点已更新。任何尚未更新的 worker 节点池都会显示在 Cluster Settings 页面。

  4. 更新完成后,Cluster Version Operator 会刷新可用更新,检查当前频道中是否有更多可用更新。

    • 如果有可用更新,请继续在当前频道中执行更新,直到您无法再更新为止。
    • 如果没有可用的更新,请将 Channel 改为下一个次版本的 stable-*, eus-*fast-* 频道,并更新至您在该频道中想要的版本。

    您可能需要执行一些过渡的更新,直到您到达您想要的版本。

    重要

    当您更新包含有 Red Hat Enterprise Linux (RHEL) worker 机器的集群时,这些 worker 会在更新过程中暂时不可用。当集群进入 NotReady 状态时,您需要针对每个 RHEL 机器运行升级 playbook 以完成更新。

3.5.3. 可选:添加 hook 以在RHEL系统上执行Ansible任务

在OpenShift Container Platform更新期间,您可以使用hook在RHEL计算系统上运行Ansible任务。

3.5.3.1. hook关于 Ansible hook 进行更新

更新OpenShift Container Platform时,可以使用hook在执行特定操作时在Red Hat Enterprise Linux(RHEL)节点上运行自定义的任务。您可以使用 hook 提供定义了在执行特定任务之前或之后要运行的任务的文件。在OpenShift Container Platform集群中更新RHEL计算节点时,可以使用 hook 来验证或修改自定义的基础架构。

因为当 hook 失败时,这个操作将会失败,所以您必须把 hook 设计为可以多次运行,并且获得相同的结果。

hook 有以下限制: - hook 没有已定义或版本化的界面。它们可以使用内部的openshift-ansible变量,但这些变量可能会在将来的OpenShift Container Platform版本被修改或删除。 - hook 本身没有错误处理机制,因此 hook 中的错误会暂停更新过程。如果出现错误,则需要解决相关的问题,然后再次进行升级。

3.5.3.2. 配置Ansible inventory文件以使用 hook

您可以在 hosts inventory 文件的all:vars 部分中定义 Red Hat Enterprise Linux(RHEL)compute 机器(也称为 worker 机器)更新时使用的 hook 。

先决条件

  • 您可以访问用于添加RHEL compute 系统集群的计算机。您必须有访问定义RHEL系统的hosts Ansible 清单文件的权限。

流程

  1. 在设计了 hook 后,创建一个YAML文件,为其定义Ansible任务。此文件必须是一组任务,不能是一个 playbook,如以下示例所示:

    ---
    # Trivial example forcing an operator to acknowledge the start of an upgrade
    # file=/home/user/openshift-ansible/hooks/pre_compute.yml
    
    - name: note the start of a compute machine update
      debug:
          msg: "Compute machine upgrade of {{ inventory_hostname }} is about to start"
    
    - name: require the user agree to start an upgrade
      pause:
          prompt: "Press Enter to start the compute machine update"
  2. 修改 hosts Ansible inventory 文件来指定 hook 文件。hook 文件作为参数值在 [all:vars] 部分指定。如下所示:

    清单文件中的 hook 定义示例

    [all:vars]
    openshift_node_pre_upgrade_hook=/home/user/openshift-ansible/hooks/pre_node.yml
    openshift_node_post_upgrade_hook=/home/user/openshift-ansible/hooks/post_node.yml

    为了避免歧义,请在其定义中使用 hook 文件的绝对路径而不要使用相对路径。

3.5.3.3. RHEL计算系统可用的 hook

在更新OpenShift Container Platform集群中的Red Hat Enterprise Linux(RHEL)compute 系统时,可以使用以下 hook。

Hook 名描述

openshift_node_pre_cordon_hook

  • 在每个节点被封锁(cordon)之前运行。
  • 此 hook 以串行方式针对每个节点运行。
  • 如果某个任务必须针对其他主机运行,则该任务必须使用delegate_tolocal_action

openshift_node_pre_upgrade_hook

  • 在每个节点被封锁,且被更新运行。
  • 此 hook 以串行方式针对每个节点运行。
  • 如果某个任务必须针对其他主机运行,则该任务必须使用delegate_tolocal_action

openshift_node_pre_uncordon_hook

  • 在每个节点被更新,且被取消封锁(uncordon)运行。
  • 此 hook 以串行方式针对每个节点运行。
  • 如果某个任务必须针对其他主机运行,则该任务必须使用delegate_tolocal_action

openshift_node_post_upgrade_hook

  • 每个节点未被取消封锁运行。这是最后一个节点更新操作。
  • 此 hook 以串行方式针对每个节点运行。
  • 如果某个任务必须针对其他主机运行,则该任务必须使用delegate_tolocal_action

3.5.4. 更新集群中的RHEL compute 系统

在对集群进行更新后,必须更新集群中的Red Hat Enterprise Linux(RHEL)compute 系统。

重要

RHEL 计算机器支持 Red Hat Enterprise Linux (RHEL) 版本 8.6 及更新的版本。

如果您使用 RHEL 作为操作系统,您还可以将计算机器更新至 OpenShift Container Platform 的另一个次要版本。当执行次版本更新时,您不需要排除 RHEL 中的任何 RPM 软件包。

重要

您无法将 RHEL 7 计算机器升级到 RHEL 8。您必须部署新的 RHEL 8 主机,并且应该删除旧的 RHEL 7 主机。

先决条件

  • 已更新了集群。

    重要

    因为 RHEL 机器需要集群生成的资产才能完成更新过程,所以您必须在更新其中的 RHEL worker 机器前更新集群。

  • 您可以访问用于将 RHEL 计算机器添加到集群的本地机器。您必须有权访问定义了 RHEL 系统及 upgrade playbook 的hosts Ansible 清单文件。
  • 对于次版本的更新,RPM 存储库使用的是集群上运行的相同版本的 OpenShift Container Platform。

流程

  1. 停止并禁用主机上的防火墙:

    # systemctl disable --now firewalld.service
    注意

    默认情况下,使用 "Minimal" 安装选项的基础操作系统 RHEL 启用 firewalld 保护。在主机上启用了 firewalld 服务会阻止您访问 worker 上的 OpenShift Container Platform 日志。如果您希望继续访问 worker 上的 OpenShift Container Platform 日志,以后不要启用 firewalld。

  2. 启用 OpenShift Container Platform 4.15 所需的存储库:

    1. 在运行 Ansible playbook 的机器上,更新所需的存储库:

      # subscription-manager repos --disable=rhocp-4.14-for-rhel-8-x86_64-rpms \
                                   --enable=rhocp-4.15-for-rhel-8-x86_64-rpms
      重要

      自 OpenShift Container Platform 4.11 起,只有 RHEL 8 提供 Ansible playbook。如果 RHEL 7 系统用作 OpenShift Container Platform 4.10 Ansible playbook 的主机,您必须将 Ansible 主机升级到 RHEL 8,或者在 RHEL 8 系统中创建新的 Ansible 主机,并从旧的 Ansible 主机复制清单。

    2. 在运行 Ansible playbook 的机器上,更新 Ansible 软件包:

      # yum swap ansible ansible-core
    3. 在运行 Ansible playbook 的机器上,更新所需的软件包,包括 openshift-ansible

      # yum update openshift-ansible openshift-clients
    4. 在每个 RHEL 计算节点上,更新所需的软件仓库:

      # subscription-manager repos --disable=rhocp-4.14-for-rhel-8-x86_64-rpms \
                                   --enable=rhocp-4.15-for-rhel-8-x86_64-rpms
  3. 更新 RHEL worker 机器:

    1. 检查 /<path>/inventory/hosts 中的 Ansible 清单文件并更新其内容,以便 RHEL 8 机器列在 [workers] 部分中,如下例所示:

      [all:vars]
      ansible_user=root
      #ansible_become=True
      
      openshift_kubeconfig_path="~/.kube/config"
      
      [workers]
      mycluster-rhel8-0.example.com
      mycluster-rhel8-1.example.com
      mycluster-rhel8-2.example.com
      mycluster-rhel8-3.example.com
    2. 进入 openshift-ansible 目录:

      $ cd /usr/share/ansible/openshift-ansible
    3. 运行 upgrade playbook:

      $ ansible-playbook -i /<path>/inventory/hosts playbooks/upgrade.yml 1
      1
      对于<path> ,指定您创建的Ansible库存文件的路径。
      注意

      upgrade playbook 仅升级 OpenShift Container Platform 软件包。它不会更新操作系统软件包。

  4. 更新完所有 worker 后,确认所有集群节点已更新至新版本:

    # oc get node

    输出示例

    NAME                        STATUS                        ROLES    AGE    VERSION
    mycluster-control-plane-0   Ready                         master   145m   v1.28.5
    mycluster-control-plane-1   Ready                         master   145m   v1.28.5
    mycluster-control-plane-2   Ready                         master   145m   v1.28.5
    mycluster-rhel8-0           Ready                         worker   98m    v1.28.5
    mycluster-rhel8-1           Ready                         worker   98m    v1.28.5
    mycluster-rhel8-2           Ready                         worker   98m    v1.28.5
    mycluster-rhel8-3           Ready                         worker   98m    v1.28.5

  5. 可选:更新 upgrade playbook 没有更新的操作系统软件包。要更新不在 4.15 中的软件包,请使用以下命令:

    # yum update
    注意

    如果您使用安装 4.15 时使用的相同 RPM 存储库,则不需要排除 RPM 软件包。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.