Обратите внимание, что у меня под рукой нет кластера Kubernetes, это теоретический ответ, основанный на исходном коде k8s.
Проверьте, действительно ли это соответствует вашему опыту.
Kubernetes с открытым исходным кодом, здесь, похоже, код HPA .
Функции GetResourceReplica
и calcPlainMetricReplicas
(для процента неиспользования) вычислить количество реплик с учетом текущих метрик.
Оба используют usageRatio
, возвращаемое GetMetricUtilizationRatio
, это значение умножается на количество в настоящее время готовых стручков в реплике для получения нового количества стручков:
New_number_of_pods = Old_numbers_of_ready_pods * usageRatio
Есть проверка допуска (ie, если usageRatio
находится достаточно близко к 1, ничего готово), а модули ожидающего и неизвестного состояния игнорируются (считается, что они используют 0% ресурса), в то время как модули без метрик считаются использующими 100% ресурса.
* * * * * * * usageRatio
вычисляется как GetResourceUtilizationRatio
, которому передаются метрики и запросы (ресурсов) всех модулей, и выполняется следующим образом:
utilization = Total_sum_resource_usage_all_pods / Total_sum_resource_requests_all_pods
usageRatio = utilization * 100 / targetUtilization
Где targetUtilization
взято из HPA spe c.
Код легче читать, чем это мое резюме, в этом контексте термин запрос означает «запрос ресурса» (это обоснованное предположение).
Так что я бы сказал, что 90% - это использование ресурсов для всех модулей , рассчитанное, поскольку все они были единым модулем, запрашивающим сумму запроса каждого модуля и собирающим метрики, поскольку они все работали на одном выделенном узле.