如何在Linux上升级K8s
导读:Linux上升级 Kubernetes 的实操指南 一 升级前准备与版本策略 备份关键数据与配置:优先备份 /etc/kubernetes/ 与 /var/lib/etcd/;使用 etcdctl 做快照,例如: ETCDCTL_API...
Linux上升级 Kubernetes 的实操指南
一 升级前准备与版本策略
- 备份关键数据与配置:优先备份 /etc/kubernetes/ 与 /var/lib/etcd/;使用 etcdctl 做快照,例如:
- ETCDCTL_API=3 etcdctl snapshot save /data/etcd/etcd_bak.db
–endpoints=https://127.0.0.1:2379
–cacert=/etc/kubernetes/pki/etcd/ca.crt
–cert=/etc/kubernetes/pki/etcd/server.crt
–key=/etc/kubernetes/pki/etcd/server.key
- ETCDCTL_API=3 etcdctl snapshot save /data/etcd/etcd_bak.db
- 检查集群健康:确保 所有节点 Ready、Pod 运行正常、无未完成作业,避免升级中出现异常。
- 版本与路径规划:遵循“每次仅升级一个小版本(x.y → x.(y+1))”,不可跨多个小版本;HA 环境中 kube-apiserver 实例间小版本差不超过 1;kubelet 不能高于 apiserver,且最多低 2 个小版本;kube-proxy 与 kubelet 小版本一致;升级顺序建议为:kube-apiserver → kube-controller-manager/kube-scheduler → kubelet。
- 维护窗口与策略:选择低峰时段,采用滚动升级(一次只升级一个节点),先控制面后数据面,升级期间保持核心业务可用。
二 使用 kubeadm 的升级步骤
- 控制平面节点(逐台进行,若为 HA 需保持 VIP/负载均衡健康)
- 升级 kubeadm(示例目标版本为 v1.29.10)
- 下载并替换二进制:wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/kubeadm & & chmod +x kubeadm & & sudo mv kubeadm /usr/local/bin/
- 验证:kubeadm version
- 检查升级计划:kubeadm upgrade plan
- 执行升级:kubeadm upgrade apply v1.29.10
- 排空节点:kubectl drain --ignore-daemonsets
- 升级 kubelet 与 kubectl(方法与 kubeadm 类似,下载对应版本二进制替换 /usr/local/bin/ 或按包管理器升级)
- 重启 kubelet:systemctl daemon-reload & & systemctl restart kubelet
- 解除封锁:kubectl uncordon
- 升级 kubeadm(示例目标版本为 v1.29.10)
- 工作节点(逐台滚动)
- 排空节点:kubectl drain --ignore-daemonsets
- 升级 kubelet/kubectl(同上)
- 重启 kubelet:systemctl daemon-reload & & systemctl restart kubelet
- 解除封锁:kubectl uncordon
- 升级后验证
- 查看节点与系统组件:kubectl get nodes;kubectl get pods -n kube-system
- 检查控制面与 kubelet 日志是否有异常。
三 二进制部署或离线环境的升级要点
- 备份与预检:同样先备份 /etc/kubernetes/、/var/lib/etcd/ 并检查集群健康状态。
- 控制平面组件替换(按顺序):在每台 master 上先停业务无关组件(必要时短暂停 keepalived/VIP 以切换流量),备份旧二进制(如 kube-apiserver、kube-controller-manager、kube-scheduler),拷贝新版本二进制到 /usr/local/bin 或指定目录,启动服务并观察日志。
- kubelet 升级:替换二进制后执行 systemctl daemon-reload & & systemctl restart kubelet。
- 节点维护:逐台 drain → 升级 → 重启 kubelet → uncordon,确保业务持续可用。
四 升级后验证与常见问题处理
- 验证清单
- 节点状态:kubectl get nodes(版本与 Ready 状态)
- 系统组件:kubectl get pods -n kube-system(如 apiserver、controller-manager、scheduler、etcd、kube-proxy、coredns 等 Running)
- 网络与存储:确认 CNI 插件与 CSI/Cinder/Rook 等组件版本兼容并已升级;验证 Service/Ingress 与 PV/PVC 访问
- 常见问题与修复
- 节点 NotReady:检查 kubelet 服务状态与日志(journalctl -u kubelet -f),确认容器运行时与 cgroup 驱动一致
- Pod 未重建:确认节点已 uncordon,并检查 污点/容忍度、资源配额、节点选择器
- etcd 异常:回滚到升级前快照(etcdctl snapshot restore),核查证书与 endpoints 连通性
- 版本偏差报错:对照版本策略,确保 apiserver、kubelet、kube-proxy 等组件满足偏差约束
- 网络插件异常:按插件官方文档执行升级与兼容性检查,必要时回滚插件版本。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Linux上升级K8s
本文地址: https://pptw.com/jishu/770946.html
