Вопросы и ответы про автоматическое масштабирование группы узлов в Managed Service for Kubernetes
-
Почему в моем кластере остаются поды со статусом Terminated?
-
Как выбрать минимальный пресет мастера, чтобы снизить расходы?
-
Можно ли изменить пороги автоматического масштабирования мастера на стороне пользователя?
-
Можно ли ограничить автоматическое масштабирование мастера сверху?
-
Как запретить автоматическое уменьшение ресурсов мастера при автоматическом масштабировании?
Почему в моем кластере стало N узлов и он не уменьшается?
Автоматическое масштабирование не останавливает узлы с подами, которые не могут быть расселены. Масштабированию препятствуют:
- Поды, расселение которых ограничено с помощью PodDisruptionBudget.
- Поды в пространстве имен
kube-system:- которые созданы не под управлением контроллера DaemonSet
; - для которых не установлен
PodDisruptionBudgetили расселение которых ограничено с помощьюPodDisruptionBudget.
- которые созданы не под управлением контроллера DaemonSet
- Поды, которые не были созданы под управлением контроллера репликации (ReplicaSet
, Deployment или StatefulSet ). - Поды с
local-storage. - Поды, которые не могут быть расселены куда-либо из-за ограничений. Например, при недостатке ресурсов или отсутствии узлов, подходящих по селекторам affinity или anti-affinity
. - Поды, на которых установлена аннотация, запрещающая расселение:
"cluster-autoscaler.kubernetes.io/safe-to-evict": "false".
Примечание
Поды kube-system, поды с local-storage и поды без контроллера репликации можно расселить. Для этого установите аннотацию "safe-to-evict": "true":
kubectl annotate pod <имя_пода> cluster-autoscaler.kubernetes.io/safe-to-evict=true
Другие возможные причины:
-
Группа узлов уже достигла минимального размера.
-
Узел простаивает менее 10 минут.
-
В течение последних 10 минут группа узлов была масштабирована в сторону увеличения.
-
В течение последних 3 минут в группе узлов была неудачная попытка масштабирования в сторону уменьшения.
-
Произошла неудачная попытка остановить определенный узел. В этом случае следующая попытка происходит по истечении 5 минут.
-
На узле установлена аннотация, которая запрещает останавливать его при масштабировании:
"cluster-autoscaler.kubernetes.io/scale-down-disabled": "true". Аннотацию можно добавить или снять с помощьюkubectl.Проверьте наличие аннотации на узле:
kubectl describe node <имя_узла> | grep scale-down-disabledРезультат:
Annotations: cluster-autoscaler.kubernetes.io/scale-down-disabled: trueУстановите аннотацию:
kubectl annotate node <имя_узла> cluster-autoscaler.kubernetes.io/scale-down-disabled=trueСнять аннотацию можно, выполнив команду
kubectlсо знаком-:kubectl annotate node <имя_узла> cluster-autoscaler.kubernetes.io/scale-down-disabled-
В группе с автоматическим масштабированием количество узлов не уменьшается до одного, даже при отсутствии нагрузки
В кластере Managed Service for Kubernetes приложение kube-dns-autoscaler регулирует количество реплик CoreDNS. Если в конфигурации kube-dns-autoscaler параметр preventSinglePointFailure имеет значение true и в группе больше одного узла, минимальное количество реплик CoreDNS равно двум. В этом случае Cluster Autoscaler не может уменьшить количество узлов в кластере так, чтобы оно стало меньше количества подов CoreDNS.
Подробнее о масштабировании DNS по размеру кластера.
Решение:
-
Отключите защиту, при которой минимальное количество реплик CoreDNS равно двум. Для этого в ConfigMap
kube-dns-autoscalerустановите значение параметраpreventSinglePointFailureравнымfalse. -
Разрешите вытеснение подов
kube-dns-autoscaler, добавив аннотациюsave-to-evictв Deployment :kubectl patch deployment kube-dns-autoscaler -n kube-system \ --type merge \ -p '{"spec":{"template":{"metadata":{"annotations":{"cluster-autoscaler.kubernetes.io/safe-to-evict":"true"}}}}}'
Почему под удалился, а размер группы узлов не уменьшается?
Если узел недостаточно нагружен, он удаляется по истечении 10 минут.
Почему автоматическое масштабирование не выполняется, хотя количество узлов меньше минимума / больше максимума?
Установленные лимиты не будут нарушены при масштабировании, но Managed Service for Kubernetes не следит за соблюдением границ намеренно. Масштабирование в сторону увеличения сработает только в случае появления подов в статусе unschedulable.
Почему в моем кластере остаются поды со статусом Terminated?
Это происходит из-за того, что во время автоматического масштабирования контроллер Pod garbage collector (PodGC)
Ответы на другие вопросы об автоматическом масштабировании смотрите в документации Kubernetes
Есть ли поддержка Horizontal Pod Autoscaler?
Да, Managed Service for Kubernetes поддерживает механизм горизонтального автомасштабирования подов (Horizontal Pod Autoscaler).
Как выбрать минимальный пресет мастера, чтобы снизить расходы?
Выбирайте конфигурацию мастера, соответствующую реальной нагрузке на кластер. Ориентируйтесь на рекомендуемые конфигурации — они зависят от числа узлов, максимального количества подов и используемого CNI.
Можно ли изменить пороги автоматического масштабирования мастера на стороне пользователя?
Нет. Пороги срабатывания управляются на стороне сервиса Managed Service for Kubernetes. Если вы хотите поделиться обратной связью о работе автоскейлера, обратитесь в техническую поддержку
Косвенно влиять на поведение автоскейлера можно через выбор конфигурации мастера. Master Autoscaler не уменьшает ресурсы ниже выбранной конфигурации.
Можно ли ограничить автоматическое масштабирование мастера сверху?
Нет, установить максимальные значения параметров масштабирования нельзя.
Как запретить уменьшение ресурсов мастера при автоматическом масштабировании?
Выберите конфигурацию мастера, соответствующую текущей нагрузке. Master Autoscaler не уменьшает ресурсы ниже выбранной конфигурации.