如何在Ubuntu上升级Kubernetes集群
在Ubuntu上升级Kubernetes集群(以kubeadm部署为例)
升级Kubernetes集群需遵循“前置检查→控制平面升级→工作节点升级→验证”的流程,确保业务连续性与版本兼容性。以下是详细步骤:
一、升级前准备
1. 备份集群数据
升级前必须备份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/
),并存放在安全位置。
2. 检查版本兼容性
- 确认当前版本:通过
kubectl version --short
获取集群版本(如v1.24.6
)。 - 确认升级路径:Kubernetes不支持跨多个次要版本跳跃升级(如
v1.24→v1.26
),必须按相邻次要版本递进(如v1.24→v1.25→v1.26
)。 - 检查组件兼容性:参考Kubernetes官方升级文档,确认容器运行时(如containerd≥1.6,对应K8s 1.25+)、网络插件(如Calico≥3.24,对应K8s 1.25+)、Ingress控制器(如Nginx Ingress≥1.5,对应K8s 1.25+)与目标版本兼容。
3. 检查集群健康状态
确保集群无故障,避免升级失败:
- 控制平面组件:
kubectl get pods -n kube-system -l component=kube-apiserver
(需Running
状态)。 - 节点状态:
kubectl get nodes
(所有节点需为Ready
)。 - Pod状态:
kubectl get pods --all-namespaces --field-selector=status.phase!=Running
(无CrashLoopBackOff
或Error
状态的Pod)。
二、升级控制平面节点(Master节点)
控制平面是集群核心,需优先升级。假设当前版本为v1.24.6
,目标版本为v1.25.3
:
1. 升级kubeadm工具
kubeadm是升级控制平面的关键工具,需先升级到目标版本:
sudo apt update
sudo apt-mark unhold kubeadm # 解除版本锁定(若之前锁定)
sudo apt install -y kubeadm=1.25.3-00 # 安装目标版本
sudo apt-mark hold kubeadm # 锁定版本,防止误升级
2. 检查升级计划
通过kubeadm upgrade plan
查看可升级版本及所需操作:
sudo kubeadm upgrade plan
输出会显示当前版本、可升级的目标版本(如v1.25.3
)及需要升级的组件(如kube-apiserver
、kube-controller-manager
)。
3. 执行升级
根据kubeadm upgrade plan
的输出,执行升级命令(替换为目标版本):
sudo kubeadm upgrade apply v1.25.3
- 输入
yes
确认升级。 - 命令会自动升级控制平面组件(API Server、Controller Manager、Scheduler)及etcd(若使用kubeadm管理的etcd)。
4. 升级kubelet配置
升级控制平面后,需更新kubelet配置以适配新版本:
sudo kubeadm upgrade node config --kubelet-version $(kubelet --version | cut -d ' ' -f 2)
sudo systemctl restart kubelet # 重启kubelet使配置生效
三、升级工作节点(Worker节点)
工作节点负责运行Pod,需在控制平面升级完成后逐个升级:
1. 升级kubeadm
在工作节点上升级kubeadm到目标版本(与控制平面一致):
sudo apt update
sudo apt-mark unhold kubeadm
sudo apt install -y kubeadm=1.25.3-00
sudo apt-mark hold kubeadm
2. 升级节点
使用kubeadm upgrade node
命令将节点升级到目标版本:
sudo kubeadm upgrade node
- 该命令会自动下载新版本镜像并替换旧组件。
3. 升级kubelet
升级节点上的kubelet到目标版本:
sudo apt install -y kubelet=1.25.3-00
sudo systemctl daemon-reload
sudo systemctl restart kubelet
4. 移除升级污点(可选)
旧版本集群升级时,节点会自动添加node.kubernetes.io/upgrade:NoSchedule
污点,阻止Pod调度。升级完成后可移除:
kubectl taint nodes <
node-name>
node.kubernetes.io/upgrade:NoSchedule-
(<
node-name>
为节点名称,可通过kubectl get nodes
获取)
四、升级后验证
升级完成后,需验证集群状态是否正常:
1. 检查节点状态
kubectl get nodes
所有节点应显示为Ready
状态。
2. 检查Pod状态
kubectl get pods --all-namespaces
所有Pod应处于Running
或Completed
状态(无Error
或CrashLoopBackOff
)。
3. 验证应用功能
访问集群内的应用(如通过Ingress或NodePort),确认业务正常运行。
注意事项
- 版本递进:必须遵循相邻次要版本升级,禁止跳跃升级。
- 业务低峰期操作:升级过程中API Server会短暂中断,建议在业务低峰期进行。
- 高危操作规避:升级前停止对集群的修改(如修改节点配置、调整Ingress规则)。
- 回滚准备:若升级失败,可通过
kubeadm upgrade revert
回滚到上一个版本,或使用etcd快照恢复数据。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上升级Kubernetes集群
本文地址: https://pptw.com/jishu/731381.html