升级集群

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

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

升级集群的方式取决于你最初部署集群的方法以及后续所做的任何变更。

总的来说,你需要执行以下步骤:

  • 升级 控制平面
  • 升级集群中的节点
  • 升级客户端(例如 kubectl
  • 根据新 Kubernetes 版本伴随的 API 变更,调整清单和其他资源

开始之前

你必须拥有一个现有的集群。本页面介绍如何从 Kubernetes 1.35 升级到 Kubernetes 1.36。如果你的集群当前运行的不是 Kubernetes 1.35,请查看你计划升级到的那个 Kubernetes 版本的文档。

说明

在 Linux 节点上,kubelet 默认仅支持 cgroups v2。对于 Kubernetes 1.36,FailCgroupV1 kubelet 配置选项默认为 true

要了解更多信息,请参阅 Kubernetes cgroup v1 弃用文档

升级方法

kubeadm

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

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

手动部署

注意

这些步骤未涵盖网络插件和存储插件等第三方扩展。

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

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

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

对于集群中的每个节点,请先对该节点执行 驱逐(drain) 操作,然后将其替换为使用 1.36 kubelet 的新节点,或者升级该节点上的 kubelet 并使该节点恢复服务。

注意

在升级 kubelet 之前驱逐节点可确保 Pod 被重新准入且容器被重新创建,这对于解决某些安全问题或其他重要 Bug 可能是必要的。

其他部署

请参考你的集群部署工具文档,了解推荐的维护设置步骤。

升级后任务

切换集群的存储 API 版本

对于集群中处于活跃状态的 Kubernetes 资源,其序列化存入 etcd 以表示集群内部状态的对象,是使用特定的 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 的清单。

设备插件

如果你的集群正在运行设备插件(device plugins),且节点需要升级到具有较新设备插件 API 版本的 Kubernetes 发行版,则必须在节点升级之前升级设备插件以支持这两个版本,从而保证在升级过程中设备分配能够持续成功完成。

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


最后修改时间:2025年12月8日 下午 6:53 PST:修订关于 cgroup v1 弃用的说明 (b34a5979fd)