jjzjj

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

HJJ-DREAMER 2023-10-26 原文

问题摘要


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

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

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

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

 

查看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 

信息摘要:

  • 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

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

正确操作:

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

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

rm -rf export/

附注

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:显示文件系统类型

有关Error排错:The node was low on resource: ephemeral-storage.的更多相关文章

  1. ruby-on-rails - Ruby on Rails : . 常量化 : wrong constant name error? - 2

    我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby​​常量:Content2而不是content2。Aconstantnamestart

  2. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  3. ruby - RVM "ERROR: Unable to checkout branch ."单用户 - 2

    我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas

  4. ruby-on-rails - 尝试设置 Amazon 的 S3 存储桶 : 403 Forbidden error & setting permissions - 2

    我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不

  5. ruby-on-rails - 冒号(:) gives load error in locale YAML file - 2

    我在en:语言环境中有一个字符串display_device:toplay:getplayer冒号给我的错误是cannotloadtranslationsfromC:/DocumentsandSettings/rajg/discoveryaws/branches/internationalization/config/locales/en.yml,expectedittoreturnahash,butdoesnot我怎样才能让它工作? 最佳答案 如果你用这样的引号将它括起来,你可以在你的字符串中转义冒号(和其他“重要”字符):dis

  6. ruby - gem install pg error : couldn't understand kern. osversion `14.0.0' on Yosemite w/Ruby 2.1.5 - 2

    我使用RVM安装Ruby-2.1.5并再次运行bundle。现在pggem不会安装,我得到这个错误:geminstallpg-v'0.17.1'----with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_configBuildingnativeextensionswith:'--with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config'Thiscouldtakeawhile...ERROR:Error

  7. ruby-on-rails - 32651 :ERROR comparison of Float with Float failed ruby - 2

    我是Rails的新手,我遇到了一个错误,但我似乎找不到问题所在。这是日志:[32651:ERROR]2012-10-0913:46:52::comparisonofFloatwithFloatfailed[32651:ERROR]2012-10-0913:46:52::/home/sunny/backend/lib/analytics/lifetime.rb:45:in`each'/home/sunny/backend/lib/analytics/lifetime.rb:45:in`max'/home/sunny/backend/lib/analytics/lifetime.rb:45

  8. ruby - rspec: raise_error 用法来匹配错误信息 - 2

    我使用raise(ConfigurationError.new(msg))引发错误我试着用rspec测试一下:expect{Base.configuration.username}.toraise_error(ConfigurationError,message)但这行不通。我该如何测试呢?目标是匹配message。 最佳答案 您可以使用正则表达式匹配错误消息:it{expect{Foo.bar}.toraise_error(NoMethodError,/private/)}这将检查NoMethodError是否由privateme

  9. 【RuntimeError: CUDA error: device-side assert triggered】问题与解决 - 2

    RuntimeError:CUDAerror:device-sideasserttriggered问题描述解决思路发现问题:总结问题描述当我在调试模型的时候,出现了如下的问题/opt/conda/conda-bld/pytorch_1656352465323/work/aten/src/ATen/native/cuda/IndexKernel.cu:91:operator():block:[5,0,0],thread:[63,0,0]Assertion`index>=-sizes[i]&&index通过提示信息可以知道是个数组越界的问题。但是如图一中第二行话所说这个问题可能并不出在提示的代码段

  10. ruby-on-rails - Rails 新手 : Recommendations for error handling in controller - 2

    抱歉,如果问题很明显,我才刚刚开始使用Rails。我现在在几个Controller方法中有以下代码:respond_todo|format|if@project.saveformat.html{redirect_to(edit_project_url(@project),:notice=>'#{user.name}addedto#{role}.')}format.jselseformat.html{render:action=>"edit"}format.js#...endend那么问题来了,对于所有方法中的错误,最好的方法是什么?是否建议我使用save!并在rescue_action

随机推荐