Debian系统升级Kubernetes集群详细步骤
备份关键数据
备份集群配置(/etc/kubernetes/目录)和etcd数据(etcd是Kubernetes的核心存储组件),避免升级失败导致数据丢失。etcd备份命令示例:
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /data/etcd/etcd_bak.db
检查集群状态
使用kubectl确认所有节点状态为Ready,所有Pod处于Running状态,且无未完成的作业或任务:
kubectl get nodes
kubectl get pods -A
更新Debian系统包
确保系统包是最新的,避免依赖冲突:
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
确认升级兼容性
查阅Kubernetes官方发布记录,确保目标版本与当前集群版本兼容(仅支持逐级升级,如v1.27→v1.28→v1.29,禁止跨大版本跳跃)。
升级kubeadm工具
下载目标版本的kubeadm二进制文件(以v1.29.10为例),替换旧版本:
wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubeadm
chmod +x kubeadm
sudo mv kubeadm /usr/local/bin/
检查升级计划
使用kubeadm upgrade plan查看可升级的版本及需要更新的组件,确认无阻碍升级的问题:
sudo kubeadm upgrade plan
执行控制平面升级
运行kubeadm upgrade apply命令升级控制平面,完成后会自动更新API Server、Controller Manager等核心组件:
sudo kubeadm upgrade apply v1.29.10
升级kubelet和kubectl
下载目标版本的kubelet和kubectl,替换旧版本并重启kubelet服务:
wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubelet
wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubectl
chmod +x kubelet kubectl
sudo mv kubelet /usr/local/bin/
sudo mv kubectl /usr/local/bin/
sudo systemctl daemon-reload
sudo systemctl restart kubelet
解除Master节点保护
升级完成后,将Master节点标记为可调度,恢复Pod调度:
kubectl uncordon k8s-master
逐个腾空节点
每次仅升级一个工作节点,避免集群资源不足。使用kubectl drain驱逐节点上的Pod(--ignore-daemonsets忽略守护进程集,--delete-emptydir-data删除临时数据):
kubectl drain k8s-node1 --ignore-daemonsets --delete-emptydir-data
升级kubeadm、kubelet和kubectl
在工作节点上重复控制平面的升级步骤,下载并安装目标版本的kubeadm、kubelet、kubectl,重启kubelet服务:
wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubeadm
wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubelet
wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubectl
chmod +x kubeadm kubelet kubectl
sudo mv kubeadm kubelet kubectl /usr/local/bin/
sudo systemctl daemon-reload
sudo systemctl restart kubelet
执行节点升级
使用kubeadm upgrade node命令将节点升级到目标版本,同步控制平面的配置:
sudo kubeadm upgrade node
解除节点保护
升级完成后,将节点标记为可调度,恢复Pod调度:
kubectl uncordon k8s-node1
验证节点状态
确认节点状态为Ready,表示升级成功:
kubectl get nodes
检查集群组件状态
确认kube-system命名空间中的核心组件(如kube-apiserver、kube-controller-manager、kube-scheduler)均处于Running状态:
kubectl get pods -n kube-system
验证功能正常性
部署一个测试Pod(如nginx),检查是否能正常调度和运行:
kubectl run nginx-test --image=nginx --restart=Never
kubectl get pod nginx-test
kubeadm upgrade revert命令回滚控制平面,或重新安装旧版本组件恢复节点。