16.3 k8s容器cpu内存告警指标与资源request和limit

embedded/2024/10/21 19:46:16/

本节重点介绍 :

  • Guaranteed的pod Qos最高
  • 在生产环境中,如何设置 Kubernetes 的 Limit 和 Request 对于优化应用程序和集群性能至关重要。
  • 对于 CPU,如果 pod 中服务使用 CPU 超过设置的limits,pod 不会被 kill 掉但会被限制。如果没有设置 limits ,pod 可以使用全部空闲的 CPU 资源。
  • 对于内存,当一个 pod 使用内存超过了设置的limits,pod 中 container 的进程会被 kernel 因 OOM kill 掉。

kubernetes__Qos_node_7">kubernetes 中的 Qos 合理分配node上的有限资源

简介

  • QoS(Quality of Service) 即服务质量

  • QoS 是一种控制机制,它提供了针对不同用户或者不同数据流采用相应不同的优先级

  • 或者是根据应用程序的要求,保证数据流的性能达到一定的水准。kubernetes 中有三种 Qos,分别为:

    • Guaranteed:pod 的 requests 与 limits 设定的值相等;
    • Burstable:pod requests 小于 limits 的值且不为 0;
    • BestEffort:pod 的 requests 与 limits 均为 0;
  • 三者的优先级如下所示,依次递增:

BestEffort -> Burstable -> Guaranteed

不同 Qos 的本质区别

  • 在调度时调度器只会根据 request 值进行调度;
  • 二是当系统 OOM上时对于处理不同 OOMScore 的进程表现不同,也就是说当系统 OOM 时,首先会 kill 掉 BestEffort pod 的进程,若系统依然处于 OOM 状态,然后才会 kill 掉 Burstable pod,最后是 Guaranteed pod;

资源的requests和limits

  • 我们知道在k8s中为了达到容器资源限制的目录,在yaml文件中有cpu和内存的 requests和limits配置
  • 对这两个参数可以简单理解为根据requests进行调度,根据limits进行运行限制。
  • 举例下面的配置代表cpu 申请100m,限制1000m。内存申请100Mi ,限制2500Mi
        resources:requests:cpu: 100mmemory: 100Milimits:cpu: 1000mmemory: 2500Mi

首先我们应关心这两组limits和requests值

  • 下面的表格中反应了kube-state-metrics 提供的4个相关指标。
指标名称含义单位说明
kube_pod_container_resource_requests_cpu_cores容器设置的cpu requests值request=100m 代表使用0.1个核心
kube_pod_container_resource_requests_memory_bytes容器设置的mem requests值单位:字节
kube_pod_container_resource_limits_cpu_cores容器设置的cpu limits值request=100m 代表使用0.1个核心
kube_pod_container_resource_limits_memory_bytes容器设置的mem limits值单位:字节

cpu属于可压缩资源

  • 在k8s中cpu属于可压缩资源
  • 意思是pod中服务使用CPU超过设置的limits
  • pod不会被kill掉但会被限制
  • 所以我们应该通过观察容器cpu被限制的情况来考虑是否将cpu的limit调大。

cpu限制率和利用率

限制率

  • 有这样的两个cpu指标,container_cpu_cfs_periods_total代表 container生命周期中度过的cpu周期总数
  • container_cpu_cfs_throttled_periods_total代表container生命周期中度过的受限的cpu周期总数。
  • 所以我们可以使用下面的表达式来查出最近5分钟,超过25%的CPU执行周期受到限制的container有哪些。
 100 *  sum by(container_name, pod_name, namespace) (increase(container_cpu_cfs_throttled_periods_total{container_name!=""}[5m]))/ sum by(container_name, pod_name, namespace) (increase(container_cpu_cfs_periods_total[5m]))  > 25
  • 如果上述ql有查询结果,我们可以考虑将cpu的limit调大

利用率

  • 同时我们可以用下面的计算方式表示容器cpu使用率
  • 其中container_cpu_usage_seconds_total 代表cpu的计数器
  • container_spec_cpu_quota容器的CPU配额,它的值是容器指定的CPU个数*100000。
sum(rate(container_cpu_usage_seconds_total{image!=""}[1m])) by (container, pod)  / (sum(container_spec_cpu_quota{image!=""}/100000) by (container, pod)  )* 100

mem属于不可压缩资源

  • 在k8s中mem属于不可压缩资源
  • pod之间是无法共享的,完全独占的
  • 所以一旦容器内存使用超过limits,会导致oom,然后重新调度。

