You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决K8s 1.24.17节点的disk-pressure污点问题?

解决K8s节点disk-pressure污点无法移除的问题

核心原因

手动移除污点后又重现,是因为kubelet会持续监控节点磁盘状态,只要磁盘压力阈值未达标,就会自动重新添加node.kubernetes.io/disk-pressure污点。所以重点是先解决磁盘空间不足的问题,而非单纯移除污点。

具体排查与解决步骤

1. 定位磁盘占用的核心来源

先通过df -h确认哪个挂载点使用率过高,再用以下命令逐层排查大文件/目录:

# 查看根目录下各文件夹大小,按从大到小排序
du -sh /* | sort -hr
# 进入占用高的目录继续排查,比如/var目录
du -sh /var/* | sort -hr

2. 深度清理Containerd相关资源

crictl rmi --prune仅清理CRI层面未被使用的镜像,可能存在底层未清理的资源,用Containerd原生工具ctr做深度清理:

# 清理所有未被容器引用的镜像(包括中间层镜像)
sudo ctr images prune -a
# 清理未被使用的快照资源
sudo ctr snapshots prune

注意:ctr是Containerd的原生CLI,需确保当前用户有权限操作(或加sudo)。

3. 清理节点日志占用

日志是磁盘占用的常见大户,可按以下方式清理:

  • 清理系统journal日志:
    # 保留最近7天的日志,可按需调整时间范围
    sudo journalctl --vacuum-time=7d
    
  • 清空容器日志(json-file驱动下,日志默认存于/var/log/pods):
    # 临时清空所有容器日志文件(生产环境建议先备份关键日志)
    sudo find /var/log/pods -type f -name "*.log" -exec truncate -s 0 {} \;
    

4. 排查其他非容器占用

  • 清理系统缓存:
    sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches
    
  • 查找并清理大文件:
    # 查找根目录下大于1G的文件,按需调整大小阈值
    sudo find / -type f -size +1G -exec ls -lh {} \;
    

5. 验证磁盘状态并确认污点自动移除

清理完成后,用df -h确认挂载点使用率降到阈值以下,然后查看节点状态:

# 查看节点当前污点
kubectl describe node foo-node1 | grep Taints
# 查看节点磁盘压力状态条件
kubectl get node foo-node1 -o jsonpath='{.status.conditions[?(@.type=="DiskPressure")]}'

当磁盘可用空间满足kubelet的阈值要求后,kubelet会自动移除disk-pressure污点,无需手动操作。

6. (可选)临时调整kubelet磁盘压力阈值

如果需要临时放宽阈值(不建议长期使用),可修改kubelet配置:

  1. 编辑kubelet配置文件(通常为/var/lib/kubelet/config.yaml)
  2. 修改evictionHard字段,例如:
    evictionHard:
      nodefs.available: 5%  # 调整为可用空间占比5%
      imagefs.available: 10% # 调整为镜像存储可用空间占比10%
    
  3. 重启kubelet生效:
    sudo systemctl restart kubelet
    

内容的提问来源于stack exchange,提问作者voipp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:42:08