如何在Ubuntu上升级Kubernetes版本(基于kubeadm部署)
升级Kubernetes版本需遵循**“备份→检查兼容性→升级控制平面→升级工作节点→验证”**的流程,以下是详细步骤及注意事项:
升级前必须备份etcd数据(集群核心状态存储)和配置文件(避免数据丢失):
# 备份etcd数据(需替换为实际etcd端点、证书路径)
ETCDCTL_API=3 etcdctl snapshot save /opt/etcd_backup/snapshot.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
# 备份/etc/kubernetes目录(包含kube-apiserver、kube-controller-manager等配置)
sudo cp -r /etc/kubernetes /opt/kubernetes_backup/
kubectl version --short(重点关注Server Version)。sudo apt update && sudo apt upgrade -y
控制平面节点升级需逐个进行(优先升级主节点),步骤如下:
kubeadm是升级的核心工具,需先升级到目标版本:
# 查找可用的kubeadm版本(以1.28为例)
apt-cache madison kubeadm | grep 1.28
# 安装指定版本的kubeadm(替换为实际版本号,如1.28.3-00)
sudo apt-mark unhold kubeadm && \
sudo apt-get install -y kubeadm=1.28.3-00 && \
sudo apt-mark hold kubeadm
# 验证kubeadm版本
kubeadm version
运行kubeadm upgrade plan检查集群是否可升级,并获取目标版本:
sudo kubeadm upgrade plan
输出会显示可升级的目标版本(如v1.28.3)及需要升级的组件(如kube-apiserver、kube-controller-manager)。
根据kubeadm upgrade plan的输出,执行升级命令(替换为目标版本):
sudo kubeadm upgrade apply v1.28.3
# 升级kubelet和kubectl(替换为与kubeadm一致的版本号)
sudo apt-mark unhold kubelet kubectl && \
sudo apt-get install -y kubelet=1.28.3-00 kubectl=1.28.3-00 && \
sudo apt-mark hold kubelet kubectl
# 重启kubelet服务
sudo systemctl daemon-reload
sudo systemctl restart kubelet
工作节点升级需逐个进行(避免同时升级多个节点导致集群资源不足),步骤如下:
将节点标记为不可调度,并驱逐所有Pod(确保业务无损):
# 替换为实际节点名称(如work1)
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
# 升级kubeadm(可选,若需统一版本)
sudo apt-mark unhold kubeadm && \
sudo apt-get install -y kubeadm=1.28.3-00 && \
sudo apt-mark hold kubeadm
# 升级kubelet和kubectl
sudo apt-mark unhold kubelet kubectl && \
sudo apt-get install -y kubelet=1.28.3-00 kubectl=1.28.3-00 && \
sudo apt-mark hold kubelet kubectl
# 重启kubelet服务
sudo systemctl daemon-reload
sudo systemctl restart kubelet
升级完成后,将节点标记为可调度:
kubectl uncordon <node-name>
kubectl get nodes -o wide
确认节点状态为Ready,且VERSION列显示为目标版本。
检查集群状态:
kubectl get nodes # 所有节点应为Ready状态
kubectl get pods -A # 所有Pod应为Running状态
测试业务功能: 部署一个简单应用(如Nginx),验证集群是否能正常调度和管理Pod:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx
访问NodePort对应的IP,确认Nginx能正常访问。
uname -r查看),否则可能无法运行新版本Kubernetes。kubectl top nodes、kubectl logs),若出现问题,可通过kubeadm upgrade revert回滚到上一版本。通过以上步骤,即可完成Ubuntu上Kubernetes版本的升级。建议在测试环境验证流程后再应用于生产环境,确保业务稳定性。