k8s|k8s hpa计算


hpa targets计算核心代码
代码位置:github.com/kubernetes/pkg/controller/podautoscaler/metrics/utilization.go
【k8s|k8s hpa计算】遍历metrics,如果当前podName没有设置request则跳过。
把每个podName对应的metrics的value累加得到metricsTotal, 把每个podName对应的request累加得到requestsTotal。
当前pod资源使用情况:currentUtilization = (metricsTotal * 100 ) / requestsTotal
资源使用率: usageRatio = currentUtilization / 设置扩容时候的百分比, 如80%,则这里为80。

// GetResourceUtilizationRatio takes in a set of metrics, a set of matching requests, // and a target utilization percentage, and calculates the ratio of // desired to actual utilization (returning that, the actual utilization, and the raw average value) func GetResourceUtilizationRatio(metrics PodMetricsInfo, requests map[string]int64, targetUtilization int32) (utilizationRatio float64, currentUtilization int32, rawAverageValue int64, err error) { metricsTotal := int64(0) requestsTotal := int64(0) numEntries := 0 for podName, metric := range metrics { request, hasRequest := requests[podName] if !hasRequest { // we check for missing requests elsewhere, so assuming missing requests == extraneous metrics continue }metricsTotal += metric.Value requestsTotal += request numEntries++ } // if the set of requests is completely disjoint from the set of metrics, // then we could have an issue where the requests total is zero if requestsTotal == 0 { return 0, 0, 0, fmt.Errorf("no metrics returned matched known pods") } currentUtilization = int32((metricsTotal * 100) / requestsTotal) return float64(currentUtilization) / float64(targetUtilization), currentUtilization, metricsTotal / int64(numEntries), nil }


    推荐阅读