如何在Ubuntu上升级Kubernetes版本(基于kubeadm部署)
升级Kubernetes版本需遵循**“备份→检查兼容性→升级控制平面→升级工作节点→验证”**的流程,以下是详细步骤及注意事项:
一、升级前准备
1. 备份集群数据
升级前必须备份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/
2. 检查版本兼容性
- 确认当前Kubernetes版本:
kubectl version --short(重点关注Server Version)。 - 查阅Kubernetes官方升级路径(如1.27→1.28→1.29),禁止跨多个次版本升级(例如不能从1.27直接跳到1.29)。
- 检查第三方组件(如Calico、Flannel)是否支持目标版本,避免兼容性问题。
3. 更新系统及软件包
sudo apt update && sudo apt upgrade -y
二、升级控制平面节点(Master Node)
控制平面节点升级需逐个进行(优先升级主节点),步骤如下:
1. 升级kubeadm工具
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
2. 检查升级计划
运行kubeadm upgrade plan检查集群是否可升级,并获取目标版本:
sudo kubeadm upgrade plan
输出会显示可升级的目标版本(如v1.28.3)及需要升级的组件(如kube-apiserver、kube-controller-manager)。
3. 执行升级
根据kubeadm upgrade plan的输出,执行升级命令(替换为目标版本):
sudo kubeadm upgrade apply v1.28.3
- 命令会自动续约etcd证书(无需手动操作)。
- 升级完成后,会提示“SUCCESS!”,表示控制平面升级成功。
4. 升级kubelet和kubectl
# 升级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
三、升级工作节点(Worker Node)
工作节点升级需逐个进行(避免同时升级多个节点导致集群资源不足),步骤如下:
1. 腾空节点(Drain)
将节点标记为不可调度,并驱逐所有Pod(确保业务无损):
# 替换为实际节点名称(如work1)
kubectl drain --ignore-daemonsets --delete-emptydir-data
2. 升级kubeadm、kubelet和kubectl
# 升级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
3. 取消腾空(Uncordon)
升级完成后,将节点标记为可调度:
kubectl uncordon
4. 验证节点状态
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能正常访问。
五、注意事项
- 禁止跨版本升级:必须按版本顺序升级(如1.27→1.28→1.29),避免版本不兼容。
- 内核版本要求:确保Ubuntu内核版本≥4.18(可通过
uname -r查看),否则可能无法运行新版本Kubernetes。 - 网络插件升级:部分网络插件(如Calico)需单独升级,参考插件官方文档操作。
- 监控与回滚:升级后密切监控集群状态(如
kubectl top nodes、kubectl logs),若出现问题,可通过kubeadm upgrade revert回滚到上一版本。
通过以上步骤,即可完成Ubuntu上Kubernetes版本的升级。建议在测试环境验证流程后再应用于生产环境,确保业务稳定性。
以上就是关于“如何升级Ubuntu上的Kubernetes版本”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm