升级集群

本页概述了升级 Kubernetes 集群应遵循的步骤。

Kubernetes 项目建议及时升级到最新的补丁版本,并确保您正在运行受支持的 Kubernetes 次要版本。遵循此建议有助于确保您的安全。

升级集群的方式取决于您最初部署集群的方式以及后续的任何更改。

从高层次来说,您执行的步骤是

  • 升级 控制平面
  • 升级集群中的节点
  • 升级诸如 kubectl 之类的客户端
  • 根据新 Kubernetes 版本随附的 API 更改调整清单和其他资源

开始之前

您必须有一个现有的集群。本页是关于从 Kubernetes 1.31 升级到 Kubernetes 1.32。如果您的集群当前没有运行 Kubernetes 1.31,请查看您计划升级到的 Kubernetes 版本的文档。

升级方法

kubeadm

如果您的集群是使用 kubeadm 工具部署的,请参阅 升级 kubeadm 集群,获取有关如何升级集群的详细信息。

升级集群后,请记得 安装最新版本的 kubectl

手动部署

您应该按照以下顺序手动更新控制平面

  • etcd(所有实例)
  • kube-apiserver(所有控制平面主机)
  • kube-controller-manager
  • kube-scheduler
  • 云控制器管理器(如果您使用的话)

此时,您应该 安装最新版本的 kubectl

对于集群中的每个节点,排空该节点,然后将其替换为使用 1.32 kubelet 的新节点,或者升级该节点上的 kubelet 并将该节点恢复服务。

其他部署

请参阅您的集群部署工具的文档,了解建议的维护步骤。

升级后任务

切换集群的存储 API 版本

序列化到 etcd 中,用于集群内部表示的 Kubernetes 资源的对象,是使用特定版本的 API 写入的。

当受支持的 API 更改时,这些对象可能需要使用较新的 API 重写。如果未能执行此操作,最终会导致资源无法被 Kubernetes API 服务器解码或使用。

对于每个受影响的对象,使用最新的受支持 API 获取它,然后也使用最新的受支持 API 将其写回。

更新清单

升级到新的 Kubernetes 版本可以提供新的 API。

您可以使用 kubectl convert 命令在不同的 API 版本之间转换清单。例如

kubectl convert -f pod.yaml --output-version v1

kubectl 工具会将 pod.yaml 的内容替换为将 kind 设置为 Pod(不变),但修订了 apiVersion 的清单。

设备插件

如果您的集群正在运行设备插件,并且该节点需要升级到具有较新设备插件 API 版本的 Kubernetes 版本,则必须升级设备插件以支持这两个版本,然后才能升级该节点,以保证在升级期间设备分配继续成功完成。

有关更多详细信息,请参阅 API 兼容性Kubelet 设备管理器 API 版本

上次修改时间:2024 年 9 月 27 日上午 10:28 PST:修改了有关集群升级的建议 (e3c1c5b8b8)