如何在Ubuntu上升级Kubernetes
升级Ubuntu上的Kubernetes集群需遵循备份先行、版本检查、工具更新、控制平面升级、工作节点升级、状态验证的流程,确保集群稳定性与兼容性。
升级前必须备份etcd数据(集群核心状态存储),防止数据丢失。使用以下命令创建etcd快照:
ETCDCTL_API=3 etcdctl snapshot save /path/to/backup/snapshot.db \
--endpoints https://<etcd-endpoint>:2379 \
--cert /etc/kubernetes/pki/etcd/server.crt \
--key /etc/kubernetes/pki/etcd/server.key \
--cacert /etc/kubernetes/pki/etcd/ca.crt
替换<etcd-endpoint>为etcd服务地址(单节点集群可直接用localhost)。
kubectl version --short
kubeadm是升级集群的核心工具,需先将其升级到目标版本:
sudo apt-get update
sudo apt-get install -y kubeadm=<target-version>-00 # 替换<target-version>为目标版本(如1.28.0)
升级后验证kubeadm版本:
kubeadm version
控制平面节点(Master)升级需依次执行计划检查、应用升级、配置更新:
使用kubeadm upgrade plan检查可升级版本及依赖项(如容器运行时、CNI插件):
sudo kubeadm upgrade plan
输出会显示当前版本、推荐升级版本及是否需要更新kubelet/kubectl。
根据计划结果,执行升级命令(替换<target-version>为目标版本):
sudo kubeadm upgrade apply <target-version>
升级过程中,kubeadm会自动处理控制平面组件(kube-apiserver、kube-controller-manager、kube-scheduler)的二进制文件更新。
升级完成后,更新节点配置以适配新版本:
sudo kubeadm upgrade node config --kubelet-version $(kubelet --version | cut -d ' ' -f 2)
sudo systemctl restart kubelet # 重启kubelet使配置生效
工作节点(Worker)需逐个升级,避免集群服务中断:
在工作节点上,升级kubelet和kubectl到目标版本:
sudo apt-get update
sudo apt-get install -y kubelet=<target-version>-00 kubectl=<target-version>-00
sudo apt-get autoremove && sudo apt-get clean # 清理旧版本包
在工作节点上执行kubeadm upgrade node,将节点升级到目标版本:
sudo kubeadm upgrade node
升级完成后,重启kubelet服务:
sudo systemctl restart kubelet
升级完成后,检查集群状态确保所有组件正常:
kubectl get nodes # 确认所有节点状态为"Ready"
kubectl get pods --all-namespaces # 确认所有Pod状态为"Running"
若节点状态未及时更新,可等待几分钟或手动删除节点(kubectl delete node <node-name>)后重新加入集群。
kubeadm upgrade apply --force回滚到上一版本,或通过etcd快照恢复数据。