本页面概述了升级 Kubernetes 集群应遵循的步骤。
Kubernetes 项目建议及时升级到最新的补丁版本,并确保您运行受支持的 Kubernetes 次要版本。遵循此建议有助于您保持安全。
升级集群的方式取决于你最初部署集群的方法以及后续所做的任何变更。
总的来说,你需要执行以下步骤:
你必须拥有一个现有的集群。本页面介绍如何从 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 集群,获取关于如何升级集群的详细信息。
升级集群后,请记得安装最新版本的 kubectl。
你应该按照以下顺序手动更新控制平面:
此时,你应该安装最新版本的 kubectl。
对于集群中的每个节点,请先对该节点执行 驱逐(drain) 操作,然后将其替换为使用 1.36 kubelet 的新节点,或者升级该节点上的 kubelet 并使该节点恢复服务。
请参考你的集群部署工具文档,了解推荐的维护设置步骤。
对于集群中处于活跃状态的 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 版本。