-
如果有可用更新,请继续在当前通道中执行更新,直到无法再更新为止。
-
如果没有可用更新,请将**通道**更改为下一个次要版本的
stable-*
、eus-*
或fast-*
通道,然后更新到该通道中所需的版本。
您可以对 OpenShift Container Platform 集群执行次要版本和补丁更新。如果您的集群包含 Red Hat Enterprise Linux (RHEL) 机器,则必须采取额外步骤来更新这些机器。
在 OpenShift Container Platform 集群上使用 RHEL 计算机已被弃用,并将在未来版本中移除。 |
以具有 admin
权限的用户身份访问集群。请参阅 使用 RBAC 定义和应用权限。
拥有最新的 etcd 备份,以防更新失败并且必须将集群恢复到之前的状态。
您的 RHEL7 工作节点将被 RHEL8 或 RHCOS 工作节点替换。Red Hat 不支持对 RHEL 工作节点进行 RHEL7 到 RHEL8 的就地更新;必须使用干净的操作系统安装替换这些主机。
如果您的集群使用手动维护的凭据,请更新新版本的云提供商资源。有关更多信息(包括如何确定这是否是集群的要求),请参阅 准备更新具有手动维护凭据的集群。
如果您运行 Operator 或已使用 Pod 中断预算配置任何应用程序,则在更新过程中可能会遇到中断。如果在 PodDisruptionBudget
中将 minAvailable
设置为 1,则会清空节点以应用挂起的机器配置,这可能会阻止驱逐过程。如果重新引导多个节点,所有 Pod 都可能只在一个节点上运行,并且 PodDisruptionBudget
字段可以阻止节点清空。
如果可用更新,您可以从 Web 控制台更新集群。
您可以在客户门户的 勘误部分 中找到有关可用的 OpenShift Container Platform 安全公告和更新的信息。
以具有 cluster-admin
权限的用户身份访问 Web 控制台。
您可以访问 OpenShift Container Platform Web 控制台。
暂停所有 MachineHealthCheck
资源。
您已将之前通过 Operator Lifecycle Manager (OLM) 安装的所有 Operator 更新到与目标版本兼容的版本。更新 Operator 可确保它们在集群更新期间默认 OperatorHub 目录从当前次要版本切换到下一个版本时具有有效的更新路径。有关如何检查兼容性以及如何在必要时更新已安装的 Operator 的更多信息,请参阅“其他资源”部分中的“更新已安装的 Operator”。
您的机器配置池 (MCP) 正在运行并且未暂停。在更新过程中会跳过与已暂停 MCP 关联的节点。如果您正在执行金丝雀发布更新策略,则可以暂停 MCP。
您的 RHEL7 工作节点将被 RHEL8 或 RHCOS 工作节点替换。Red Hat 不支持对 RHEL 工作节点进行 RHEL7 到 RHEL8 的就地更新;必须使用干净的操作系统安装替换这些主机。
在 Web 控制台中,单击**管理** → **集群设置**,并查看**详细信息**选项卡的内容。
对于生产集群,请确保**通道**设置为要更新到的版本的正确通道,例如 stable-4.17
。
对于生产集群,您必须订阅 |
当您准备好转到下一个次要版本时,请选择与该次要版本对应的通道。越早声明更新通道,集群就越能有效地推荐更新路径到您的目标版本。集群可能需要一些时间来评估所有可用的更新选项,并提供最佳的更新建议供您选择。更新建议可能会随着时间的推移而改变,因为它们基于当时可用的更新选项。 如果您看不到到目标次要版本的更新路径,请继续将集群更新到当前版本的最新补丁版本,直到下一个次要版本在路径中可用。 |
如果**更新状态**不是**可用更新**,则无法更新集群。
**选择通道**指示集群正在运行或正在更新到的集群版本。
选择要更新到的版本,然后单击**保存**。
输入通道的**更新状态**将变为**正在更新至<产品版本>**,您可以通过观察操作员和节点的进度条来查看集群更新的进度。
如果您正在将集群更新到下一个次要版本(例如,从 4.10 版更新到 4.11 版),请在部署依赖于新功能的工作负载之前确认您的节点已更新。任何包含尚未更新的工作节点的池都将显示在**集群设置**页面上。 |
更新完成后且集群版本操作员刷新了可用的更新后,请检查当前通道中是否有更多可用更新。
如果有可用更新,请继续在当前通道中执行更新,直到无法再更新为止。
如果没有可用更新,请将**通道**更改为下一个次要版本的stable-*
、eus-*
或fast-*
通道,然后更新到该通道中所需的版本。
您可能需要执行几个中间更新才能达到所需的版本。
更新包含 Red Hat Enterprise Linux (RHEL) 工作机的集群时,这些工作机在更新过程中将暂时不可用。您必须针对每台进入集群 |
您可以使用挂钩在 OpenShift Container Platform 更新期间在 RHEL 计算机器上运行 Ansible 任务。
更新 OpenShift Container Platform 时,您可以使用挂钩在特定操作期间在 Red Hat Enterprise Linux (RHEL) 节点上运行自定义任务。挂钩允许您提供定义在特定更新任务之前或之后运行的任务的文件。在更新 OpenShift Container Platform 集群中的 RHEL 计算节点时,您可以使用挂钩来验证或修改自定义基础架构。
由于挂钩失败会导致操作失败,因此您必须设计幂等的挂钩,或者可以多次运行并提供相同的结果。
挂钩具有以下重要限制:- 挂钩没有定义或版本化的接口。它们可以使用内部openshift-ansible
变量,但这些变量可能会在将来的 OpenShift Container Platform 版本中被修改或删除。- 挂钩没有错误处理,因此挂钩中的错误会停止更新过程。如果出现错误,您必须解决问题,然后重新启动更新。
更新 Red Hat Enterprise Linux (RHEL) 计算机(也称为工作机)时,您需要在hosts
清单文件的all:vars
部分定义要使用的挂钩。
您可以访问用于添加 RHEL 计算机集群的机器。您必须访问定义 RHEL 机器的hosts
Ansible 清单文件。
设计挂钩后,创建一个 YAML 文件来定义它的 Ansible 任务。此文件必须是一组任务,不能是剧本,如下例所示
---
# 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"
修改hosts
Ansible 清单文件以指定挂钩文件。挂钩文件在[all:vars]
部分中作为参数值指定,如下所示
[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
为避免挂钩路径不明确,请使用绝对路径而不是相对路径进行定义。
更新 OpenShift Container Platform 集群中的 Red Hat Enterprise Linux (RHEL) 计算机时,可以使用以下挂钩。
挂钩名称 | 描述 |
---|---|
|
|
|
|
|
|
|
|
更新集群后,必须更新集群中的 Red Hat Enterprise Linux (RHEL) 计算机。
RHEL 计算机支持 Red Hat Enterprise Linux (RHEL) 8.6 及更高版本。 |
如果您使用 RHEL 作为操作系统,也可以将计算机更新到 OpenShift Container Platform 的另一个次要版本。执行次要版本更新时,无需从 RHEL 中排除任何 RPM 包。
无法将 RHEL 7 计算机更新到 RHEL 8。必须部署新的 RHEL 8 主机,并且应删除旧的 RHEL 7 主机。 |
您已更新集群。
由于 RHEL 机器需要集群生成的资产才能完成更新过程,因此必须先更新集群,然后再更新其中的 RHEL 工作机。 |
您可以访问用于将 RHEL 计算机添加到集群的本地机器。您必须访问定义 RHEL 机器的hosts
Ansible 清单文件和upgrade
剧本。
对于次要版本的更新,RPM 存储库使用与集群上运行的 OpenShift Container Platform 相同的版本。
停止并禁用主机上的 firewalld
# systemctl disable --now firewalld.service
默认情况下,使用“最小”安装选项的基本操作系统 RHEL 会启用 firewalld 服务。在主机上启用 firewalld 服务会阻止您访问工作机上的 OpenShift Container Platform 日志。如果您希望继续访问工作机上的 OpenShift Container Platform 日志,则以后不要启用 firewalld。 |
启用 OpenShift Container Platform 4.17 所需的存储库
在运行 Ansible 剧本的机器上,更新所需的存储库
# subscription-manager repos --disable=rhocp-4.16-for-rhel-8-x86_64-rpms \
--enable=rhocp-4.17-for-rhel-8-x86_64-rpms
从 OpenShift Container Platform 4.11 开始,仅为 RHEL 8 提供 Ansible 剧本。如果 RHEL 7 系统用作 OpenShift Container Platform 4.10 Ansible 剧本的主机,则必须将 Ansible 主机更新到 RHEL 8,或在 RHEL 8 系统上创建一个新的 Ansible 主机并将清单从旧的 Ansible 主机复制过来。 |
在运行 Ansible 剧本的机器上,更新 Ansible 包
# yum swap ansible ansible-core
在运行 Ansible 剧本的机器上,更新所需的包,包括openshift-ansible
# yum update openshift-ansible openshift-clients
在每个 RHEL 计算节点上,更新所需的存储库
# subscription-manager repos --disable=rhocp-4.16-for-rhel-8-x86_64-rpms \
--enable=rhocp-4.17-for-rhel-8-x86_64-rpms
更新 RHEL 工作节点机器
查看您的 Ansible inventory 文件(位于 /<path>/inventory/hosts
)并更新其内容,以便将 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
切换到 openshift-ansible
目录
$ cd /usr/share/ansible/openshift-ansible
运行 upgrade
playbook
$ ansible-playbook -i /<path>/inventory/hosts playbooks/upgrade.yml (1)
1 | 对于 <path> ,请指定您创建的 Ansible inventory 文件的路径。 |
|
更新所有工作节点后,确认所有集群节点都已更新到新版本
# oc get node
NAME STATUS ROLES AGE VERSION
mycluster-control-plane-0 Ready master 145m v1.30.3
mycluster-control-plane-1 Ready master 145m v1.30.3
mycluster-control-plane-2 Ready master 145m v1.30.3
mycluster-rhel8-0 Ready worker 98m v1.30.3
mycluster-rhel8-1 Ready worker 98m v1.30.3
mycluster-rhel8-2 Ready worker 98m v1.30.3
mycluster-rhel8-3 Ready worker 98m v1.30.3
可选:更新未由 upgrade
playbook 更新的操作系统包。要更新非 4.17 版本的包,请使用以下命令:
# yum update
如果您使用的是安装 4.17 时使用的相同 RPM 仓库,则无需排除 RPM 包。 |