Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В рамках инструкций в этой статье вы добавите вторичный пул точечных узлов в существующий кластер Службы Azure Kubernetes (AKS).
Пул узлов Spot — это пул узлов, поддерживаемый масштабируемым набором виртуальных машин Azure Spot. С помощью точечных виртуальных машин в кластере AKS можно воспользоваться неиспользуемой емкостью Azure с значительной экономией затрат. Объем доступной неиспользуемой емкости зависит от многих факторов, таких как размер узла, регион и время дня.
При развертывании пула узлов Spot Azure выделяет узлы Spot при наличии свободной емкости и развертывает масштабируемый набор узлов Spot, который поддерживает пул узлов Spot в рамках единственного домена по умолчанию. Для точечных узлов не предусмотрено соглашение об уровне обслуживания. Нет гарантий высокого уровня доступности. Если Azure нуждается в емкости, инфраструктура Azure вытесняет точечные узлы.
Точечные узлы отлично подходят для рабочих нагрузок, которые могут справляться с прерыванием, ранним завершением и вытеснением. Например, рабочие нагрузки, такие как задания пакетной обработки, среды разработки и тестирования, а также большие вычислительные рабочие нагрузки могут быть хорошими кандидатами для планирования в пуле точечных узлов.
Прежде чем начать
- В этой статье предполагается наличие базового понимания принципов работы Kubernetes и Azure Load Balancer. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).
- Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
- При создании кластера для использования пула Spot-узлов кластер должен использовать Масштабируемые наборы виртуальных машин для пулов узлов и балансировщик нагрузки SKU уровня Standard. После создания кластера необходимо также добавить другой пул узлов, который рассматривается в этом руководстве.
- Для работы с этой статьей требуется Azure CLI версии 2.14 или более поздней. Чтобы узнать версию, выполните команду
az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Ограничения
При создании и администрировании кластеров AKS с пулом точечных узлов действуют следующие ограничения:
- Пул точечных узлов не может быть пулом узлов по умолчанию, его можно использовать только в качестве дополнительного пула.
- Одновременно нельзя обновить плоскость управления и пулы узлов. Необходимо обновить их по отдельности или удалить пул точечных узлов, чтобы одновременно обновить уровень управления и остальные пулы узлов.
- Пул точечных узлов должен использовать Масштабируемые наборы виртуальных машин.
- Невозможно изменить
ScaleSetPriorityилиSpotMaxPriceпосле создания. - При установке
SpotMaxPriceзначение должно иметь значение -1 или положительное значение с до пяти десятичных разрядов. - Пул Spot-узлов имеет метку
kubernetes.azure.com/scalesetpriority:spot, таинтkubernetes.azure.com/scalesetpriority=spot:NoSchedule, и системные поды имеют антиаффинность. - Необходимо добавить соответствующий допуск и сходство для планирования рабочих нагрузок в пуле точечных узлов.
Добавление пула точечных узлов в кластер AKS
При добавлении пула точечных узлов в существующий кластер он должен быть кластером с несколькими пулами узлов. При создании кластера AKS с включенным несколькими пулами узлов создается пул узлов с priorityRegular заданным по умолчанию. Чтобы добавить пул точечных узлов, необходимо указать Spot в качестве значения для priority. Дополнительные сведения о создании кластера AKS с несколькими пулами узлов см. в этой статье.
- Создайте пул узлов с
prioritySpotпомощьюaz aks nodepool addкоманды.
export SPOT_NODEPOOL="spotnodepool"
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER \
--name $SPOT_NODEPOOL \
--priority Spot \
--eviction-policy Delete \
--spot-max-price -1 \
--enable-cluster-autoscaler \
--min-count 1 \
--max-count 3 \
--no-wait
В предыдущей команде компонент priority из Spot делает пул узлов пулом Spot. Параметр eviction-policy имеет Deleteзначение , которое является значением по умолчанию. При установке политикиDeleteвытеснения узлы в базовом масштабируемом наборе пула узлов удаляются при вытеснения.
Вы также можете задать для политики Deallocateвытеснения значение, при котором узлы в базовом масштабируемом наборе переводятся в состояние остановлено-освобождено при вытеснении. Узлы в счетчике остановленного состояния в квоте вычислений и могут вызвать проблемы с масштабированием кластера или обновлением. Значения priority и eviction-policy значения можно задать только во время создания пула узлов. Эти значения невозможно обновить позже.
Предыдущая команда также включает автомасштабирование кластера, которое рекомендуется использовать с пулами узлов Spot. На основе рабочих нагрузок, выполняемых в кластере, автомасштабирование кластера масштабирует количество узлов вверх и вниз. Для пулов точечных узлов средство автомасштабирования кластера будет увеличивать количество узлов после вытеснения, если будет необходимость в дополнительных узлах. При изменении максимального количества узлов, которое может иметь пул узлов, также необходимо настроить значение maxCount, связанное со средством автомасштабирования кластера. Если вы не используете автомасштабировщик кластера, при вытеснении пул точечных узлов в конечном итоге уменьшится до 0 и потребует ручной операции для получения дополнительных точечных узлов.
Внимание
Планируйте для пулов точечных узлов только рабочие нагрузки, которые могут справляться с прерыванием, например задания пакетной обработки и среды тестирования. Рекомендуется настроить ограничения и терпимые значения в пуле точечных узлов, чтобы убедиться, что в пуле точечных узлов запланированы только рабочие нагрузки, которые могут обрабатывать вытеснения узлов. Например, приведенная выше команда добавляет фрагмент kubernetes.azure.com/scalesetpriority=spot:NoScheduleкода, поэтому на этом узле запланированы только модули pod с соответствующей терпимости.
Проверка пула точечных узлов
- Убедитесь, что пул узлов был добавлен с помощью команды
az aks nodepool show, и подтвердите, чтоscaleSetPriorityравноSpot.
az aks nodepool show --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER --name $SPOT_NODEPOOL
Результаты:
{
"artifactStreamingProfile": null,
"availabilityZones": null,
"capacityReservationGroupId": null,
"count": 3,
"creationData": null,
"currentOrchestratorVersion": "1.30.10",
"eTag": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"enableAutoScaling": true,
"enableCustomCaTrust": false,
"enableEncryptionAtHost": false,
"enableFips": false,
"enableNodePublicIp": false,
"enableUltraSsd": false,
"gatewayProfile": null,
"gpuInstanceProfile": null,
"gpuProfile": null,
"hostGroupId": null,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/xxxxxxxxxxxxxxxx/providers/Microsoft.ContainerService/managedClusters/xxxxxxxxxxxxxxxx/agentPools/xxxxxxxxxxxx",
"kubeletConfig": null,
"kubeletDiskType": "OS",
"linuxOsConfig": null,
"maxCount": 3,
"maxPods": 30,
"messageOfTheDay": null,
"minCount": 1,
"mode": "User",
"name": "xxxxxxxxxxxx",
"networkProfile": {
"allowedHostPorts": null,
"applicationSecurityGroups": null,
"nodePublicIpTags": null
},
"nodeImageVersion": "AKSUbuntu-2204gen2containerd-xxxxxxxx.xx.x",
"nodeInitializationTaints": null,
"nodeLabels": {
"kubernetes.azure.com/scalesetpriority": "spot"
},
"nodePublicIpPrefixId": null,
"nodeTaints": [
"kubernetes.azure.com/scalesetpriority=spot:NoSchedule"
],
"orchestratorVersion": "x.xx.xx",
"osDiskSizeGb": 128,
"osDiskType": "Managed",
"osSku": "Ubuntu",
"osType": "Linux",
"podIpAllocationMode": null,
"podSubnetId": null,
"powerState": {
"code": "Running"
},
"provisioningState": "Creating",
"proximityPlacementGroupId": null,
"resourceGroup": "xxxxxxxxxxxxxxxx",
"scaleDownMode": "Delete",
"scaleSetEvictionPolicy": "Delete",
"scaleSetPriority": "Spot",
"securityProfile": {
"enableSecureBoot": false,
"enableVtpm": false,
"sshAccess": "LocalUser"
},
"spotMaxPrice": -1.0,
"status": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"typePropertiesType": "VirtualMachineScaleSets",
"upgradeSettings": {
"drainTimeoutInMinutes": null,
"maxSurge": null,
"maxUnavailable": null,
"nodeSoakDurationInMinutes": null,
"undrainableNodeBehavior": null
},
"virtualMachineNodesStatus": null,
"virtualMachinesProfile": null,
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null,
"windowsProfile": null,
"workloadRuntime": "OCIContainer"
}
Планирование запуска модуля pod на узле "Место"
Чтобы запланировать выполнение pod на Spot узел, можно добавить допуск и соответствие узлу, соответствующее метке, применённой к Spot узлу.
В следующем примере показана часть YAML-файла с определением толерантности, соответствующей kubernetes.azure.com/scalesetpriority=spot:NoSchedule пятну, и привязки узлов, которая соответствует kubernetes.azure.com/scalesetpriority=spot метке, использованной на предыдущем шаге, и правилами сходства с узлом requiredDuringSchedulingIgnoredDuringExecution и preferredDuringSchedulingIgnoredDuringExecution.
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"
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
При развертывании модуля с этим допуском и взаимодействием с узлами Kubernetes успешно планирует модуль на узлах с применением таинта и метки. В этом примере применяются следующие правила:
- Узел должен иметь метку с ключом
kubernetes.azure.com/scalesetpriority, а значение этой метки должно бытьspot. - Узел предпочтительно имеет метку с ключом
another-node-label-key, а значение этой метки должно бытьanother-node-label-value.
Дополнительные сведения см. в разделе "Назначение модулей pod узлам".
Обновление пула узлов типа Spot
При обновлении пула узлов Spot, AKS автоматически устанавливает кордон и выдает уведомление о вытеснении, но очистка не выполняется. Для обновлений пула точечных узлов не предусмотрены узлы всплеска нагрузки. Кроме этих изменений, поведение при обновлении пулов узлов Spot аналогично поведению других типов пулов узлов.
Дополнительные сведения об обновлении см. в статье об обновлении кластера AKS.
Максимальная цена для пула Spot-экземпляров
Цены на спотовые экземпляры зависят от региона и SKU. Дополнительные сведения см. в разделе о ценах на Linux и Windows.
С переменными ценами вы можете задать максимальную цену в долларах США (USD) с использованием до пяти десятичных разрядов. Например, значение 0,98765 будет максимальной ценой $ 0,98765 USD в час. Если вы укажете для максимальной цены значение -1, экземпляр не будет вытесняться по критерию цены. До тех пор, пока есть емкость и квота, цена для экземпляра будет более низкой ценой текущей цены для экземпляра Spot или для стандартного экземпляра.
Следующие шаги
Из этой статьи вы узнали, как добавить пул точечных узлов в кластер AKS. Дополнительные сведения об управлении модулями Pod в пулах узлов см. в разделе рекомендации по использованию расширенных функций планировщика в AKS.