GetResourceReplicas
2023-02-07 11:21:12 6 举报
AI智能生成
hpa核心算法
作者其他创作
大纲/内容
metrics, timestamp, err := c.metricsClient.GetResourceMetric(resource, namespace, selector, container)
获取指标以及时间
获取指标以及时间
podList, err := c.podLister.Pods(namespace).List(selector)
获取工作负载所有关联pod
获取工作负载所有关联pod
readyPodCount, unreadyPods, missingPods, ignoredPods := groupPods(podList, metrics, resource, c.cpuInitializationPeriod, c.delayOfInitialReadinessStatus)
removeMetricsForPods(metrics, ignoredPods)
removeMetricsForPods(metrics, unreadyPods)
对pod进行分组,readyPodCount, unreadyPods, missingPods, ignoredPods并从指标中去除ignoredPods,unreadyPods
removeMetricsForPods(metrics, ignoredPods)
removeMetricsForPods(metrics, unreadyPods)
对pod进行分组,readyPodCount, unreadyPods, missingPods, ignoredPods并从指标中去除ignoredPods,unreadyPods
requests, err := calculatePodRequests(podList, container, resource)
计算所有pod的request用量
计算所有pod的request用量
usageRatio, utilization, rawUtilization, err := metricsclient.GetResourceUtilizationRatio(metrics, requests, targetUtilization)
获取使用比率,当前资源利用率,平均使用量(基于request计算)
获取使用比率,当前资源利用率,平均使用量(基于request计算)
rebalanceIgnored := len(unreadyPods) > 0 && usageRatio > 1.0 未就绪pod大于0,并且usageRatio>1.0。可以忽略伸缩。等待就绪pod完成,会重新计算指标,避免频繁扩容
if !rebalanceIgnored && len(missingPods) == 0 {
if math.Abs(1.0-usageRatio) <= c.tolerance {
// return the current replicas if the change would be too small
return currentReplicas, utilization, rawUtilization, timestamp, nil
}
// if we don't have any unready or missing pods, we can calculate the new replica count now
return int32(math.Ceil(usageRatio * float64(readyPodCount))), utilization, rawUtilization, timestamp, nil
}
if math.Abs(1.0-usageRatio) <= c.tolerance {
// return the current replicas if the change would be too small
return currentReplicas, utilization, rawUtilization, timestamp, nil
}
// if we don't have any unready or missing pods, we can calculate the new replica count now
return int32(math.Ceil(usageRatio * float64(readyPodCount))), utilization, rawUtilization, timestamp, nil
}
...

收藏

收藏
0 条评论
下一页
为你推荐
查看更多