Как Kubernetes вычисляет загрузку ЦП для HPA? - PullRequest
4 голосов
/ 31 марта 2020

Я хочу понять, как HPA вычисляет загрузку ЦП между модулями.

В соответствии с этим do c требуется среднее использование ЦП модуля (среднее за последние 1 минуты) делится на процессор, запрашиваемый модулем. Затем он вычисляет среднее арифметическое c для всех процессоров модулей.

К сожалению, do c содержит некоторую информацию, которая устарела, например, например, что --horizontal-pod-autoscaler-sync-period по умолчанию установлено на 30 секунд, но в официальный do c, значение по умолчанию составляет 15 секунд.

Когда я тестировал, я заметил, что HPA масштабируется еще до того, как средний CPU достигает порога, который я установил (который равен 90 %), Что заставило меня задуматься о том, что, возможно, требуется максимальная загрузка ЦП для модулей, а не средняя.

enter image description here

Мой вопрос: где я могу найти обновлена ​​документация, чтобы понять, как именно работает HPA?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2020

Обратите внимание, что у меня под рукой нет кластера 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% - это использование ресурсов для всех модулей , рассчитанное, поскольку все они были единым модулем, запрашивающим сумму запроса каждого модуля и собирающим метрики, поскольку они все работали на одном выделенном узле.

0 голосов
/ 04 апреля 2020

В соответствии с https://github.com/kubernetes/kubernetes/issues/78988#issuecomment -502106361 это зависит от конфигурации и является проблемой сервера метрик и отчета по кублету, HPA, скорее, должен использовать только информацию: https://kubernetes.io/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#cpu

Я думаю, что продолжительность должна быть определена интервалом --housekeeping-kubelet и по умолчанию равна 10 секундам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...