news 2026/9/2 20:36:56

Kubernetes 节点安全维护全流程:从驱逐 Pod 到彻底清理残留

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kubernetes 节点安全维护全流程:从驱逐 Pod 到彻底清理残留

前言

在 Kubernetes 集群运维中,经常需要对单个节点进行维护,比如升级内核、重装 NVIDIA 驱动、扩容磁盘甚至重装系统。这时最核心的需求是:安全地将节点隔离出来,确保不影响集群其他部分,同时彻底清理本地残留,避免容器和 Pod 反复重建

下面分享一套经过实战验证的完整流程,适用于大多数基于 kubeadm 或类似方式部署的集群(版本 v1.20+ 均适用)。

1. 标记节点不可调度

防止新 Pod 被调度到目标节点。

kubectl cordon <node-name>

节点状态变为Ready,SchedulingDisabled

2. 删除节点上所有 Pod(包括 DaemonSet)

kubectl delete pod --all-namespaces --field-selector spec.nodeName=<node-name> --grace-period=0 --force

这一步会强制删除所有 Pod,包括 DaemonSet 管理的系统组件(如 calico-node、kube-proxy 等)。

3. 让节点进入 NotReady 状态(关键步骤)

这是阻止 DaemonSet Pod 重建的核心。

在目标节点上执行:

sudo systemctl stop kubelet sudo pkill -9 -f kubelet # 确保进程彻底结束

几秒到一分钟后,节点状态变为NotReady,SchedulingDisabled
此时即使 DaemonSet 控制器尝试创建新 Pod,也只会卡在 Pending 状态,不会真正启动容器。

4. 清理本地运行的容器

kubelet 停止前可能已拉起部分容器,需要手动清理。

sudo docker rm -f $(sudo docker ps -aq) # Docker 环境 # 或 containerd 环境 sudo crictl rm -f $(sudo crictl ps -q)

5. 清理镜像和运行时残留

sudo docker rmi -f $(sudo docker images -q) sudo docker system prune -a --volumes -f

6. 清理 Kubernetes 残留文件和挂载

常会遇到Device or resource busy错误,因为 secret/configmap 等卷以 tmpfs 方式挂载。

# 先卸载所有 kubelet 相关 tmpfs sudo mount | grep kubelet | awk '{print $3}' | xargs -r sudo umount # 再删除残留目录 sudo rm -rf /var/lib/kubelet/* /var/log/pods/* /var/log/containers/* # 重建必要空目录 sudo mkdir -p /var/lib/kubelet /var/log/pods /var/log/containers

7. 可选:进一步释放磁盘空间

  • 清理 snap 旧版本(Ubuntu 常见):
    sudo snap list --all | awk '/disabled/{print $1, $3}' | while read n r; do sudo snap remove "$n" --revision="$r" --purge; done
  • 清理系统日志:
    sudo journalctl --vacuum-size=500M

8. 维护完成后恢复节点

在目标节点上:

sudo systemctl start kubelet

等待节点恢复Ready状态后,在控制平面执行:

kubectl uncordon <node-name>

所有 DaemonSet Pod 会自动重建,节点恢复正常运行。

常见问题与解决方案

  • Pod 或容器反复重建→ 节点仍为 Ready 状态 → 必须停止 kubelet 让节点 NotReady
  • 删除 /var/lib/kubelet 时提示 busy→ 未卸载 tmpfs 挂载 → 先 umount 再删除
  • docker stop 无效→ kubelet 仍在拉起容器 → 彻底杀死 kubelet 进程

总结

这套流程的核心思想是:

  1. cordon 阻止调度
  2. 强制删除 Pod
  3. 停止 kubelet 让节点 NotReady(阻止重建)
  4. 彻底清理本地残留

执行完后,节点完全隔离且干净,可安全进行任何破坏性操作。恢复时仅需启动 kubelet 并 uncordon 即可自动愈合。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 21:25:15

深入解析 Uber FX:构建优雅的 Go 依赖注入框架

深入解析 Uber FX&#xff1a;构建优雅的 Go 依赖注入框架 【免费下载链接】fx A dependency injection based application framework for Go. 项目地址: https://gitcode.com/gh_mirrors/fx1/fx Uber FX 是一个基于依赖注入的 Go 应用程序框架&#xff0c;它通过消除全…

作者头像 李华
网站建设 2026/9/2 22:14:22

竞赛榜单刷分技巧:用ms-swift冲击Leaderboard第一名

用 ms-swift 冲击竞赛榜首&#xff1a;高效刷分的工业化路径 在AI竞赛的战场上&#xff0c;时间就是排名。当你看到榜单上那些只差0.3%就能登顶的模型时&#xff0c;是否曾为训练效率低下、适配成本高昂而焦虑&#xff1f;尤其是在MMLU-Pro或MMMU这类综合性评测中&#xff0c;每…

作者头像 李华
网站建设 2026/9/2 21:25:19

TouchGFX核心要点:屏幕与视图管理

用TouchGFX打造丝滑嵌入式UI&#xff1a;屏幕与视图的底层逻辑全解析你有没有遇到过这样的场景&#xff1f;在开发一款带彩屏的工业设备时&#xff0c;客户提出“界面要像手机一样流畅”——但你的主控只是颗STM32F4&#xff0c;RAM不到200KB&#xff0c;Flash也才1MB。传统裸机…

作者头像 李华
网站建设 2026/9/3 1:53:36

宝塔面板v7.7.0终极安装指南:5分钟搞定服务器运维管理

宝塔面板v7.7.0终极安装指南&#xff1a;5分钟搞定服务器运维管理 【免费下载链接】btpanel-v7.7.0 宝塔v7.7.0官方原版备份 项目地址: https://gitcode.com/GitHub_Trending/btp/btpanel-v7.7.0 还在为复杂的Linux服务器配置而烦恼吗&#xff1f;宝塔面板v7.7.0为你提供…

作者头像 李华
网站建设 2026/9/3 1:53:30

Pixel Art XL终极指南:8步生成专业级像素艺术

Pixel Art XL终极指南&#xff1a;8步生成专业级像素艺术 【免费下载链接】pixel-art-xl 项目地址: https://ai.gitcode.com/hf_mirrors/nerijs/pixel-art-xl 还在为像素艺术创作而烦恼吗&#xff1f;Pixel Art XL让每个人都能成为像素艺术家&#xff01;这款基于Stabl…

作者头像 李华
网站建设 2026/9/3 3:13:52

Code Llama Tokenizer核心技术深度解析:从原理到实战的最佳实践

Code Llama Tokenizer核心技术深度解析&#xff1a;从原理到实战的最佳实践 【免费下载链接】codellama Inference code for CodeLlama models 项目地址: https://gitcode.com/gh_mirrors/co/codellama Code Llama Tokenizer作为连接人类可读代码与AI模型理解的关键桥梁…

作者头像 李华