Добавление пула точечных узлов Azure в кластер Службы Kubernetes Azure (AKS)
Пул точечных узлов — это пул узлов, который использует масштабируемый набор точечных виртуальных машин Azure. Использование точечных виртуальных машин как узлов в кластере AKS позволяет задействовать невостребованную вычислительную емкость Azure со значительной экономией средств. Объем доступной невостребованной вычислительной емкости будет зависеть от многих факторов, включая размер узла, регион и время дня.
При развертывании пула точечных узлов Azure выделит точечные узлы при наличии доступной вычислительной емкости. Но для точечных узлов не предусмотрено соглашение об уровне обслуживания. Масштабируемый набор точечных узлов, поддерживающий пул точечных узлов, развертывается в одном домене сбоя и не гарантирует высокого уровня доступности. В любое время, когда эта емкость становится нужна, инфраструктура Azure вытесняет точечные узлы.
Точечные узлы отлично подходят для рабочих нагрузок, которые могут справляться с прерыванием, ранним завершением и вытеснением. Например, для работы в пуле точечных узлов могут хорошо подходить задания пакетной обработки, среды разработки и тестирования, а также крупные вычислительные рабочие нагрузки.
В рамках инструкций в этой статье вы добавите вторичный пул точечных узлов в существующий кластер Службы Azure Kubernetes (AKS).
В этой статье предполагается наличие базового понимания принципов работы Kubernetes и Azure Load Balancer. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Перед началом
Кластер, создаваемый для пула точечных узлов, должен использовать Масштабируемые наборы виртуальных машин для пулов узлов и подсистемы балансировки нагрузки ценовой категории Стандартный. Кроме того, после создания кластера необходимо добавить еще один пул узлов. (Этот процесс рассматривается в следующем шаге.)
Для работы с этой статьей требуется Azure CLI версии 2.14 или более поздней. Чтобы узнать версию, выполните команду az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Ограничения
При создании и администрировании кластеров AKS с пулом точечных узлов действуют следующие ограничения:
- Пул точечных узлов не может быть для кластера пулом узлов по умолчанию. Пул точечных узлов можно использовать только в качестве вторичного пула.
- Невозможно одновременно обновить уровень управления и пулы узлов. Необходимо обновить их по отдельности или удалить пул точечных узлов, чтобы одновременно обновить уровень управления и остальные пулы узлов.
- Пул точечных узлов должен использовать Масштабируемые наборы виртуальных машин.
- После создания невозможно изменить ScaleSetPriority или SpotMaxPrice.
- При настройке SpotMaxPrice значение должно равняться -1 или быть положительным значением, включающим до пяти знаков после запятой.
- Пул точечных узлов будет иметь метку kubernetes.azure.com/scalesetpriority:spot и отметку kubernetes.azure.com/scalesetpriority=spot:NoSchedule, а у системных объектов pod будет отсутствовать сходство.
- Необходимо добавить соответствующий допуск и сходство для планирования рабочих нагрузок в пуле точечных узлов.
Добавление пула точечных узлов в кластер AKS
Пул точечных узлов нужно добавить в существующий кластер, в котором включено несколько пулов узлов. Дополнительные сведения о создании кластера AKS с несколькими пулами узлов см. в этой статье.
Создайте пул узлов с помощью команды az aks nodepool add:
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name spotnodepool \
--priority Spot \
--eviction-policy Delete \
--spot-max-price -1 \
--enable-cluster-autoscaler \
--min-count 1 \
--max-count 3 \
--no-wait
По умолчанию пул узлов создается со значением приоритета (priority) Regular (Обычный) в кластере AKS при создании кластера с несколькими пулами узлов. Приведенная выше команда добавляет вспомогательный пул узлов в существующий кластер AKS со значением priority равным Spot (Точечный). Значение Spot параметра priority преобразует пул узлов в точечный. В приведенном выше примере параметр политики вытеснения (eviction-policy) имеет значение Delete (Удалить), что является значением по умолчанию. При установке для параметра eviction-policy значения Delete узлы базового масштабируемого набора пула узлов удаляются при их вытеснении. Вы также можете задать политику вытеснения Deallocate (Освободить). При настройке политики вытеснения Deallocate узлы в базовом масштабируемом наборе переводятся после вытеснения в состояние stopped-deallocated (остановлены и освобождены). Узлы в таком состоянии учитываются в квоте вычислений и могут вызвать проблемы с масштабированием или обновлением кластера. Значения priority и eviction-policy можно задать только во время создания пула узлов. Эти значения невозможно обновить позже.
Команда также включает средство автомасштабирования кластера, которое рекомендуется использовать с пулами точечных узлов. В зависимости от рабочих нагрузок, выполняемых в кластере, средство автомасштабирования кластера увеличивает и уменьшает количество узлов в пуле. Для пулов точечных узлов средство автомасштабирования кластера будет увеличивать количество узлов после вытеснения, если будет необходимость в дополнительных узлах. При изменении максимального количества узлов, которое может иметь пул узлов, также необходимо настроить значение maxCount
, связанное со средством автомасштабирования кластера. Если вы не используете средство автомасштабирования кластера, при вытеснении точечный пул в итоге уменьшится до нуля и потребует выполнения операции вручную, чтобы получить какие-либо дополнительные точечные узлы.
Важно!
Планируйте для пулов точечных узлов только рабочие нагрузки, которые могут справляться с прерыванием, например задания пакетной обработки и среды тестирования. Рекомендуется настроить в пуле точечных узлов отметки и допуски, чтобы в нем планировались только рабочие нагрузки, которые могут обрабатывать вытеснение узла. Например, приведенная выше команда по умолчанию добавляет отметку kubernetes.azure.com/scalesetpriority=spot:NoSchedule, чтобы на этом узле были запланированы только объекты pod с соответствующим допуском.
Проверка пула точечных узлов
Проверьте, добавлен ли пул узлов в качестве пула точечных узлов:
az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --name spotnodepool
Убедитесь, что для параметра scaleSetPriority задано значение Spot.
Чтобы запланировать выполнение объекта pod на точечном узле, добавьте допуск и сходство узлов, соответствующие отметке, примененной к точечному узлу. В следующем примере показана часть файла YAML, определяющая допуск, соответствующий отметке kubernetes.azure.com/scalesetpriority=spot:NoSchedule, и сходство узлов, соответствующее метке kubernetes.azure.com/scalesetpriority=spot, используемой на предыдущем шаге.
spec:
containers:
- name: spot-example
tolerations:
- key: "kubernetes.azure.com/scalesetpriority"
operator: "Equal"
value: "spot"
effect: "NoSchedule"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "kubernetes.azure.com/scalesetpriority"
operator: In
values:
- "spot"
...
При развертывании объекта pod с таким допуском и сходством узлов Kubernetes может успешно запланировать этот pod на узлах с примененными отметкой и меткой.
Обновление пула точечных узлов
Обновление пулов точечных узлов ранее не поддерживалось, но теперь эта операция доступна. При обновлении пула точечных узлов AKS выдает внутреннее уведомление о блокировке и вытеснении, но режим стока не применяется. Для обновлений пула точечных узлов не предусмотрены узлы всплеска нагрузки. За исключением этих изменений, поведение при обновлении пулов точечных узлов соответствует работе пулов узлов других типов.
Дополнительные сведения об обновлении см. в статье Обновление кластера AKS и в разделе с информацией о команде az aks upgrade для Azure CLI.
Максимальная цена для пула точечных узлов
Цена на экземпляры точечных виртуальных машин зависит от региона и ценовой категории. Дополнительные сведения см. на страницах с информацией о ценах на виртуальные машины Linux и Windows.
Переменное ценообразование позволяет вам задать максимальную цену в долларах США (USD) с точностью до 5 знаков после запятой. Например, значение 0,98765 определяет максимальную цену 0,98765 долларов США в час. Если вы укажете для максимальной цены значение -1, экземпляр не будет вытесняться по критерию цены. Цена на такой экземпляр будет определяться меньшим из двух значений: текущей цены на экземпляр точечной или стандартной виртуальной машины, но только при условии наличия емкости и соблюдения квоты.
Дальнейшие действия
Из этой статьи вы узнали, как добавить пул точечных узлов в кластер AKS. Дополнительные сведения об управлении модулями Pod в пулах узлов см. в разделе рекомендации по использованию расширенных функций планировщика в AKS.