创建 Pod 失败,运行时报错 no space left on device?

遇到创建Pod失败并报错"no space left on device"时,请按照以下步骤排查和解决问题:

1. 定位问题来源

查看Pod事件:

复制代码
kubectl describe pod <pod-name> -n <namespace>

在输出中查找 Events 部分,确认错误是否与节点磁盘、存储卷(PVC)或容器镜像层相关。

2. 检查节点磁盘和Inode

登录问题节点:

复制代码
ssh <node-ip>

查看磁盘使用情况:

复制代码
df -h  # 检查磁盘空间
df -i  # 检查Inode使用

重点关注以下目录:

  • /var/lib/docker(Docker存储目录)

  • /var/lib/kubelet(Kubernetes数据目录)

  • /var/log(日志目录)

3. 清理节点磁盘空间

场景1:Docker/容器占满空间

清理未使用的Docker资源:

复制代码
docker system prune -af  # 清理镜像、容器、卷等(谨慎操作)

手动删除大文件或日志:

复制代码
du -sh /var/lib/docker/* | sort -rh  # 查找大文件
rm -rf /var/lib/docker/overlay2/<hash>  # 删除无效容器层(需确认)
场景2:Kubernetes数据占满空间

清理终止状态的Pod:

复制代码
kubectl delete pod --field-selector=status.phase=Failed --all-namespaces

清理镜像缓存:

复制代码
kubelet --image-gc-high-threshold=90 --image-gc-low-threshold=85
场景3:日志文件占满空间

清理旧日志:

复制代码
journalctl --vacuum-time=7d  # 清理系统日志
rm -rf /var/log/pods/*       # 清理Kubernetes Pod日志(谨慎操作)

4. 检查持久化存储(PVC/PV)

确认PVC容量是否足够:

复制代码
kubectl get pvc -n <namespace>

扩展PVC容量(若支持动态扩容):

复制代码
# 编辑PVC的spec.resources.requests.storage字段
kubectl edit pvc <pvc-name> -n <namespace>

5. 检查Inode耗尽

若df -i显示Inode用尽:

复制代码
# 查找小文件密集的目录(如日志、缓存)
find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

清理无用文件或迁移数据。

6. 调整临时存储限制

在Pod配置中设置临时存储限制:

复制代码
resources:
  limits:
    ephemeral-storage: "2Gi"
  requests:
    ephemeral-storage: "1Gi"

7. 预防措施

  • 监控磁盘和Inode:部署监控工具(如Prometheus+Node Exporter),设置磁盘使用告警。

  • 定期维护:设置CronJob自动清理旧日志和镜像。

  • 合理分配存储:确保PVC容量和节点存储预留足够空间。

通过以上步骤,通常可解决"no space left on device"问题。如仍无法解决,请检查节点硬件或考虑扩容磁盘。

相关推荐
陈陈CHENCHEN10 小时前
【Kubernetes】纯 IPv6 K8s 用 socat 打通 IPv4 服务
云原生·容器·kubernetes
wzq11_66620 小时前
Kubernetes集群——网络管理
云原生·容器·kubernetes
Nontee2 天前
K3s vs K8s:差的不是功能,是交付方式
云原生·容器·kubernetes
朱包林2 天前
iTerm2终端配置指南
linux·javascript·python·云原生·容器·kubernetes·云计算
小陈运维2 天前
使用kubeadm初始化IPV4/IPV6集群
linux·docker·云原生·容器·kubernetes
笑洋仟2 天前
k8s的Ingress配置问题
云原生·容器·kubernetes
垚垚学技术_聚焦云原生2 天前
K8s OpenEBS LVM 动态存储 PVC Pending 排查记
云原生·容器·kubernetes
sbjdhjd3 天前
云安全 | 从特权容器到旧版 runC:Docker 宿主机访问与运行时缺陷复盘
运维·网络安全·docker·云原生·kubernetes·云计算·云安全
谢亮_vipxieliang3 天前
Kubernetes 的“操作系统化”:从容器编排到 AI 基础设施控制平面
人工智能·平面·kubernetes
sbjdhjd3 天前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全