升级集群
此页面概述了升级 Kubernetes 集群时应遵循的步骤。
Kubernetes 项目建议及时升级到最新的补丁版本,并确保您运行受支持的 Kubernetes 次要版本。遵循此建议有助于您保持安全。
集群的升级方式取决于您最初部署它的方式以及任何后续的更改。
总的来说,您需要执行的步骤是:
开始之前
您必须拥有一个现有的集群。此页面介绍的是从 Kubernetes 1.34 升级到 Kubernetes 1.35 的内容。如果您的集群当前未运行 Kubernetes 1.34,请查阅您计划升级到的 Kubernetes 版本的文档。
说明
在 Linux 节点上,kubelet 默认仅支持 cgroups v2。对于 Kubernetes 1.35,kubelet 配置选项 FailCgroupV1 默认设置为 true。
要了解更多信息,请参阅 Kubernetes cgroup v1 弃用文档。
升级方法
kubeadm
如果您的集群使用 kubeadm 工具部署,请参阅 升级 kubeadm 集群,以获取有关如何升级集群的详细信息。
升级集群后,请记住 安装最新版本的 kubectl。
手动部署
注意
这些步骤不包括第三方扩展,例如网络和存储插件。您应按照以下顺序手动更新控制平面:
- etcd(所有实例)
- kube-apiserver(所有控制平面主机)
- kube-controller-manager
- kube-scheduler
- 云控制器管理器(如果您使用它)
此时,您应该 安装最新版本的 kubectl。
对于集群中的每个节点,排空该节点,然后替换为使用 1.35 kubelet 的新节点,或升级该节点上的 kubelet 并将该节点重新投入使用。
注意
在升级 kubelet 之前排空节点可确保 Pod 被重新分配并容器被重新创建,这对于解决某些安全问题或其他重要错误可能是有必要的。其他部署
请参阅您的集群部署工具的文档,以了解建议的维护设置步骤。
升级后任务
切换集群的存储 API 版本
集群中活动的 Kubernetes 资源的集群内部表示形式以特定版本的 API 序列化到 etcd 中。
当受支持的 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 版本。