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就超了出现此告警。
进一步通过监控排查:
发现kube-system这个命名空间就申请了8.45个核心,而实际并未使用到那么多:
解决
- 可以对对部分过度申请的pod,减少cpu申请,但是系统级别的命名空间最好不动它以免出问题;
- 纵向升级核心数或者横向扩展节点。
文章目录
关闭
共有 0 条评论