如何解决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配置:
- 编辑kubelet配置文件(通常为
/var/lib/kubelet/config.yaml) - 修改
evictionHard字段,例如:evictionHard: nodefs.available: 5% # 调整为可用空间占比5% imagefs.available: 10% # 调整为镜像存储可用空间占比10% - 重启kubelet生效:
sudo systemctl restart kubelet
内容的提问来源于stack exchange,提问作者voipp
相关产品推荐
相关产品推荐

