You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何排查单节点Kubernetes集群的节点磁盘占用过高问题

如何排查单节点Kubernetes集群的节点磁盘占用过高问题

我来帮你一步步拆解这个磁盘占用过高的问题,你看到的那些overlay挂载其实是容器的根文件系统,它们共享宿主机的根磁盘空间,所以咱们从几个核心方向入手排查:

  • 第一步:检查容器镜像的存储空间占用
    从挂载路径能看出你用的是containerd,直接用crictl工具查看镜像:

    # 按大小排序查看所有镜像,找出占空间最大的那些
    crictl images --sort size
    

    如果发现有没用的旧镜像或者悬空镜像,可以手动清理:

    # 删除单个无用镜像
    crictl rmi <镜像ID>
    # 一键清理所有未被使用的镜像、容器、快照等资源(会提示确认)
    crictl system prune
    

    要是你习惯用docker命令,也可以用docker imagesdocker system prune,效果类似。

  • 第二步:排查容器日志的大小
    Kubernetes容器的日志默认存在宿主机本地,很容易被忽略而占满磁盘:

    # 查看每个Pod日志目录的总大小
    du -sh /var/log/pods/*
    # 找出单个超过1G的日志文件
    find /var/log -name "*.log" -size +1G -exec du -h {} \;
    

    如果是日志占了大量空间,要么手动清理旧日志(注意别删正在写入的日志),要么给容器配置日志轮转规则——比如在Pod的YAML里给容器添加日志配置,限制单日志文件大小和保留数量。

  • 第三步:核查Persistent Volumes的实际使用
    虽然你用的是PV而非hostPath,但如果是local类型的PV,最终还是挂载在节点本地的:

    # 查看指定PV的详细信息,找到挂载路径
    kubectl describe pv <你的PV名称>
    

    然后用du -sh <挂载路径>查看实际占用空间,也可以直接进入Pod内部,用df -hdu -sh /<挂载点路径>确认是不是应用本身写入了大量数据到PV里。

  • 第四步:清理containerd的残留资源
    有时候已停止的容器、未被引用的快照也会偷偷占空间:

    # 查看所有容器(包括已停止的)
    crictl ps -a
    # 删除单个已停止的无用容器
    crictl rm <容器ID>
    

    之前提到的crictl system prune其实已经包含了这些资源的清理,不过单独排查能更清楚哪些资源在浪费空间。

  • 第五步:检查节点上的其他非K8s相关大文件
    最后别忘了排查节点本身的系统文件,比如系统日志、临时文件、备份包之类的:

    # 先看根目录下各文件夹的总大小
    du -sh /*
    # 针对大文件夹深入排查,比如/var目录
    du -sh /var/*
    # 找出所有超过1G的文件
    find / -type f -size +1G -exec du -h {} \;
    

小提醒

清理资源前,最好确认这些资源确实没有被正在运行的Pod使用,尤其是生产环境,避免误删导致业务中断。如果是日志占空间,一定要配置好日志轮转,从根源上解决问题。

备注:内容来源于stack exchange,提问作者knpwrs

火山引擎 最新活动