k8s告警报KubeCPUOvercommit

告警消息

k8s告警报KubeCPUOvercommit

 FIRING 
KubeCPUOvercommit

Cluster has overcommitted CPU resource requests.

Cluster has overcommitted CPU resource requests for Pods by 1.7699999999999996 CPU shares and cannot tolerate node failure.

Duration: -

告警解释

集群为Pods超额分配了1.7699999999999996个CPU份额的CPU资源,无法容忍节点故障。

告警规则

sum(namespace_cpu:kube_pod_container_resource_requests:sum) - (sum(kube_node_status_allocatable{resource="cpu"}) - max(kube_node_status_allocatable{resource="cpu"})) > 0 and (sum(kube_node_status_allocatable{resource="cpu"}) - max(kube_node_status_allocatable{resource="cpu"})) > 0

排查

将3个指标分别进行了查询,如下:

  • sum(namespace_cpu:kube_pod_container_resource_requests:sum) = 11.77
  • sum(kube_node_status_allocatable{resource="cpu"}) = 14
  • max(kube_node_status_allocatable{resource="cpu"}) = 4
    带入告警规则 11.77 - (14 - 4) > 0 and (14 - 4) > 0 ,结果是 1.77 > 0 and 10 > 0 符合告警规则,触发告警。

这条告警的实际含义是:

  • 所有 Pod 的 CPU requests 总和(11.77)
  • 超过了 “总 CPU 分配量减去单节点最大 CPU”(即 14 - 4 = 10)

它的目的是:

  • 防止 Pod 请求的总资源量无法调度到任意一台节点上。
  • 特别是当某些 Pod 请求量比较大时,会因调度器找不到足够资源的单节点而失败,即使集群整体资源够用。

原因

前几天做过一次k8s集群降配,原来配置是3master都是2C8G,3worker都是8C32G,一共30个核心;
降配降为了3master都是2CG,2worker都是4C32G,一共14个核心,核心数减少导致原来资源申请的cpu就超了出现此告警。
进一步通过监控排查:
file
发现kube-system这个命名空间就申请了8.45个核心,而实际并未使用到那么多:
file

解决

  • 可以对对部分过度申请的pod,减少cpu申请,但是系统级别的命名空间最好不动它以免出问题;
  • 纵向升级核心数或者横向扩展节点。

版权声明:
作者:admin
链接:https://www.chenxie.net/archives/2784.html
来源:蜀小陈
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录