微信扫一扫 分享朋友圈

已有 139 人浏览分享

开启左侧

k8s内存不足(0 nodes are available:Insufficient memory)

[复制链接]
139 0
故障详情
最近,在工作中遇到一个问题:某位同事在我维护的k8s集群中部署deployment时一直遇到如下报错:
    0/4 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: true}, that the pod didn't tolerate, 3 Insufficient memory.
如图所示:
image.png
看到这个内存不足的报错后,我就在rancher的dashboard里查看了集群资源的利用情况(本文中k8s由rancher部署和托管):

image.png
image.png
上述页面显示,所有的节点都有比较充裕的内存空间,就连内存消耗最多的机器,都还剩7G。
通过查看yaml中的资源需求,确定了待部署的deployment所需内存仅有1G。

  1.    resources:
  2.      limits:
  3.        cpu: "1"
  4.        memory: 2Gi
  5.      requests:
  6.        cpu: 500m
  7.        memory: 1Gi
复制代码
分析原因
最终我发现rancher dashboard中的内存占用数值 反映的是各个节点的内存实际使用情况,相当于在计算机上用free或者top命令查看到的数据。而本文中的报错是针对resources.requests中申明的所需内存的数值。
部署deployment、statefulSets等各种k8s对象时,在配置文件里添加resources.requests就可以给容器申明所需内存和CPU资源。但全部容器的所需资源之和不能超过集群可用资源的总量。
比如本文中的K8S集群的可用内存为24*3=72G。那么部署的所有对象的resources.requests中的memory之和就不能大于72G。在新部署k8s对象时,就要检查 当前已经部署的对象 总共申明了多少requests资源,已经占用了集群总体可用资源的多大比例,其剩余部分是否大于当前新部署对象声明的所需资源。
进行上述检查的命令是kubectl describe node。下图是对本文中的k8s集群的检查结果。可以明显地看到内存的Requests已经达到99%。剩余的1%不足1G,因而无法部署上文中的deployment。

image.png
解决故障
找到了报错原因,那解决这个故障也就很容易了。以下三个方法都可以消除报错,并实现deployment的安装:
    清理已安装的k8s对象,既可以删除一部分,也可以将某些对象的requests的值换成一个更小的数。
    扩容k8s集群。
    修改待安装的deployment的requests的值,减少申明的所需内存。

免责声明:
1,海欣资源网所发布的资源由网友上传和分享,不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
2,海欣资源网的资源来源于网友分享,仅限用于学习交流和测试研究目的,不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
3,海欣资源网所发布的资源由网友上传和分享,版权争议与本站无关,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。
4,如果您喜欢,请支持正版,购买正版,得到更好的正版服务,如有侵权,请联系我们删除并予以真诚的道歉,联系方式邮箱 haixinst@qq.com
海欣资源-企业信息化分享平台。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

41

主题
热度排行
回复排行
最新贴子

Archiver|手机版|小黑屋|海欣资源 ( 湘ICP备2021008090号-1 )|网站地图

GMT+8, 2022-9-25 16:56 , Gzip On, MemCache On.

免责声明:本站所发布的资源和文章均来自网络,仅限用于学习交流和测试研究目的,不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 本站信息来自网络,版权争议与本站无关,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 如果您喜欢,请支持正版,购买正版,得到更好的正版服务,如有侵权,请联系我们删除并予以真诚的道歉。