在 Kubernetes 集群环境中,节点(Node)是承载和运行 Pod 的核心单元。对节点进行妥善维护,是保障集群整体稳定运行与高可用性的关键操作。
本文将为你提供一套可直接落地、经过实战验证的节点维护方案。

1. 节点维护前检查
首先,确认待维护节点的健康状况:
kubectl get nodes
节点状态必须显示为 Ready。如果状态异常,继续维护可能会带来风险。
接下来,梳理该节点上运行的所有 Pod:
kubectl get pods -A -o wide | grep
你需要重点关注哪些是关键业务 Pod,哪些可以安全迁移。如果有 Pod 使用了本地存储(Local PV),则需要格外谨慎。
尽量选择业务流量低谷期进行维护,以避免影响用户体验。
2. 先“冻结”节点
维护前,首先将节点标记为不可调度,使其不再接收新的 Pod:
kubectl cordon
这样操作之后,新的 Pod 不会被调度到该节点,但已有 Pod 不受影响,从而确保你的维护操作不会意外干扰正常业务。
3. 安全驱逐 Pod
接下来,将节点上除 DaemonSet 管理的 Pod 之外的 Pod 安全地迁移到其他节点:
kubectl drain
参数说明:
--ignore-daemonsets: 忽略并保留由 DaemonSet 管理的 Pod。
--delete-emptydir-data: 删除使用 emptyDir 卷的临时数据(确保无重要数据)。
提示:关键业务 Pod 必须配置了副本(多实例),否则迁移可能导致服务中断。
可以看到 DaemonSet 类型的 Pod 没有被驱逐。如果使用了 Local PV 的 Pod,需要格外谨慎!
驱逐完成后,务必检查业务是否正常,再进行节点维护工作,这一点非常重要。
drain 命令可能卡住的常见原因:Pod 有使用本地存储的卷、Pod 不符合 Pod 中断预算(PDB)策略、节点资源不足导致新 Pod 无法调度等。
这也是为什么很多团队执行一次 drain 操作,可能需要等待半小时的原因。
4. 节点维护
节点“清空”后,你就可以放心操作了:
• 升级操作系统或内核
• 更新 Docker 或 containerd 运行时
• 进行硬件巡检:磁盘、内存、网络等
5. 恢复节点
维护完成后,让节点重新回到集群中:
kubectl uncordon
然后检查节点和 Pod 状态,确认一切恢复正常:
kubectl get nodeskubectl get pods -o wide
uncordon:解除节点的不可调度封锁,节点将重新开始接收 Pod。
检查:确认节点和 Pod 状态均正常。
6. 节点维护注意事项
数据持久化:所有重要数据必须存储在 PVC 或外部存储中,避免因驱逐导致 emptyDir 数据丢失。
高可用部署:关键业务 Pod 必须配置多副本并分布在多个节点上,确保单节点维护不会中断服务。
滚动维护:生产环境不要一次性停掉所有节点,应分批次进行维护,以降低风险。
DaemonSet 和静态 Pod:维护前需了解节点上的 DaemonSet 和静态 Pod,它们不会被 drain 命令自动迁移,需要特殊处理。
资源紧张节点谨慎操作:当节点资源接近满载时,迁移 Pod 可能会失败,最好先释放部分负载。
K8S 节点维护的核心步骤就这 4 步,整个过程非常简单:cordon → drain → 维护 → uncordon。
