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
}
推荐阅读
- k8s|Scheduling Framework 与 Extender对比及详细介绍
- k8s|k8s(六)(配置管理与集群安全机制)
- prometheus源码分析(rules模块)
- K8s自动化运维平台
- prometheus源码分析(scrape模块)
- prometheus源码分析(t/v数据的压缩、写入和读取)
- kubernete编排技术五(DaemonSet)
- prometheus源码分析(index倒排索引)
- kubernetes|kubernetes安全控制认证与授权(二)
- k8s|Kubernetes中controller-manager源码分析--启动流程