在Ubuntu上升级Kubernetes集群(以kubeadm部署为例)
升级Kubernetes集群需遵循“前置检查→控制平面升级→工作节点升级→验证”的流程,确保业务连续性与版本兼容性。以下是详细步骤:
升级前必须备份etcd数据(集群状态核心存储),防止数据丢失。使用etcdctl命令创建快照:
ETCDCTL_API=3 etcdctl snapshot save /opt/kubernetes/backup/etcd_snapshot_$(date +%F).db \
--endpoints=https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt
确认快照文件生成(ls /opt/kubernetes/backup/),并存放在安全位置。
kubectl version --short获取集群版本(如v1.24.6)。v1.24→v1.26),必须按相邻次要版本递进(如v1.24→v1.25→v1.26)。确保集群无故障,避免升级失败:
kubectl get pods -n kube-system -l component=kube-apiserver(需Running状态)。kubectl get nodes(所有节点需为Ready)。kubectl get pods --all-namespaces --field-selector=status.phase!=Running(无CrashLoopBackOff或Error状态的Pod)。控制平面是集群核心,需优先升级。假设当前版本为v1.24.6,目标版本为v1.25.3:
kubeadm是升级控制平面的关键工具,需先升级到目标版本:
sudo apt update
sudo apt-mark unhold kubeadm # 解除版本锁定(若之前锁定)
sudo apt install -y kubeadm=1.25.3-00 # 安装目标版本
sudo apt-mark hold kubeadm # 锁定版本,防止误升级
通过kubeadm upgrade plan查看可升级版本及所需操作:
sudo kubeadm upgrade plan
输出会显示当前版本、可升级的目标版本(如v1.25.3)及需要升级的组件(如kube-apiserver、kube-controller-manager)。
根据kubeadm upgrade plan的输出,执行升级命令(替换为目标版本):
sudo kubeadm upgrade apply v1.25.3
yes确认升级。升级控制平面后,需更新kubelet配置以适配新版本:
sudo kubeadm upgrade node config --kubelet-version $(kubelet --version | cut -d ' ' -f 2)
sudo systemctl restart kubelet # 重启kubelet使配置生效
工作节点负责运行Pod,需在控制平面升级完成后逐个升级:
在工作节点上升级kubeadm到目标版本(与控制平面一致):
sudo apt update
sudo apt-mark unhold kubeadm
sudo apt install -y kubeadm=1.25.3-00
sudo apt-mark hold kubeadm
使用kubeadm upgrade node命令将节点升级到目标版本:
sudo kubeadm upgrade node
升级节点上的kubelet到目标版本:
sudo apt install -y kubelet=1.25.3-00
sudo systemctl daemon-reload
sudo systemctl restart kubelet
旧版本集群升级时,节点会自动添加node.kubernetes.io/upgrade:NoSchedule污点,阻止Pod调度。升级完成后可移除:
kubectl taint nodes <node-name> node.kubernetes.io/upgrade:NoSchedule-
(<node-name>为节点名称,可通过kubectl get nodes获取)
升级完成后,需验证集群状态是否正常:
kubectl get nodes
所有节点应显示为Ready状态。
kubectl get pods --all-namespaces
所有Pod应处于Running或Completed状态(无Error或CrashLoopBackOff)。
访问集群内的应用(如通过Ingress或NodePort),确认业务正常运行。
kubeadm upgrade revert回滚到上一个版本,或使用etcd快照恢复数据。