自动升级
#
概述你可以使用 Rancher 的 system-upgrade-controller 来管理 rke2 集群的升级。这是一种 Kubernetes 原生的集群升级方法。它利用自定义资源定义(CRD)、计划
和控制器,根据配置的计划来安排升级。
一个计划定义了升级策略和要求。本文档将提供适合升级 rke2 集群的默认计划。对于更高级的计划配置选项,请查阅CRD。
控制器通过监控计划和选择节点来运行升级job来安排升级。一个计划通过一个标签选择器定义哪些节点应该被升级。当一个 job 成功运行完成后,控制器将对运行该 job 的节点进行相应的标记。
注意:
启动的升级 job 必须具有高权限。它配置如下:
- 主机
IPC
、NET
和PID
命名空间 CAP_SYS_BOOT
能力- 主机根目录安装在
/host
,有读写权限 :::
关于 system-upgrade-controller 的设计和架构或其与 rke2 集成的更多细节,请参见以下 Git 仓库。
要以这种方式自动升级,你必须:
- 在你的集群中安装 system-upgrade-controller
- 配置计划
#
安装 system-upgrade-controllersystem-upgrade-controller 可以通过 deployment 的方式安装到你的集群中。该 deployment 需要一个 service-account、clusterRoleBinding 和 configmap。要安装这些组件,请运行以下命令:
可以通过前面提到的 configmap 来配置和自定义控制器,但必须重新部署控制器才能应用这些变化。
#
配置计划建议你至少创建两个计划:一个用于升级 server(master/control-plane)节点的计划,一个用于升级 agent(worker)节点的计划。根据需要,你可以创建额外的计划来控制各节点的升级。下面的两个计划例子将把你的集群升级到 rke2 v1.23.1+rke2r2。一旦计划被创建,控制器将接收它们并开始升级你的集群。
关于这些计划,有几件重要的事情需要指出。
计划必须在部署控制器的同一命名空间中创建。
concurrency
字段表明有多少节点可以同时被升级。server-plan 通过指定一个标签选择器,选择具有
node-role.kubernetes.io/control-plane
标签的节点(node-role.kubernetes.io/master
适用于 1.19 或更早的版本),来锁定 server 节点。agent-plan 通过指定一个标签选择器,选择没有这个标签的节点,来锁定 agent 节点。可以选择包括额外的标签,就像上面的例子,它要求存在标签 "rke2-upgrade",并且不具有 "disabled" 或 "false" 的值。agent 计划中的
prepare
步骤将导致该计划的升级作业在执行前等待 server 计划的完成。两个计划的
version
字段都设置为 v1.23.1+rke2r2。另外,你可以省略version
字段,将channel
字段设置为一个 URL,该 URL 可解析为 rke2 的一个版本。这将导致控制器监控该 URL,并在它解析到新版本时升级集群。这与release channels配合得很好。因此,你可以用以下 channels 配置你的计划,以确保你的集群总是自动升级到最新的 rke2 稳定版本。
如前所述,一旦控制器检测到计划被创建,升级就会开始。更新计划将导致控制器重新评估计划,并决定是否需要再次升级。
你可以通过 kubectl 查看计划和 job 来监控升级的进度。