温馨提示×

Linux K8s如何进行版本升级

小樊
34
2025-12-14 10:30:35
栏目: 智能运维

Linux Kubernetes 版本升级实操指南

一 升级策略与准备

  • 升级路径与节奏:遵循“每次仅升级一个次要版本”的原则,例如从1.23 → 1.24 → 1.25,不可跨多个次要版本;控制平面与 kubelet 的版本偏差不得超过1个次要版本。落后多个版本时,先在测试环境演练并逐步递进。升级前在测试环境验证清单、控制器、存储与已弃用 API 的兼容性。
  • 备份关键数据:备份 /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);如有持久卷,建议用 Velero 做应用与 PV 级备份。
  • 集群健康检查:确保控制平面组件 Running(kubectl get pods -n kube-system -l component=kube-apiserver)、所有节点 Ready(kubectl get nodes)、无异常 Pod(kubectl get pods -A --field-selector status.phase!=Running)。
  • 组件与运行时兼容性:确认容器运行时与网络/存储插件的版本矩阵;例如 Kubernetes 1.25+ 建议使用 containerd 1.6+;网络插件如 Calico 3.24+Flannel 0.20.0+ 对 1.25 有良好支持;kubectl 与集群版本相差不超过1个次要版本。
  • 维护窗口与策略:采用滚动升级、逐节点腾空与恢复,尽量避开业务高峰;准备回滚方案(etcd 快照、应用与清单备份)。

二 使用 kubeadm 的标准升级流程

  • 升级顺序:先控制平面,后工作节点;每个阶段完成后进行健康检查再进入下一步。
  • 控制平面节点(以升级到 v1.25.0 为例,逐台 master 执行)
    1. 升级 kubeadm:yum install -y kubeadm-1.25.0-00 --disableexcludes=kubernetes
    2. 检查升级计划:kubeadm upgrade plan(确认可升级到的目标版本与变更)
    3. 执行升级:kubeadm upgrade apply v1.25.0
    4. 升级 kubelet 与 kubectl:yum install -y kubelet-1.25.0-00 kubectl-1.25.0-00 --disableexcludes=kubernetes;systemctl daemon-reload && systemctl restart kubelet
    5. 解除不可调度:kubectl uncordon
  • 工作节点(逐个节点执行,保持业务连续性)
    1. 排空节点:kubectl drain --ignore-daemonsets --delete-emptydir-data
    2. 升级 kubeadm:yum install -y kubeadm-1.25.0-00 --disableexcludes=kubernetes
    3. 升级节点组件:kubeadm upgrade node
    4. 升级 kubelet 与 kubectl:同控制平面步骤并重启 kubelet
    5. 取消排空:kubectl uncordon
  • 升级后验证:kubectl get nodes(全为 Ready)、kubectl get pods -A(无 CrashLoopBackOff/Error)、组件日志无异常(journalctl -u kubelet -f、-u kube-apiserver -f)。

三 二进制部署的平滑升级流程

  • 适用场景:手动部署/非 kubeadm 管理的集群。
  • 升级前:备份 /etc/kubernetes//var/lib/etcd/;必要时用 etcdctl 做快照;确认集群健康。
  • 控制平面节点(以升级到 v1.29.10 为例)
    1. 下载并替换二进制:wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/{kubeadm,kubelet,kubectl};chmod +x;mv 到 /usr/local/bin/
    2. 检查升级计划:kubeadm version && kubeadm upgrade plan
    3. 执行控制平面升级:kubeadm upgrade apply v1.29.10
    4. 排空节点:kubectl drain --ignore-daemonsets
    5. 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
    6. 取消排空:kubectl uncordon
  • 工作节点:逐台执行“排空 → 替换二进制 → kubeadm upgrade node → 重启 kubelet → 取消排空”,与 kubeadm 流程一致。
  • 高可用提示:如有多 master,先升级非 VIP 持有者,通过 Keepalived/VIP 切换避免业务中断,逐台滚动完成。

四 升级后验证与回滚

  • 快速健康检查:
    • 节点与系统组件:kubectl get nodes;kubectl get pods -n kube-system
    • 关键业务:访问入口服务、执行数据库/存储读写探测、检查 PV/PVC 挂载与伸缩
    • 监控告警:关注 API 响应时延节点资源使用率网络连通性Pod 重启次数
  • 回滚策略:
    • 控制平面回滚:kubeadm upgrade apply <上一版本>(需有对应备份与可回滚清单)
    • etcd 回滚:使用已保存的 etcd 快照恢复(先停控制平面,恢复快照后重启)
    • 应用层回滚:Helm/Rollback、Deployment 回滚或 Velero 恢复
  • 常见问题与要点:
    • 版本偏差超限会导致组件异常,务必遵循“相邻次要版本”规则
    • 升级网络/存储插件前,先查阅其版本兼容矩阵与升级指南
    • 升级窗口内保持单节点维护,完成健康检查再处理下一节点。

0