mem oom 判定依据

  • container_memory_working_set_bytes容器真实使用的内存量
  • kubelet通过比较 container_memory_working_set_bytescontainer_spec_memory_limit_bytes 来决定oom container。
  • 同时还有 container_memory_usage_bytes用来表示容器使用内存,其中包含了很久没用的缓存,该值比 container_memory_working_set_bytes要大
  • 所以cpu使用率可以使用下面的公式计算
(container_memory_working_set_bytes/container_spec_memory_limit_bytes )*100

本节重点总结 :

  • Guaranteed的pod Qos最高
    • oom的时候先是 BestEffort 然后是Burstable 最后才 Guaranteed
  • 在生产环境中,如何设置 Kubernetes 的 Limit 和 Request 对于优化应用程序和集群性能至关重要。
  • 对于 CPU,如果 pod 中服务使用 CPU 超过设置的limits,pod 不会被 kill 掉但会被限制。如果没有设置 limits ,pod 可以使用全部空闲的 CPU 资源。
    • 可以查看cpu限制率来决定是否调大 cpu的limit
    • cpu属于可压缩资源
  • 对于内存,当一个 pod 使用内存超过了设置的limits,pod 中 container 的进程会被 kernel 因 OOM kill 掉。
    • mem属于不可压缩资源
    • oom判定的时候是 比较 container_memory_working_set_bytes 而不是 usage
    • usage含有很久未用的缓存,比workingset偏大
  • Qos 的目的是为了合理分配node上的有限资源 {cpu和mem上}

http://www.ppmy.cn/embedded/118217.html

相关文章

[Python]一、Python基础编程(2)

F:\BaiduNetdiskDownload\2023人工智能开发学习路线图\1、人工智能开发入门\1、零基础Python编程 1. 文件操作 把⼀些内容 ( 数据 )存储存放起来,可以让程序下⼀次执⾏的时候直接使⽤,⽽不必重新制作⼀份,省时省⼒ 。 1.1 文件的基本操作 1. 打开文件 2. 读写操作 3. 关闭…

Linux CentsOS定时删除一个目录下(包含子目录)的改动时间大于12小时的文件

Shell脚本 文件目录如下图 ** 查找/ai/img/目录下的所有文件** find /ai/img/ -type f查找/ai/img/目录下的所有上次改动时间大于720分钟(12小时)的文件 12 小时,也就是 720 分钟。所以,我们可以使用 -mmin 720 来查找修改时间超过 720 分钟(…

【EPLAN】解决ELM与ELC授权不匹配问题

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决EPLAN授权-ELM与ELC授权不匹配问题; 2、 问题场景 用于解决在EPLAN 服务器端 ELM 授权进行了更新激活,客户端授权连接后,客户端 ELC 授权信息没有变更的情况,尝试…

行阶梯形矩阵的定义,通过正例和反例说明如何判断一个矩阵是不是行阶梯形矩阵

行阶梯形矩阵的定义: 一个矩阵被称为行阶梯形矩阵,如果它满足以下条件: 非零行在零行之上:所有非零行都位于零行的上方。主元位置右移:在非零行中,首个非零元素(称为主元)所在的列…

研1日记17

ai station 1. shell窗口下:tmux apt-get install tmux tmux new -s abc ,创建一个名为abc的窗口,进入窗口。 按下ctrlb 再按下d 转为后台运行。tmux使用指南:比screen好用n倍! - 知乎 (zhihu.com) 注意&#x…

新能源汽车知识点集萃

功能安全-->ISO26262/GB∕T 34590 2021 信息安全--->ISO21434 预期功能安全--->ISO21448 建模规范-->MAAB/JMAAB/MISAR C Codeing Standard; 开发流程--CMMI/IATF16949//ASPICE(Automotive SPICE)/产品规划/概念开发/设计开发/试制试验与…

企业级-pdf预览-前后端

作者:fyupeng 技术专栏:☞ https://github.com/fyupeng 项目地址:☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 本文 一、介绍 对于PDF预览,有很多开发者都遇到过头疼的难题,今天给大家介绍…

Reactor介绍,如何从简易版本的epoll修改成Reactor模型(demo版本代码+详细介绍)

目录 Reactor demo​​​​​​​ 引入 比喻 修改代码 connection tcp_server ET模式 主逻辑 处理事件 运行结果 代码 完善功能 读取数据 运行结果 ​编辑 代码 处理数据 回指指针 如何处理写事件 引入 循环内 处理对写事件的关心 异常处理 代码 se…