fix(nodes): 修正 Request 占用两处计算错误
1. CPU 分母单位错误 Allocatable["cpu"] 形如 "15890m",parseIntResource 用 %d 解析得 15890(已是毫核), 再乘 1000 使分母放大 1000 倍,16 核节点显示 0.07% 而非 70%。 改用 parseCpuToMilli 统一到毫核。 2. 已结束 Pod 未排除 Succeeded/Failed 的 Pod 不再占用资源,其 Request 被计入导致 分配率虚高(实测 172.19.0.61 显示 1090%,187 个 Pod 中多数已结束)。 改为跳过非运行态 Pod。 修复后 12 个节点分配率回到 60~90%,无超过 100% 的异常值。 // Logan.Li
This commit is contained in:
1 parent
c69d5479b3
commit
286d7cd906
1 file changed
+10
-3
@@ -71,6 +71,11 @@ func (h *KubernetesHandler) ListNodes(c *gin.Context) {
|
||||
if p.Spec.NodeName == "" {
|
||||
continue
|
||||
}
|
||||
// 只统计仍在消耗资源的 Pod:Succeeded/Failed 已结束,
|
||||
// 把它们的 Request 计入会虚高分配率(曾出现 1090% 的异常值)。 // Logan.Li
|
||||
if p.Status.Phase == "Succeeded" || p.Status.Phase == "Failed" {
|
||||
continue
|
||||
}
|
||||
agg := podReqs[p.Spec.NodeName]
|
||||
if agg == nil {
|
||||
agg = &reqAgg{}
|
||||
@@ -137,15 +142,17 @@ func (h *KubernetesHandler) ListNodes(c *gin.Context) {
|
||||
s.MemoryUsage = float64(memMi) / float64(memCapacity) * 100
|
||||
}
|
||||
}
|
||||
// Request 占用:本节点 Pod 已申请 / 可分配。 // Logan.Li
|
||||
// Request 占用:本节点 Pod 已申请 / 可分配。
|
||||
// 注意 Allocatable 的 cpu 可能带 m 后缀(如 "15890m"),必须用 parseCpuToMilli 统一到毫核,
|
||||
// 不能再用 parseIntResource 后乘 1000,否则分母会被放大 1000 倍。 // Logan.Li
|
||||
if agg := podReqs[n.Metadata.Name]; agg != nil {
|
||||
allocCPU := parseIntResource(n.Status.Allocatable["cpu"])
|
||||
allocCPU := parseCpuToMilli(n.Status.Allocatable["cpu"])
|
||||
allocMem := parseMemResource(n.Status.Allocatable["memory"])
|
||||
s.PodCount = agg.pods
|
||||
s.CPURequestM = agg.cpuM
|
||||
s.MemRequestMi = agg.memMi
|
||||
if allocCPU > 0 {
|
||||
s.CPUAllocPct = float64(agg.cpuM) / float64(allocCPU*1000) * 100
|
||||
s.CPUAllocPct = float64(agg.cpuM) / float64(allocCPU) * 100
|
||||
}
|
||||
if allocMem > 0 {
|
||||
s.MemAllocPct = float64(agg.memMi) / float64(allocMem) * 100
|
||||
|
||||
Reference in new issue
Block a user