当前位置:首页 > 内存 > 正文

pod内某个容器内存暂用高

  • 内存
  • 2024-08-29 06:06:50
  • 5553

一、通过Prometheus查询计算Kubernetes集群中Pod的CPU、内存使用率等指标Kubernetes的Kubelet组件内置了CadVisor,它以Prometheus支持的格式显示节点上容器的指标。通过计算这些指标可以获得更多有用的数据。
在Prometheus配置文件中,配置相关目标后,这些指标就可以被Prometheus查询到。
直接访问Kubelet的APIServer接口,可以读取Prometheus支持的格式呈现的指标:
CPU使用率的定义可以从maintop手册中找到:
即该进程占用的CPU时间与前一段时间总CPU时间的比值。如果有多个CPU或多核,则必须添加每个CPU的时序。
CadAdvisor在kubelet中收集的指标和含义,请参见:MonitoringCADvisorwithPrometheus。
其中一些是:
container_cpu_usage_seasons_total是容器使用的累积CPU时间,将其除以总CPU时间即可得到容器的CPU使用率。
Pod在1秒内累计使用的CPU时间为:
container_spec_cpu_quota为容器的CPU配额,其值为:为容器指定的CPU数量*100000。
因此,Pod1s内的总CPU时间为:Pod的CPU核数*1s:
将上述两个公式的结果相除,即可得到Pod的CPU使用率容器:
计算pod内存使用量非常简单,只需将实际内存使用量除以内存限制使用量即可:


二、k8s中,写日志引起podcache增加问题还记得k8s中的内存泄漏问题
监控捕获到的地址是cadvisor地址,接收到的podmem分为rss、cache、used和total
通过压力测试接收到:
k8s限制将计算rss+cache值将保持稳定。如果出现内存泄漏,则rss会不断增加,直到rss超过限制,然后重启容器释放内存
我们内存警报的rss值即可,警报值为80%P2的限值和90%P1的限值
三、k8spod资源限制requests和limits

环境:kubernetesv1.18.16

CPU:1core=1000millicore(毫核);50m相当于0.05个核心,最小单位为1m;
内存:M1000基129M字节Mi1024基

qosClass代表服务质量(QualityofService)的类型。它的值由Pod所需的内存和CPU决定。它们分为三种类型:Guaranteed、Burstable和BestEffort。当节点资源不足,pod被移除时,优先级不同:BestEffort→Burstable→Guaranteed。BestEffort首先被踢出,然后是Burstable,最后是guarantee。当Pod没有配置资源限制时,默认值为BestEffort。

保证:如果Pod内所有容器的所有资源的限制和需求都相等且不为0,则该Pod的QoSClass得到保证。注意,如果容器只指定了limit而没有指定request,则意味着request的值等于limit的值。
Burstable:Pod中至少有一个容器设置了CPU或内存资源的请求属性。
BestEffort:Pod中没有容器设置请求属性或限制。