Error排错:The node was low on resource: ephemeral-storage.

问题摘要


The node was low on resource: ephemeral-storage. 错误的排除与解决步骤

因为我在一个1master3nodes的K8S集群内部署了Argo + Jenkins + mysql + spark + postsql 等等一系列软件服务,导致计算机运行极度缓慢。我将有关的namespace进行强制删除,降低资源的使用。在测试的名称空间重新创建简单pod的时候发生以上报错,现记录相应的排除工作思路。
核心原因是磁盘被占用,存储空间不足。产生存储空间不足的原因是我近期想学大数据课程,转移了大量资料,导致系统无法调度

Error排错:The node was low on resource: ephemeral-storage._第1张图片

正确操作:进入根目录查看什么文件夹占用磁盘存储过大,处理掉相应的文件夹

cd / && du -h -x --max-depth=1

Error排错:The node was low on resource: ephemeral-storage._第2张图片

 

查看pod报错的步骤


kubectl get

kubectl get pod -n test-2022 -o wide

  信息摘要:

  • 在node4的节点
  • pod的状态是no ready + status == error

kubectl describe

kubectl describe pod pod-tomcat -n test-2022 | grep -A 20 Events 

Error排错:The node was low on resource: ephemeral-storage._第3张图片

信息摘要:

  • Evicted:已驱逐
  • message:节点资源不足:临时存储。节点上 Kubelet 的配置路径超过阈值会触发驱逐,默认情况下阈值是 85%

ephemeral-storage

ephemeral-storage 是用于管理和调度Kubernetes中运行的应用的短暂存储。

在每个Kubernetes的节点上,kubelet的根目录(默认是/var/lib/kubelet)和日志目录(/var/log)保存在节点的主分区上。

这个分区同时也会被Pod的EmptyDir类型的volume、容器日志、镜像的层、容器的可写层所占用。

ephemeral-storage 便是对这块主分区进行管理,通过应用定义的需求(requests)和约束(limits)来调度和管理节点上的应用对主分区的消耗。

df -h | grep /var/lib

ephemeral-storage引发的pod驱逐问题

解决方案: 

  • 清理磁盘释放资源
  • 通过可修改 Kubelet 的配置参数imagefs.available来提高阈值,然后重启 Kubelet

使用方案1解决

cd /var/lib/docker/overlay2/
ls

错误操作1:

rm -rf ./*

留下没被删除的导致问题的挂载容器,正常的容器被清理了。

产生新报错

只需要解除指定的四个容器挂载降低磁盘耗用,假如删除其他容器则产生新的报错。因为其他其实没有导致问题,一旦删除会导致节点无法部署新容器。如图

不确定操作1:

逐个解除挂载

umount /var/lib/docker/overlay2/813c20b4310ab610e208c9e1b9918ae3ee39e710a0613ebbf6f1ee32516cf875/merged
umount /var/lib/docker/overlay2/866b04c8e5ae3ea4bf9235a2692500b246a5ed9298ceff03f50774ad0bc56e7f/merged
umount /var/lib/docker/overlay2/32571ae5029d3616af0dbe65f145f5e47306a87b65f239906c891d58f5d7a95f/merged
umount /var/lib/docker/overlay2/49c700ff9ff853a08c1c46b376be6afbe2c219b8a75f1cafe40280b4bf253557/merged

统一解决挂载

df -h | grep /var/lib | grep 98 | awk '{print $6}' | xargs umount

Error排错:The node was low on resource: ephemeral-storage._第4张图片

 后期发现即使正确解除容器的挂载,资源占用也是高得离谱,核心问题应该是磁盘占用问题

正确操作:

du -h -x --max-depth=1  
#  查看哪个目录占用过高,对于过高目录中的内容适当删减腾出一些空间

Error排错:The node was low on resource: ephemeral-storage._第5张图片

因为近期在学大数据,转移了比较多的文件到export文件夹,导致磁盘占用过大,需要删除该文件夹内容

rm -rf export/

Error排错:The node was low on resource: ephemeral-storage._第6张图片

附注

grep

grep --help
Usage: grep [OPTION]... PATTERN [FILE]...
Search for PATTERN in each FILE or standard input.
PATTERN is, by default, a basic regular expression (BRE).
Example: grep -i 'hello world' menu.h main.c

'egrep' means 'grep -E'.  'fgrep' means 'grep -F'.
Direct invocation as either 'egrep' or 'fgrep' is deprecated.
When FILE is -, read standard input.  With no FILE, read . if a command-line
-r is given, - otherwise.  If fewer than two FILEs are given, assume -h.
Exit status is 0 if any line is selected, 1 otherwise;
if any error occurs and -q is not given, the exit status is 2.

option

-E、 --扩展正则表达式PATTERN是扩展正则表达式(ERE)

-F、 --固定字符串PATTERN是一组以换行符分隔的固定字符串

-G、 --基本正则表达式PATTERN是一个基本正则表达式(BRE)

-f、 --file=file从file获取模式

-i、 --忽略大小写忽略大小写区分

-v、 --反转匹配选择非匹配行


输出控制:

-m、 --最大计数=NUM匹配后的NUM停止

-n、 --行号打印带有输出行的行号


上下文控制:

-B、 --before context=NUM打印前导上下文的NUM行

-A、 --after context=NUM打印NUM行的尾随上下文

-C、 --context=NUM打印输出上下文的NUM行

df 

df --help
Usage: df [OPTION]... [FILE]...
Show information about the file system on which each FILE resides,
or all file systems by default.

# df命令
# 用来查看linux系统服务器文件系统的磁盘使用情况。
# 可以用该命令来查看已经使用了多少空间,还有多少空间可用。
 
# df命令格式为 df [选线] [文件名]
# 选项可以有
 -a:全部文件系统列表,包含虚拟文件系统
 -h:方便人阅读方式显示。
 -H:和-h相似,不过其中1k = 1000byte, 1M=1000k
 -l :显示本地文件系统
 -t:打印指定的文件系统类型
 -T:显示文件系统类型

你可能感兴趣的:(Linux,+,Shell,kubernetes,资源管理,linux,kubernetes)