admin管理员组文章数量:1794759
故障排查:k8s内存不足(0 nodes are available:Insufficient memory)
博客主页:tomcat.blog.csdn 博主昵称:农民工老王 主要领域:Java、Linux、k8s 期待大家的关注💖点赞👍收藏⭐留言💬
目录- 故障详情
- 分析原因
- 解决故障
最近,在工作中遇到一个问题:某位同事在我维护的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.
如图所示: 看到这个内存不足的报错后,我就在rancher的dashboard里查看了集群资源的利用情况(本文中的k8s由rancher 2.6部署和托管): 上述页面显示,所有的节点都有比较充裕的内存空间,就连内存消耗最多的机器,都还剩7G。
通过查看yaml中的资源需求,确定了待部署的deployment所需内存仅有1G。
resources: limits: cpu: "1" memory: 2Gi requests: cpu: 500m memory: 1Gi这下就郁闷了,明明内存还有很多,为何却报错内存不足?
分析原因最终我发现,rancher 2.6 的 dashboard中的内存占用数值 反映的是各个节点的内存实际使用情况,相当于在计算机上用free或者top命令查看到的数据。而本文中的报错是针对resources.requests中申明的所需内存的数值。
而在rancher 2.5的管理界面中展示的数据为k8s对象申明的所需资源,也就是本文中的报错所提示的不够的资源。如下图所示: 如果不知道这个变化,就容易遇到类似的问题。
部署deployment、statefulSets等各种k8s对象时,在配置文件里添加resources.requests就可以给容器申明所需内存和CPU资源。但全部容器的所需资源之和不能超过集群可用资源的总量。同时,在新部署k8s对象时,必须有一个worker节点的各项剩余资源都大于当前部署的k8s对象申明的所需资源,才能实现部署,否则就会报类似上文中的错误。
进行上述检查的命令是kubectl describe node。但该命令返回的信过于庞杂,如果只是想查看集群的CPU和内存资源的申明占用情况,可以使用下面的指令进行查看和过滤:
kubectl describe node |grep -E '((Name|Roles):\\s{6,})|(\\s+(memory|cpu)\\s+[0-9]+\\w{0,2}.+%\\))'下图是对本文中的k8s集群的检查结果。可以明显地看到,所有的worker节点的内存Requests都已经达到99%,剩余的1%不足1G,因而无法部署上文中的deployment。
解决故障找到了报错原因,那解决这个故障也就很容易了。以下三个方法都可以消除报错,并实现deployment的安装:
如需转载,请注明本文的出处:农民工老王的CSDN博客blog.csdn/monarch91 。
版权声明:本文标题:故障排查:k8s内存不足(0 nodes are available:Insufficient memory) 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686992690a126372.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论