Kubernetes 集群版本升级是为了获得最新的功能、增强的安全性和性能改进。然而,升级过程需要谨慎进行,特别是在生产环境中。通常,Kubernetes 集群的版本升级应遵循逐步升级的策略,不建议直接跳过多个版本。
Kubernetes 版本升级的常见流程:
- 升级顺序:先升级 控制平面节点(Master Nodes),然后升级 工作节点(Worker Nodes)。
- 遵循版本兼容性:Kubernetes 支持小版本的逐步升级,例如从
v1.23.x
升级到v1.24.x
,不建议直接从v1.22
跳到v1.24
。 - 备份:在升级之前,必须备份 etcd 数据库以及其他必要的集群配置和数据,以防升级失败时可以恢复。
升级流程详细步骤:
1. 查看当前集群版本
首先,检查集群和节点的当前版本:
kubectl version --short
输出:
Client Version: v1.23.0
Server Version: v1.23.0
2. 检查最新可用版本
在开始升级之前,确认你将升级到的目标版本。可以通过 Kubernetes 官方文档查看最新版本,或者使用以下命令检查可用版本:
kubectl cluster-info
或者通过 Kubernetes 发布页面查看最新版本:https://github.com/kubernetes/kubernetes/releases
3. 备份集群数据
备份 etcd 是 Kubernetes 升级过程中非常重要的步骤,特别是在升级控制平面时。可以使用以下命令来备份 etcd 数据:
ETCDCTL_API=3 etcdctl \--endpoints=https://<etcd-endpoint>:2379 \--cacert=<path-to-cafile> --cert=<path-to-certfile> --key=<path-to-keyfile> \snapshot save /path/to/backup.db
4. 升级控制平面节点(Master Nodes)
Kubernetes 控制平面节点管理集群的状态,所有的组件(如 API Server、Controller Manager、Scheduler 等)都在这些节点上运行。升级这些组件是集群升级的关键步骤。
4.1 使用 kubeadm 升级
如果你使用 kubeadm
部署集群,升级步骤如下:
-
更新 kubeadm 工具:
在控制平面节点上,升级 kubeadm 工具到目标版本。sudo apt-get update && sudo apt-get install -y kubeadm=1.24.0-00
-
查看升级计划:
查看可升级的版本和需要升级的组件。kubeadm upgrade plan
-
执行控制平面升级:
执行升级操作,该命令会自动更新控制平面的所有组件。sudo kubeadm upgrade apply v1.24.0
-
更新 kubelet 和 kubectl:
在控制平面节点上更新kubelet
和kubectl
工具到目标版本。sudo apt-get install -y kubelet=1.24.0-00 kubectl=1.24.0-00 sudo systemctl daemon-reload sudo systemctl restart kubelet
4.2 使用其他工具(如 kops、rke、kubespray)升级(国内推荐)
如果你的集群是通过其他工具(如 kops
、rke
或 kubespray
)创建的,需参考对应工具的文档进行升级,以下是一些链接:
- kops 升级文档
- RKE 升级文档
- Kubespray 升级文档
5. 升级工作节点(Worker Nodes)
在控制平面升级完成并确认集群正常工作后,可以开始升级工作节点。
5.1 将工作节点标记为不可调度
使用 cordon
命令将工作节点标记为不可调度,避免新的 Pod 被调度到该节点:
kubectl cordon <node-name>
5.2 驱逐节点上的 Pod
使用 drain
命令将节点上正在运行的 Pod 驱逐到其他节点:
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
5.3 升级 kubeadm、kubelet 和 kubectl
在工作节点上,按照与控制平面相同的方式升级 kubeadm
、kubelet
和 kubectl
。
-
升级 kubeadm 工具:
sudo apt-get update && sudo apt-get install -y kubeadm=1.24.0-00
-
执行节点升级:
使用kubeadm
升级该节点。sudo kubeadm upgrade node
-
升级 kubelet 和 kubectl:
sudo apt-get install -y kubelet=1.24.0-00 kubectl=1.24.0-00 sudo systemctl daemon-reload sudo systemctl restart kubelet
5.4 恢复节点调度
升级完成后,将节点重新标记为可调度:
kubectl uncordon <node-name>
5.5 确认节点状态
确保节点升级成功并处于 Ready
状态:
kubectl get nodes
6. 验证升级成功
升级完成后,验证集群是否正常工作,所有组件和节点是否处于健康状态:
kubectl get nodes
kubectl get pods -n kube-system
检查 kube-system
命名空间中的核心组件(如 kube-apiserver
、kube-scheduler
等)的状态。
注意事项:
- 滚动升级:建议逐个节点进行升级,特别是在生产环境中,避免影响整个集群的可用性。
- 备份和恢复计划:在升级前做好备份,确保能够在必要时回滚到稳定的版本。
- 版本兼容性:Kubernetes 版本遵循严格的升级路径,不建议跨版本跳跃式升级,应按照每次升级一个次版本的方式进行。
通过这些步骤,你可以安全地升级 Kubernetes 集群到最新版本,并确保集群的高可用性和稳定性。