Настройте нескольких узлов и включите масштабирование до нуля с помощью AKS
Служба Azure Kubernetes позволяет создавать различные пулы узлов для сопоставления конкретных рабочих нагрузок с узлами, работающими в каждом пуле узлов. Процесс сопоставления рабочих нагрузок с узлами позволяет планировать использование и оптимизировать затраты.
Решение вашей компании для отслеживания дронов развернуто в службе Azure Kubernetes (AKS) в виде множества контейнерных приложений и служб. Ваша команда разработала новую службу прогнозного моделирования, позволяющую обрабатывать сведения о траекториях полетов в неблагоприятных погодных условиях и создавать оптимальные траектории. Эта служба требует поддержки виртуальных машин на базе GPU и выполняется только в определенные дни недели.
Вы хотите настроить отдельный пул узлов кластера для обработки сведений о траекториях полетов. Процесс выполняется всего несколько часов в день, и вы хотите использовать пул узлов на основе GPU. При этом вы хотите платить за узлы только тогда, когда вы их используете.
Давайте рассмотрим, как пулы узлов и как AKS использует узлы, а затем о том, как масштабировать количество узлов в пуле узлов.
Что такое пул узлов?
Пул узлов описывает группу узлов с одинаковой конфигурацией в кластере AKS. Эти узлы содержат базовые виртуальные машины, на которых выполняются ваши приложения. В кластере Kubernetes, управляемом AKS, можно создавать следующие объекты:
Пулы системных узлов
Пулы узлов пользователей
Пулы системных узлов
Пулы системных узлов размещают критически важные системные модули pod, составляющие плоскость управления кластера. Пул системных узлов позволяет использовать в качестве ОС узла только Linux и выполнять только рабочие нагрузки Linux. Узлы в пуле системных узлов резервируются для системных рабочих нагрузок и обычно не используются для выполнения пользовательских рабочих нагрузок. Каждый кластер AKS должен содержать хотя бы один системный пул узлов как минимум с одним узлом, и для узлов необходимо определить размеры базовых виртуальных машин.
Пулы узлов пользователей
Пулы узлов пользователей поддерживают ваши рабочие нагрузки и позволяют указать в качестве операционной системы узла Windows или Linux. Также можно определить размеры базовых виртуальных машин для узлов и выполнять определенные рабочие нагрузки. Например, решение для отслеживания дронов имеет службу пакетной обработки, развернутую в пуле узлов с конфигурацией для виртуальных машин общего назначения. Новая служба прогнозного моделирования требует более емких виртуальных машин на базе GPU. Вы решили создать отдельный пул узлов и настроить его для использования узлов с поддержкой GPU.
Количество узлов в пуле узлов
В пуле узлов можно настроить до 100 узлов. При этом выбор количества узлов для настройки зависит от количества объектов pod, выполняемых на каждом узле.
Например, в пуле системных узлов важно, чтобы на одном узле выполнялось не более 30 объектов pod. При таком значении в системе будет достаточно места для выполнения системных объектов pod, критически важных для работоспособности кластера. Если число модулей pod превышает это минимальное значение, новые узлы требуются в пуле для планирования дополнительных рабочих нагрузок. По этой причине в пуле системных узлов должен быть как минимум один узел. Для рабочих сред рекомендуется использовать в пуле системных узлов не менее трех узлов.
Пулы узлов пользователей предназначены для выполнения пользовательских рабочих нагрузок и не требуют минимум 30 объектов pod. Пулы узлов пользователей позволяют устанавливать количество узлов в пуле равным нулю.
Управление нуждами приложений в кластере AKS
В AKS при увеличении или уменьшении объема вычислительных ресурсов в кластере Kubernetes выполняется масштабирование. Можно масштабировать количество экземпляров рабочей нагрузки, которые необходимо запустить, или количество узлов, на которых выполняются эти рабочие нагрузки. Рабочие нагрузки, управляемые AKS, можно масштабировать одним из двух способов. Первый вариант — это масштабировать объекты pod или узлы вручную. Второй вариант — это автоматизация, в которой можно использовать горизонтальное автомасштабирование pod для масштабирования модулей pod и автомасштабирования кластера для масштабирования узлов.
Масштабирование пула узлов вручную
Если вы выполняете рабочие нагрузки, которые выполняются в течение определенной длительности с определенными известными интервалами, масштабирование размера пула узлов вручную является хорошим способом управления затратами на узел.
Предположим, что для службы прогнозного моделирования требуется пул узлов на основе GPU и выполняется в течение часа каждый день в полдень. Можно создать пул узлов с определенными узлами с графическими процессорами и масштабировать его до нуля узлов, когда кластер не используется.
Ниже показан пример команды az aks node pool add
, который можно использовать для создания пула узлов. Обратите внимание на параметр --node-vm-size
— он используется для указания размера виртуальной машины на базе GPU Standard_NC6
для узлов в пуле.
az aks nodepool add \
--resource-group resourceGroup \
--cluster-name aksCluster \
--name gpunodepool \
--node-count 1 \
--node-vm-size Standard_NC6 \
--no-wait
Когда пул будет готов, можно с помощью команды az aks nodepool scale
масштабировать этот пул узлов до нуля узлов. Обратите внимание на то, что параметр --node-count
имеет нулевое значение. Вот пример этой команды:
az aks nodepool scale \
--resource-group resourceGroup \
--cluster-name aksCluster \
--name gpunodepool \
--node-count 0
Автоматическое масштабирование кластера
Служба AKS использует средство автомасштабирования кластера Kubernetes для автоматического масштабирования рабочих нагрузок. Доступно два варианта масштабирования кластера:
Средство горизонтального авто масштабирования объектов pod
Средство автомасштабирования кластера
Рассмотрим каждый из двух вариантов, начиная со средства горизонтального автомасштабирования объектов pod.
Средство горизонтального автомасштабирования объектов pod
Средство горизонтального автомасштабирования объектов pod в Kubernetes отслеживает потребность кластера в ресурсах и автоматически масштабирует количество реплик рабочей нагрузки.
Сервер метрик Kubernetes собирает метрики памяти и процессоров с контроллеров, узлов и контейнеров, выполняемых в кластере AKS. Один из способов доступа к этой информации — API метрик. Горизонтальное средство автомасштабирования pod проверка API метрик каждые 30 секунд, чтобы решить, требуется ли приложению больше экземпляров для удовлетворения требуемого спроса.
Допустим, у вашей компании есть служба пакетной обработки, которая планирует маршруты дронов. Вы заметите, что служба запущена запросами и создает невыполненную работу поставок, что приводит к задержкам и разочарованиям для клиентов. Увеличение количества реплика службы пакетной обработки может обеспечить своевременное обработку заказов.
Чтобы устранить проблему, вы настроите горизонтальное автомасштабирование pod, чтобы увеличить количество реплика служб при необходимости. При уменьшении числа пакетных запросов оно уменьшает количество реплика службы.
При этом средство горизонтального автомасштабирования объектов pod масштабирует объекты pod только на доступных узлах в настроенных пулах узлов кластера.
Средство автомасштабирования кластера
Ограничение ресурсов активируется, когда горизонтальное автомасштабирование pod не может запланировать другой модуль pod на существующих узлах в пуле узлов. Чтобы масштабировать количество узлов в пулах узлов кластера во время ограничений, необходимо использовать автомасштабирование кластера. Средство автомасштабирования кластера проверяет заданные метрики и масштабирует количество узлов в большую или меньшую сторону в зависимости от требуемых вычислительных ресурсов.
Средство автомасштабирования кластера применяется параллельно со средством горизонтального автомасштабирования объектов pod.
Средство автомасштабирования кластера отслеживает события увеличения и уменьшения масштаба и позволяет кластеру Kubernetes изменять количество узлов в пуле узлов при изменении потребностей в ресурсах.
Для каждого пула узлов настраиваются отдельные правила масштабирования. Например, может потребоваться настроить только один пул узлов, чтобы разрешить автомасштабирование, или можно настроить пул узлов для масштабирования только до определенного количества узлов.
Важно!
Включая средство автомасштабирования кластера в пуле узлов, вы лишаетесь возможности масштабировать количество узлов до нуля. Вместо этого можно задать минимальное число для экономии ресурсов кластера.