Вопросы и ответы про автоматическое масштабирование группы узлов в 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-
Почему под удалился, а размер группы узлов не уменьшается?
Если узел недостаточно нагружен, он удаляется по истечении 10 минут.
Почему автоматическое масштабирование не выполняется, хотя количество узлов меньше минимума / больше максимума?
Установленные лимиты не будут нарушены при масштабировании, но Managed Service for Kubernetes не следит за соблюдением границ намеренно. Масштабирование в сторону увеличения сработает только в случае появления подов в статусе unschedulable
.
Почему в моем кластере остаются поды со статусом Terminated?
Это происходит из-за того, что во время автоматического масштабирования контроллер Pod garbage collector (PodGC)
Ответы на другие вопросы об автоматическом масштабировании смотрите в документации Kubernetes