如何在 Ubuntu 上升级 Kubernetes
导读:Ubuntu 上升级 Kubernetes 的标准流程(kubeadm) 一 升级前准备 备份与快照:对etcd、重要PV/数据库、集群配置与清单进行备份;必要时对节点做快照,便于回滚。 版本规划与兼容性检查: 查看当前版本:kubec...
Ubuntu 上升级 Kubernetes 的标准流程(kubeadm)
一 升级前准备
- 备份与快照:对etcd、重要PV/数据库、集群配置与清单进行备份;必要时对节点做快照,便于回滚。
- 版本规划与兼容性检查:
- 查看当前版本:
kubectl version --short;检查客户端与服务端是否匹配。 - 遵循 Kubernetes 版本倾斜策略:kubelet ≤ apiserver(最多低 2 个小版本),kubectl 与 apiserver 相差不超过 1 个小版本,controller-manager/scheduler 不能高于 apiserver。
- 升级顺序:先控制平面,后工作节点;多控制面需逐个升级并维持 HA。
- 查看当前版本:
- 维护窗口与流量治理:设置维护窗口,通过Service 的 externalTrafficPolicy=Local或拓扑感知路由减少升级抖动;准备回滚预案。
- 容器运行时:自 v1.24 起内置 dockershim 移除,需使用 containerd(或 CRI-O);如使用 containerd,建议版本 ≥1.6。
- 节点维护准备:
- 标记不可调度并驱逐:
kubectl drain < node> --ignore-daemonsets --delete-emptydir-data --force - 维护完成后恢复:
kubectl uncordon < node>
- 标记不可调度并驱逐:
- 软件源与版本锁定:
- 建议将 kubeadm/kubelet/kubectl 置于版本锁定(hold),升级时先
unhold再安装,完成后hold,避免被系统自动升级波及。
- 建议将 kubeadm/kubelet/kubectl 置于版本锁定(hold),升级时先
二 控制平面升级步骤
- 选择一个控制面节点,确保存在 /etc/kubernetes/admin.conf。
- 升级 kubeadm(示例目标版本:v1.29.2):
sudo apt-mark unhold kubeadmsudo apt-get update & & sudo apt-get install -y kubeadm='1.29.2-1.1'sudo apt-mark hold kubeadm- 验证:
kubeadm version
- 预检升级计划:
sudo kubeadm upgrade plan(如跨小版本,会提示组件与镜像信息) - 执行升级(按提示选择版本;etcd 可按需单独升级):
- 单控制面:
sudo kubeadm upgrade apply v1.29.2 - 或仅升级控制面组件:
sudo kubeadm upgrade apply v1.29.2 --etcd-upgrade=false
- 单控制面:
- 升级 kubelet 与 kubectl(保持与 apiserver 兼容):
sudo apt-mark unhold kubelet kubectlsudo apt-get install -y kubelet='1.29.2-1.1' kubectl='1.29.2-1.1'sudo apt-mark hold kubelet kubectlsudo systemctl daemon-reload & & sudo systemctl restart kubelet
- 恢复节点:
kubectl uncordon < master-node> - 多控制面:在其余控制面节点重复以上步骤(先 drain、升级 kubeadm、执行
kubeadm upgrade node、升级 kubelet/kubectl、uncordon)。
三 工作节点升级步骤
- 驱逐节点:
kubectl drain < node> --ignore-daemonsets --delete-emptydir-data --force - 登录节点,升级 kubelet/kubectl(与 apiserver 兼容):
sudo apt-mark unhold kubelet kubectlsudo apt-get update & & sudo apt-get install -y kubelet='1.29.2-1.1' kubectl='1.29.2-1.1'sudo apt-mark hold kubelet kubectlsudo systemctl daemon-reload & & sudo systemctl restart kubelet
- 恢复节点:
kubectl uncordon < node> - 逐节点滚动升级,保持集群可用。
四 升级后验证与常见问题
- 集群与节点状态:
kubectl get nodes确认所有节点 Readykubectl get pods -A检查 kube-system 等关键组件 Runningkubectl version --short确认客户端与服务端版本在兼容范围内
- 网络与存储插件:确认 CNI(如 Calico/Flannel/Cilium)与 CSI 驱动版本兼容并已就绪。
- 常见问题处理:
- 镜像拉取失败:检查节点网络/代理、镜像仓库可达性;必要时
kubeadm config images pull - Pod 未就绪:查看
kubectl describe pod < pod> -n kube-system与journalctl -u kubelet定位镜像、权限或资源问题 - 容器运行时错误:若从 v1.23→v1.24+,确保使用 containerd 且 /etc/crictl.yaml 配置正确(如
runtime-endpoint: unix:///run/containerd/containerd.sock) - 回滚:控制面可用
kubeadm upgrade rollback;或基于快照/备份恢复,再回退软件包版本并重启 kubelet。
- 镜像拉取失败:检查节点网络/代理、镜像仓库可达性;必要时
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在 Ubuntu 上升级 Kubernetes
本文地址: https://pptw.com/jishu/766721.html
