Linux下K8S如何进行版本升级
小樊
32
2026-01-01 01:52:54
Linux下Kubernetes版本升级实操指南
一 升级总览与准备
- 升级原则与路径
- 采用“相邻次要版本递进”策略,例如:v1.24.x → v1.25.y → v1.26.z;不建议跨多个次要版本跳跃。升级前通过 kubeadm upgrade plan 确认可升级到的目标版本与变更点。
- 备份与回滚点
- 备份控制面配置与证书:/etc/kubernetes/;备份 etcd 数据(示例):
- 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
- 确认集群健康:kubectl get nodes、kubectl get pods -A 均为正常;如有 PodDisruptionBudget、有状态服务,提前评估可中断窗口与替代节点容量。
- 高可用与维护窗口
- 多 Master 场景建议通过 HAProxy/Keepalived 对外暴露 VIP;升级单个 Master 时将其从 VIP 后端摘除,避免业务流量打入。
- 兼容性核对
- 容器运行时、网络插件、存储插件、Ingress、监控告警等需与目标 K8s 版本兼容;必要时先升级周边组件。
二 使用 kubeadm 的标准升级流程
- 控制平面升级(以第一个 Master 为例)
- 在所有 Master 上升级 kubeadm(示例目标版本:v1.29.10)
- CentOS/RHEL:yum install -y kubeadm-1.29.10-00 --disableexcludes=kubernetes
- 验证:kubeadm version
- 检查升级计划:kubeadm upgrade plan
- 执行控制面升级:kubeadm upgrade apply v1.29.10(可按需加 --v=5 查看详细日志;如需跳过证书自动续期,加 --certificate-renewal=false)
- 腾空当前 Master:kubectl drain --ignore-daemonsets
- 升级 kubelet 与 kubectl(同版本):yum install -y kubelet-1.29.10-00 kubectl-1.29.10-00 --disableexcludes=kubernetes
- 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
- 恢复调度:kubectl uncordon
- 其余 Master 节点:重复 1、2 步后执行 kubeadm upgrade node,再按 4–7 步升级 kubelet/kubectl 并恢复调度
- 工作节点升级
- 逐个节点操作(避免一次性腾空过多节点)
- 腾空节点:kubectl drain --ignore-daemonsets
- 升级 kubelet/kubectl(与集群目标版本一致)
- 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
- 恢复调度:kubectl uncordon
- 等待节点 Ready、工作负载恢复后再处理下一个节点
- 升级后验证
- 节点与系统组件:kubectl get nodes;kubectl get pods -n kube-system
- 控制面健康:kubectl get cs;如有 controller-manager/scheduler 状态异常,检查静态 Pod 清单端口配置并重启 kubelet(常见为将 manifests 中 –port=0 注释后重启 kubelet)
三 二进制部署或特殊场景
- 二进制方式(非 kubeadm)
- 逐节点停业务后升级控制面组件二进制(如 kube-apiserver、kube-controller-manager、kube-scheduler),再升级 kubelet/kubectl 并重启;HA 场景注意先摘除 VIP 或调整 Keepalived/HAProxy 后端。升级前同样做好 /etc/kubernetes/ 与 etcd 的备份。
- 单节点集群
- 驱逐会导致业务短暂中断(无其它节点可调度),请在维护窗口内执行,或先扩容节点再升级。
四 常见问题与回滚
- 证书与端口
- kubeadm 升级会自动续期控制面临时证书;如需手动控制,可使用 –certificate-renewal=false。若 kubectl get cs 显示 controller-manager/scheduler 不健康,检查 /etc/kubernetes/manifests/ 中 –port=0 配置并重启 kubelet。
- 版本兼容与工具链
- 保持 kubectl 与集群版本相差不超过 1 个次要版本;升级 kube-proxy 使其不高于 kube-apiserver;容器运行时、网络/存储插件与目标 K8s 版本匹配。
- 回滚策略
- 控制面回滚:优先使用已备份的 etcd 快照恢复(停机窗口内执行),再按备份的 /etc/kubernetes/ 配置回滚组件版本;数据面回滚:将节点重新 drain、降级 kubelet/kubectl 并重启,随后 uncordon 恢复。