升级集群
本页面概述了升级 Kubernetes 集群应遵循的步骤。
Kubernetes 项目建议及时升级到最新的补丁版本,并确保你运行的是受支持的 Kubernetes 次要版本。遵循此建议有助于你保持安全。
升级集群的方式取决于你最初部署集群的方式以及后续的任何更改。
总体而言,你执行的步骤包括
开始之前
你必须有一个现有的集群。本页面介绍的是从 Kubernetes 1.32 升级到 Kubernetes 1.33。如果你的集群当前并非运行 Kubernetes 1.32,请查阅你计划升级到的 Kubernetes 版本的文档。
升级方法
kubeadm
如果你的集群是使用 kubeadm
工具部署的,请参阅升级 kubeadm 集群以获取如何升级集群的详细信息。
升级集群后,记得安装最新版本的 kubectl
。
手动部署
注意
这些步骤未考虑第三方扩展,例如网络和存储插件。你应该按照以下顺序手动更新控制平面
- etcd(所有实例)
- kube-apiserver(所有控制平面主机)
- kube-controller-manager
- kube-scheduler
- 云控制器管理器(如果你使用)
此时,你应该安装最新版本的 kubectl
。
对于集群中的每个节点,请排空该节点,然后将其替换为使用 1.33 kubelet 的新节点,或者在该节点上升级 kubelet 并将节点重新投入服务。
注意
在升级 kubelet 之前排空节点可确保 Pod 被重新接纳并且容器被重新创建,这对于解决某些安全问题或其他重要 Bug 可能很有必要。其他部署
请参阅你的集群部署工具的文档,了解建议的维护设置步骤。
升级后任务
切换集群的存储 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 版本。