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

Kubernetes 节点磁盘空间空了怎么办?解决 containerd overlay 100%问题

Kubernetes 节点磁盘空间空了怎么办?解决 containerd overlay 100%问题

当 Kubernetes 集群中的节点出现如下错误:

MountVolume.SetUp failed for volume xxx: no space left on device

或者执行 df -h 显示:

/dev/mapper/centos-root   50G   50G   0G  100% /
overlay                   50G   50G   0G  100% /run/containerd/io.containerd.runtime...

这意味着 根分区 / 空间已满,containerd 依赖 overlayfs 已无法写入,导致 Pod 创建失败。


一、问题原因

  1. containerd 将所有容器 rootfs overlay 挂载到 / 分区
  2. /var/lib/containerd, /var/lib/kubelet 空间大量占用
  3. /var/log 系统日志、Pod 输出日志积历

二、快速解决方案

清理 containerd 無用容器和镜像

# 清理容器
ctr -n k8s.io containers ls
ctr -n k8s.io containers rm $(ctr -n k8s.io containers ls -q)

# 清理镜像
ctr -n k8s.io images ls
ctr -n k8s.io images rm $(ctr -n k8s.io images ls -q)

清除 kubelet 临时 pod 目录

systemctl stop kubelet
rm -rf /var/lib/kubelet/pods/*
systemctl start kubelet

清除系统日志

journalctl --vacuum-time=1d
find /var/log -type f -exec truncate -s 0 {} \;

三、持久解决方案:将 containerd & kubelet 数据目录移动到大盘 /home

步骤 1: 停止服务

systemctl stop kubelet
systemctl stop containerd

步骤 2: 移动数据 + 设置软连接

mv /var/lib/containerd /home/containerd_data
mv /var/lib/kubelet /home/kubelet_data

# 建立软连接
ln -s /home/containerd_data /var/lib/containerd
ln -s /home/kubelet_data /var/lib/kubelet

步骤 3: 重启服务

systemctl start containerd
systemctl start kubelet

步骤 4: 确认解决

df -h /
kubectl get nodes

四、建议配套

建议配合 cron 时间件定期清理

cat > /usr/local/bin/clean-logs.sh <<EOF
#!/bin/bash
journalctl --rotate
journalctl --vacuum-time=1d
find /var/log -type f -exec truncate -s 0 {} \;
EOF

chmod +x /usr/local/bin/clean-logs.sh
echo "0 3 * * * root /usr/local/bin/clean-logs.sh" >> /etc/crontab

如果需要 containerd root 目录指定

# /etc/containerd/config.toml
root = "/home/containerd_data"
state = "/home/containerd_state"
systemctl daemon-reexec
systemctl restart containerd

如果需要修改 kubelet 启动参数(如使用 systemd):
编辑/etc/systemd/system/kubelet.service.d/10-kubeadm.conf中加入:

--root-dir=/home/kubelet_data

结论

问题原因解决方案
节点 / 分区 100%containerd + kubelet + logs 占满移动到 /home
Pod 无法创建overlay rootfs 写入失败重启服务释放空间
kubelet 出现 FailedMountpod 目录无法 mkdir移目录 + 空间利用

相关文章:

  • 如何创建单独的城市活码?活码能永久使用吗?
  • 理解JSON-RPC 2.0 协议
  • 力扣HOT100之链表:24. 两两交换链表中的节点
  • 1. Git 下载和安装
  • docker compose安装智能体平台N8N
  • 蓝桥杯嵌入式按键长按双击
  • 408 计算机网络 知识点记忆(5)
  • Go 微服务框架 | 中间件
  • C++17模板编程与if constexpr深度解析
  • LLM实现模型并行训练:deepspeed 是什么; transformers` 怎么实现模型并行训练吗?
  • 嵌入式Linux驱动——3 总线设备驱动模型
  • C++23新特性详解:迈向更现代化的C++
  • 微服务之间调用外键“翻译”的方法概述
  • 47常用控件_QWidget的toolTip属性
  • 使用Conda创建环境存在问题
  • 力扣448.找到数组中所有消失的元素
  • 从繁琐到高效,2025年AI PPT工具选秒出PPT
  • Java性能调优2025:从JVM到Kubernetes的全链路优化策略
  • SpringWebFlux WebClient:非阻塞HTTP请求客户端
  • 1.认识C语言
  • 网站旁边的小图标怎么做的/实事新闻热点
  • 网站开发结课大作业/如何快速提升网站关键词排名
  • 怎么做自己的网站推广产品/百度seo课程
  • wordpress需要授权吗/邯郸seo推广
  • 从化网站建设优化/百度云资源搜索引擎
  • 重庆龙头寺找做墩子师傅网站/网站排名软件优化