当前位置: 首页 > news >正文

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 即可自动愈合。

http://www.cnnetsun.cn/news/469579.html

相关文章:

  • USB通信驱动开发:手把手教程(从零实现)
  • Bilidown终极教程:轻松掌握B站高清视频下载技巧
  • Q-Galore量子化梯度优化:ms-swift中显存压缩的进阶方案
  • Keil5使用教程:C语言串口通信项目应用
  • Calibre电子书格式转换:打破设备壁垒的终极解决方案
  • AI本地助手终极指南:打造完全掌控的智能工作环境
  • 终极Aegisub字幕编辑器完整使用教程:从零基础到精通
  • ORPO替代DPO?ms-swift中新兴偏好学习算法的实证研究
  • PE Tools终极指南:从零开始掌握PE文件分析技巧
  • MIT交通信号灯识别实战秘籍:300+真实场景图片的TensorFlow模型构建全攻略
  • Flutter WebView Plugin终极指南:5个核心功能解锁移动端混合开发新境界
  • Cortex-M处理器HardFault异常处理机制手把手教程
  • PostgreSQL向量搜索实战:从零部署到生产环境完整指南
  • HandBrake终极指南:免费视频转码神器从零精通
  • 如何用Pock免费工具将MacBook Touch Bar打造成终极生产力中心
  • 终极指南:Textstat文本可读性分析工具深度解析
  • 基于SpringBoot+Vue的蜗牛兼职网设计与实现管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • Step-Audio-TTS-3B语音合成架构演进与技术解析
  • 文本标注革命:3大技巧让你的AI数据准备效率翻倍
  • 如何快速上手Ray-MMD:基于物理渲染完整指南
  • PandasAI与Streamlit联手:打造零代码数据分析神器
  • Mistral金融文本分析定制:基于领域数据的垂直模型构建
  • RDP Wrapper多用户解决方案配置指南
  • CI/CD流水线集成:实现模型训练与部署的自动化
  • SGLang引擎加速实测:ms-swift中动态批处理的吞吐优势
  • 终极Flux指南:如何用GitOps实现Kubernetes自动化部署
  • 技术破局制造业民企困局:玄晶引擎的AI赋能路径与实践逻辑
  • 15分钟精通LLM命令行:从零到精通的完整实战手册
  • 模型版本管理规范:ms-swift中模型迭代的生命周期控制
  • DisableWinTracking终极故障排除指南:10个快速修复方案