Автомасштабирование GKE не уменьшает масштаб

Мы используем GKE (Google Kubernetes Engine) для запуска Airflow в GCC (Google Cloude Composer) для нашего конвейера данных.

Мы начали с 6 узлов и поняли, что затраты резко выросли, и мы не использовали так много ЦП. Поэтому мы подумали, что можем снизить максимум, но также включить автоматическое масштабирование.

Поскольку мы запускаем конвейер в ночное время, а днем ​​выполняем только небольшие задания, мы хотели запустить автоматическое масштабирование между 1-3 узлами.

Итак, в пуле узлов GKE мы включили автомасштабирование, но не в группе экземпляров GCE, как они рекомендуют. Однако получаем следующее:  Пул узлов не масштабируется

Почему это?

Ниже приведен график использования нашего ЦП за последние 4 дня:  введите описание изображения здесь

Мы никогда не пропускаем 20% использования, так почему же он не уменьшается?

Сегодня утром мы вручную уменьшили его до 3 узлов ..


comment
Выполните любое из применимы эти элементы устранения неполадок?   -  person Aleksi    schedule 26.08.2019


Ответы (3)


Cloud Composer еще не поддерживает (по состоянию на 26.08.2019) автоматическое масштабирование кластера GKE, поскольку автоматическое масштабирование кластера принимает решения о масштабировании на основе запросы ресурсов модулей, а также сколько Модули находятся в состоянии без возможности планирования (дополнительную информацию см. здесь ). Composer развертывает фиксированное количество модулей, что означает, что механизм автомасштабирования не вызывает никаких действий масштабирования, если вы сами не развертываете свои собственные рабочие нагрузки в кластере.

Автоматическое масштабирование также сложно выполнить, потому что фактическое использование ресурсов, которое рабочий или планировщик Airflow зависит от того, сколько DAG вы загружаете (в GCS, в случае Composer), а это означает, что нет точной оценки того, сколько ЦП / памяти будут использовать ваши процессы Airflow. . Это означает, что вы не знаете, как принимать решения о запросах ресурсов Pod для Airflow Pods.


В отсутствие автомасштабирования остается множество вариантов динамического распределения ресурсов. Например, вы можете использовать KubernetesPodOperator для развертывания модулей с запросами ресурсов в другом кластере Kubernetes, в котором действительно включено автомасштабирование. В качестве альтернативы вы можете использовать операторы GCE для добавления экземпляров в кластер перед запуском более ресурсоемких рабочих нагрузок.

person hexacyanide    schedule 26.08.2019
comment
Спасибо! Это ответ на мой вопрос. Немного сложнее, чем мы надеялись. Я думаю, что мы склоняемся к использованию операторов GCE и добавлению экземпляров во время наших ночных прогонов. - person Andreas Rolén; 27.08.2019
comment
Я попытался использовать операторы GCE для остановки и запуска экземпляров в моем кластере, но это не сработало, как я ожидал. Когда я остановил экземпляр с помощью API, он автоматически снова началось через несколько минут. Я предполагаю, что это связано с тем, что пул узлов установлен на 3 экземпляра, и как только он понимает, что один из узлов остановился, он автоматически запускает его снова. Вы имели в виду, что мы могли бы использовать этот оператор @hexacyanide? - person Andreas Rolén; 28.08.2019
comment
Я написал несколько статей об автоматическом масштабировании композитора. link.medium.com/AMUlwUIkD0 есть некоторые расчеты для ресурса запрос тоже. Проверьте это - person Joshua H; 09.10.2019

Первое, что я хочу упомянуть, это то, что процесс уменьшения масштаба запускается, когда в кластере существуют недоиспользуемые узлы. В этом контексте «недоиспользование» связано не только с загрузкой ЦП, поэтому ваши рассуждения не совсем верны.

Как сказано в документации, условием является то, что сумма запросов процессора и памяти всех модулей, работающих на этом узле, меньше порога использования, определенного для автомасштабирования. Затем, «если в узле нет необходимости более 10 минут, он будет отключен». См. это для получения дополнительной информации.

Также важно знать, что есть некоторые другие факторы, которые могут помешать процессу уменьшения масштаба, например, лимиты автоматической подготовки узлов. Отметьте this для получения дополнительной информации о модулях, которые могут помешать автоматическому масштабированию кластера удалить узел.

person Alex6Zam    schedule 26.08.2019

Так что немного странно, что вы говорите «не поддерживается» его k8s. Включите автоматическое масштабирование кластера GKE, как указано здесь:

gcloud container clusters update [CLUSTER_NAME] --enable-autoscaling \
    --min-nodes 1 --max-nodes 10 --zone [COMPUTE_ZONE] --node-pool default-pool 

это пул узлов по умолчанию, если вы создали новый пул, используйте его.

Перейдите к развертыванию airflow-worker и добавьте в это развертывание сразу после name: airflow-worker или ports:

resource:
  requests:
    cpu: 400m

Затем после этого выполните автоматическое масштабирование развертывания следующим образом:

kubectl autoscale deployment airflow-worker --cpu-percent=95 --min=1 --max=10 -n <your namespace>

В моем случае он работает как шарм, он масштабирует как узлы, так и модули для моего развертывания воздушного потока.

PoC:

$ kubectl get hpa -n  <my-namespace> -w   
  • ИМЯ ССЫЛКА ЦЕЛИ MINPODS MAXPODS REPLICAS AGE
  • airflow-worker Deployment / airflow-worker / 95% 1 3
    0 13s
  • airflow-worker Развертывание / airflow-worker 20% / 95% 1 10 1 29 м
  • airflow-worker Развертывание / airflow-worker 27% / 95% 1 10 2 29 м
  • airflow-worker Развертывание / airflow-worker 30% / 95% 1 10 3 29м
  • airflow-worker Развертывание / airflow-worker 53% / 95% 1 10 3 29m
  • airflow-worker Deployment / airflow-worker 45% / 95% 1 10 3 34 м
  • airflow-worker Deployment / airflow-worker 45% / 95% 1 10 3 34 м
  • airflow-worker Deployment / airflow-worker 28% / 95% 1 10 2 34 м
  • airflow-worker Развертывание / airflow-worker 32% / 95% 1 10 2 35
  • airflow-worker Развертывание / airflow-worker 37% / 95% 1 10 2 43м
  • airflow-worker Deployment / airflow-worker 84% / 95% 1 10 1 43 м
  • airflow-worker Deployment / airflow-worker 39% / 95% 1 10 1 44 м
  • airflow-worker Развертывание / airflow-worker 29% / 95% 1 10 1 44 м

Вы можете видеть, что через некоторое время он уменьшается до 1pod. То же, что и пул узлов, уменьшается до 4 узлов вместо 5-6-7.

person Xao    schedule 04.10.2019
comment
Хм, хорошо, я разберусь с этим и попробую проверить, работает ли это! Спасибо! - person Andreas Rolén; 04.10.2019
comment
Так как это было? - person Xao; 17.10.2019
comment
В настоящее время вы можете настроить автомасштабирование, если хотите изменить конфигурацию Kubernetes. Однако Composer не может гарантировать, что эта конфигурация не будет перезаписана при обновлении среды или обновлении. - person hexacyanide; 13.08.2020