Вопросы и ответы про автоматическое масштабирование группы узлов в Managed Service for Kubernetes
Почему в моем кластере стало 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).