У меня есть зонд живучести, который настроен для проверки доступности конечной точки:
livenessProbe:
httpGet:
path: /path_example/
port: 8000
initialDelaySeconds: 10
periodSeconds: 60
В кластере включено автомасштабирование в соответствии с инструкциями здесь - https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler с 1 минимумом и 3 максимумом
Хотя прошло десять с лишним минут, кластер всегда показывает «текущий общий размер - 3». Приложение не использует ничего, кроме датчика живучести.
Может ли это быть причиной того, что узлы остаются и никогда не уменьшаются в масштабе?
Я не вижу другой причины, по которой узлы никогда не выходят из строя.
ОБНОВИТЬ: Я установил ресурс для процессора и установил автомасштабирование для развертываний, поэтому теперь для 'kubectl get hpa' я получаю:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
one-deployment Deployment/one-deployment 34%/80% 1 3 1 2m8s
two-deployment Deployment/two-deployment 47%/80% 1 3 1 8m16s
three-deployment Deployment/three-deployment 35%/80% 1 3 1 3m29s
four-deployment Deployment/four-deployment 33%/80% 1 3 1 2m48s
five-deployment Deployment/five-deployment 47%/80% 1 3 1 2m24s
Но все же у меня остается максимум 3 узла.
Еще одно обновление: Буду признателен за любые отзывы о том, что, по моему мнению, является итогом моего обучения. Я новичок в Kubernetes и GKE, прошу меня простить.
Во-первых, теперь я лучше понимаю, что есть автоматическое масштабирование узлов в кластерах, а затем есть автоматическое масштабирование подов на узлах.
В первую очередь мне нужно было разобраться с автоматическим масштабированием узлов в кластерах. Когда автомасштабирование включено в кластере, например, --enable-autoscaling --no-of-nodes 2 --min-nodes 1 --max-nodes 3. Затем я вызываю развертывание на 2 узлах , если требуется так мало ресурсов и модули могут перемещать узлы, тогда он может упасть до 1. Если указано --num-of-nodes 3, я бы развернул до трех, и это может привести к тому, что неподвижные модули будут распределены по всем три узла, предотвращающие возможность уменьшения масштаба до 2 или 1.
Поскольку, начиная с 1, мое приложение не смогло развернуться полностью, я установил для него значение 2.
Теперь перейдем к масштабированию моих развертываний, чтобы потенциально увеличить количество модулей: в консоли GCP GKE я выбрал «рабочую нагрузку», а затем одно из моих развертываний в списке модулей. Затем отсюда я выбираю «Действие» в меню вверху, а затем «Автоматическое масштабирование», я оставил по умолчанию 1 минимум и 3 максимума и согласился. Я повторил это для других 4 развертываний, которые у меня есть. Это горизонтальное масштабирование модуля, с которым я запутался, когда впервые начал рассматривать масштабирование кластера. Это то, о чем я получаю подробности, когда запускаю kubectl get hpa. Насколько я могу судить, это вообще не имеет отношения к масштабированию узла кластера.
Теперь мое приложение работает, и когда на мои модули будет достаточно нагрузки, сработает автомасштабирование hpa и создаст новые модули. Эти модули будут запускаться на моих существующих двух узлах, если не будет недостаточно места, в этот момент кластер (настроенный на максимальное количество 3) добавит третий узел и назначит новый модуль этому узлу.
Надеюсь, мой последний вопрос - сложил ли я два и два и получил 5?
Добро пожаловать в стек! Вот несколько вещей, которые могут вам помочь:
Кластерный автомат масштабирования уменьшит размер кластера, когда некоторые узлы постоянно недоиспользуются в течение значительного количества времени. Узел не нужен, если он не загружен и все его важные поды можно переместить в другое место.
Не имея дополнительной информации о вашей среде (как вы создали кластер, что в нем работает, какова ваша загрузка и т. д.) очень сложно угадать, но вот несколько типов модулей, которые могут помешать масштабированию кластера (Если у вас низкий уровень использования, я предполагаю, что контейнеры не могут быть выселены):
"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"
* Если модуль не имеет следующей аннотации (поддерживается в CA 1.0.3 или новее):
"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"
Или вы переопределили это поведение с помощью одного из соответствующих флагов. См. Ниже дополнительную информацию об этих флагах.
Как вы масштабируете свой кластер, чтобы иметь только один узел?
До версии 0.6 Cluster Autoscaler не касался узлов, на которых выполнялись важные модули системы куба, такие как DNS, Metrics Server, Dashboard и т. Д. Если эти модули попадали на разные узлы, CA не мог масштабировать кластер, и пользователь мог закончить работу. с полностью пустым 3-узловым кластером. В версии 0.6 мы добавили возможность сообщить CA, что некоторые системные модули можно перемещать. Если пользователь настраивает PodDisruptionBudget для модуля kube-system стратегия по умолчанию не касаться узла, на котором запущен этот модуль, переопределяется настройками PDB. Итак, чтобы включить миграцию подов kube-system, нужно установить minAvailable до 0 (или <= N, если имеется N + 1 реплик модуля).
Для устранения неполадок вы можете также проверить У меня есть пара узлов с низкой загрузкой, но они не уменьшены. Зачем?