当前位置:   article > 正文

k8s最佳实践:部分业务POD内存持续泄露问题

pod内存溢出

K8S部分业务POD内存持续泄露问题

1.前言

线上K8S集群有极少量的PHP业务,它们的POD内存持续走高直到OOM,相信与特殊代码场景有关,需要展开分析。

我从POD的内存监控原理入手,分析到底内存用到了哪些地方。

2.分析过程

  • 第一步:分析pod的内存限制原理

    • 容器化依赖Cgroup限制内存资源,Docker采集容器的内存使用量也是基于Cgroup技术
    • 实际上,Cgroup标准做法是把每个子系统作为一棵树(Hierarchy),然后在树里面创建子cgroup做 资源限制。
    • Centos默认创建了这样的N颗树,每棵树管理1个子系统,K8S就是在这些树中创建子目录来使用Cgroup能力。
  • 第二步:分析pod的内存限制是如何实现的(以内存memory为例,我们知道POD可以设置resource limit)

    • 首先docker ps找到目标pod的相关容器,至少有2个容器,一个是pause容器,一个是应用容器

    • 拿着应用容器的container id,执行docker inspect 可以看到label里有一个pod唯一标识uid

    • K8S创建了kubepods子cgroup,仍旧以memory为例

      • ll /sys/fs/cgroup/memor
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/616128
推荐阅读
相关标签
  

闽ICP备14008679号