Kubernetes节点维护实战及注意事项

在 Kubernetes 集群中,节点(Node)是运行 Pod 的基础单元。节点维护是保证集群稳定性和高可用性的关键操作。

本文直接给你一套 可落地、实战验证过 的节点维护方案。

1 节点维护前检查

确认节点健康

复制代码
kubectl get nodes

节点状态应为 Ready,否则维护可能会带来风险。

清楚节点上的 Pod

复制代码
kubectl get pods -A -o wide | grep <NODE_NAME>

kubectl get pods -A -o wide | grep k8s-node2

重点了解哪些是关键业务 Pod,哪些可以安全迁移,如果有Pod使用了Local PV,要慎重。

挑选维护时间 尽量选择业务低峰期进行维护,避免影响用户体验。

2 先"冻结"节点

维护前,先让腾空节点,不再接收新 Pod:

复制代码
kubectl cordon <NODE_NAME>

kubectl cordon k8s-node2

这样,新的 Pod 不会调度到这台节点上,已有的Pod不受影响,保证你维护时不会意外影响业务。

3 安全驱逐Pod

接下来,把节点上的 Pod 安全迁移到其他节点:

复制代码
kubectl drain <NODE_NAME> --ignore-daemonsets --delete-emptydir-data
  • --ignore-daemonsets:DaemonSet 管理的 Pod 不驱逐

  • --delete-emptydir-data:删除临时数据目录(确保无重要数据)

提示:关键业务 Pod 必须有副本,否则迁移可能导致服务中断。

可以看到daemonset类型的Pod没有被驱逐掉,如果使用了Local PV的Pod,要慎重!

驱逐完要查看一下业务是否正常再进行节点维护工作,这一点很重要。

drain 有可能卡住的常见原因:

原因 表现 解决方法
Pod 副本数=1 drain 不动 先扩容
配置了 PDB PDB 阻塞 调整 PDB 或加副本
Local PV 无法迁移 特殊规划
StatefulSet 默认不驱逐 需确认业务可停机
DaemonSet 不迁移 使用 --ignore-daemonsets

这也是为什么很多团队 drain 一次,要等半小时。

4 节点维护

节点"空"了,你就可以放心操作了:

  • 升级操作系统或内核

  • 更新 Docker 或 containerd

  • 硬件巡检:磁盘、内存、网络

5 恢复节点

维护完成后,让节点回到集群中:

复制代码
kubectl uncordon k8s-node2
kubectl get nodes
kubectl get pods -o wide
  • uncordon:取消封锁,节点重新接收 Pod

  • 检查节点和 Pod 状态,确认一切正常

6 节点维护注意事项

  • 数据持久化

    所有重要数据必须存储在 PVC 或外部存储,避免 emptyDir 数据丢失。

  • 高可用部署

    关键业务 Pod 必须有副本或分布在多节点上,单点维护不会中断服务。

  • 滚动维护

    生产环境不要一次停掉所有节点,分批维护,降低风险。

  • DaemonSet 和静态 Pod

    维护前了解节点上的 DaemonSet 和静态 Pod,它们不会被 drain 自动迁移,需要特殊处理。

  • 资源紧张节点谨慎操作

    节点资源接近满负荷时,迁移 Pod 可能失败,最好先释放部分负载。

K8S 节点维护核心就 4 步:

cordon → drain → 维护 → uncordon

相关推荐
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS1 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun1 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
赵文宇(温玉)1 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang1 天前
上传本地镜像到harbor中
docker·容器·持续部署
张洛闻Eren1 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
忆~遂愿1 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Thneonl1 天前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
不吃香菜kkk、1 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove1 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21