4. 升级前检查:节点健康检查、Pod调度状态、存储与网络插件兼容性

滚动升级节点池前,必须完成三项前置检查:节点健康、Pod调度状态、存储与网络插件兼容性。跳过任何一项都可能导致升级中断或业务受损。以下按检查顺序展开。

4.1 节点健康检查

使用 kubectl get nodes 确认所有节点处于 Ready 状态,并检查内核日志与kubelet状态。

检查项命令/方法预期结果
节点状态kubectl get nodes -o wideSTATUS 列均为 Ready
kubelet 健康systemctl status kubeletactive (running)
内核日志错误dmesg -T | grep -i error无硬件/存储/网络错误
磁盘使用率df -h/var/lib/docker 或 /var/lib/containerd 使用率 < 80%
内存/CPU 余量free -m; top -bn1可用内存 > 20%,CPU idle > 30%
⚠️ 常见隐患: 节点虽然 Ready,但 kubelet 持续报 OOM 或磁盘压力。务必在升级前修复,否则升级过程中节点可能直接 NotReady。

4.2 Pod调度状态检查

升级会逐台封锁(cordon)并驱逐(drain)节点,必须确保集群内剩余资源能承载被驱逐的Pod。

  • 检查不可调度Pod: kubectl get pods --all-namespaces -o wide | grep -v Running,确认无 Pending/Error/CrashLoopBackOff 的Pod。
  • 检查Pod分布: kubectl get pods -o wide --all-namespaces | awk '{print $8}' | sort | uniq -c,避免单节点集中过多Pod。
  • 检查PDB(PodDisruptionBudget): kubectl get pdb --all-namespaces,确保关键应用配置了 minAvailable 或 maxUnavailable,防止驱逐时中断。
  • 模拟驱逐: kubectl drain <node> --dry-run=server --ignore-daemonsets --delete-emptydir-data,提前暴露冲突。
💡 最佳实践: 升级前执行 kubectl top nodes 查看资源水位。若某节点 CPU 请求超过 85%,建议先手动疏散部分Pod,避免驱逐时雪崩。

4.3 存储与网络插件兼容性

存储插件(CSI)和网络插件(CNI)的版本必须与目标 Kubernetes 版本匹配。不兼容会导致 Pod 挂载卷失败或网络不通。

4.3.1 存储插件兼容性矩阵

存储插件当前版本目标K8s版本兼容性操作建议
vSphere CSI2.7.x1.28✅ 兼容无需升级
Azure Disk CSI1.28.x1.29✅ 兼容无需升级
Amazon EBS CSI1.20.x1.28⚠️ 需升级升级至 1.25+
Ceph-CSI (RBD)3.9.x1.29❌ 不兼容升级至 3.11+

4.3.2 网络插件兼容性矩阵

网络插件当前版本目标K8s版本兼容性操作建议
Calico3.26.x1.28✅ 兼容无需升级
Cilium1.14.x1.29✅ 兼容无需升级
Flannel0.22.x1.28⚠️ 需升级升级至 0.24+
Weave Net2.8.x1.29❌ 不兼容迁移至 Cilium 或 Calico
🔍 验证方法: 在测试环境执行 kubectl apply -f test-pod.yaml(含 PVC 和 Service),确认 Pod 启动后网络连通且卷挂载正常。再执行 kubectl exec 写入文件验证持久化。

4.4 升级前检查流程图

以下SVG展示了从节点健康检查到存储网络兼容性验证的完整流程,帮助运维人员按序执行。

升级前检查流程图 开始升级前检查 1. 节点健康检查 kubelet状态 / 磁盘 / 内核日志 2. Pod调度状态 PDB / 驱逐模拟 / 资源余量 3a. 存储插件兼容性 CSI Driver 版本匹配 3b. 网络插件兼容性 CNI 版本匹配 4. 全部检查通过? 节点健康 & Pod调度 & 插件兼容 通过,可开始升级

4.5 检查清单速查表

将以下清单打印或粘贴至运维手册,逐项打勾确认。

序号检查项命令/参考状态
1所有节点 Readykubectl get nodes✅ / ❌
2kubelet 运行正常systemctl status kubelet✅ / ❌
3磁盘使用率 < 80%df -h✅ / ❌
4无 Pending/Error Podkubectl get pods -A | grep -v Running✅ / ❌
5PDB 已配置kubectl get pdb -A✅ / ❌
6驱逐模拟无报错kubectl drain <node> --dry-run=server✅ / ❌
7存储插件版本兼容对照兼容性矩阵✅ / ❌
8网络插件版本兼容对照兼容性矩阵✅ / ❌
9测试Pod启动正常kubectl apply -f test-pod.yaml✅ / ❌
🚨 强制要求: 清单中任意一项为 ❌,禁止 执行滚动升级。必须先修复问题,重新检查全部通过后再操作。