Упражнение. Настройка пулов точечных узлов с помощью автомасштабирования кластера в кластере AKS
Пулы узлов пользователей Spot позволяют использовать неиспользуемую вычислительную емкость Azure по сниженным ценам, включая сценарии высокопроизводительных вычислений.
В предыдущем упражнении вы создали стандартный пул узлов пользователей, использовали автомасштабирование кластера для управления созданием узлов и масштабировали количество узлов вручную.
Следующим шагом является добавление пула точечных узлов пользователей с автоматическим масштабированием, чтобы снизить эксплуатационные затраты кластера. Использование кластера зависит от необходимых ресурсов и не предсказуемо, поэтому вы настраиваете правила для отслеживания пиков и спадов. Рабочая нагрузка развертывается с включенной аффинностью узлов, чтобы pod планировался на узлах в пуле эпизодических узлов.
Создание пула точечных узлов
Необходимо создать отдельный пул узлов, поддерживающий службу пакетной обработки. Этот пул узлов — это пул точечных узлов, использующий политику удаления и максимальную цену -1.
Выполните ту же команду
az aks nodepool add
, что и в предыдущем упражнении, чтобы добавить новый пул точечных узлов в кластер. Необходимо изменить имя пула узлов и добавить несколько дополнительных параметров, чтобы определить этот пул узлов в качестве пула точечных узлов.Введите следующие значения, чтобы задать параметры пула узлов:
- Имя:
batchprocpl2
- Приоритет:
Spot
- Политика выселения:
Delete
- Спотовая максимальная цена:
-1
Выполните следующую команду, чтобы создать пул точечных узлов:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl2 \ --enable-cluster-autoscaler \ --max-count 3 \ --min-count 1 \ --priority Spot \ --eviction-policy Delete \ --spot-max-price -1 \ --node-vm-size Standard_DS2_v2 \ --no-wait
Имейте в виду, что этот запрос может завершиться ошибкой из-за ограничений по пропускной способности в выбранной вами локации.
- Имя:
Выполните команду
az aks nodepool show
, чтобы отобразить сведения о новом пуле точечных узлов для службы пакетной обработки:az aks nodepool show \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl2
Ниже приведен пример выходных данных команды.
{ "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 3, "enableAutoScaling": true, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl2", "maxCount": 3, "maxPods": 110, "minCount": 1, "mode": "User", "name": "batchprocpl2", "nodeImageVersion": "AKSUbuntu-1604-2020.06.10", "nodeLabels": { "kubernetes.azure.com/scalesetpriority": "spot" }, "nodeTaints": [ "kubernetes.azure.com/scalesetpriority=spot:NoSchedule" ], "orchestratorVersion": "1.17.9", "osDiskSizeGb": 128, "osType": "Linux", "provisioningState": "Creating", "proximityPlacementGroupId": null, "resourceGroup": "akscostsavinggrp", "scaleSetEvictionPolicy": "Delete", "scaleSetPriority": "Spot", "spotMaxPrice": -1.0, "tags": null, "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": { "maxSurge": null }, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null }
В этом результате несколько значений отличаются от того, что вы видели в предыдущих пулах узлов. Давайте рассмотрим следующие элементы:
Значение свойства
enableAutoScaling
установлено вtrue
.Устанавливаются значения
maxCount
иminCount
.Для свойства
scaleSetEvictionPolicy
задано значениеDelete
.Для свойства
scaleSetPriority
задано значениеSpot
.Для свойства
spotMaxPrice
задано значение-1
.К этому пулу узлов применяются
nodeLabels
иnodeTaints
. Эти значения используются для планирования рабочих нагрузок на узлах в пуле узлов.
Настройка пространства имен
Выполните команду
kubectl create namespace
, чтобы создать пространство имен с именемcostsavings
для приложения. Это пространство имен будет использоваться для упрощения выбора рабочих нагрузок.kubectl create namespace costsavings
Ниже приведены выходные данные предыдущей команды:
namespace/costsavings created
Планирование pod с сопоставлением точечных узлов
Вы можете запланировать запуск pod на спотовом узле, добавив терпимость и аффинити в файл манифеста развертывания pod. Когда толерации и узловая аффинность соответствуют наложенным на точечные узлы загрязнениям и меткам, модуль (pod) планируется на этих узлах.
Узлы в пуле точечных узлов назначаются запятой, равные kubernetes.azure.com/scalesetpriority=spot:NoSchedule
и метке, равной kubernetes.azure.com/scalesetpriority=spot
. Используйте сведения в этой паре "ключ-значение" в разделе tolerations
и affinity
файла манифеста YAML для рабочих нагрузок. С помощью второго пула пакетной обработки, настроенного в качестве пула точечных узлов, теперь можно создать файл развертывания для планирования рабочих нагрузок для выполнения на нем.
Создайте файл манифеста для развертывания Kubernetes с именем
spot-node-deployment.yaml
с помощью встроенного редактора:code spot-node-deployment.yaml
Совет
Cloud Shell включает интегрированный редактор файлов. Редактор Cloud Shell поддерживает такие функции, как выделение языка, палитра команд и проводник. Для простого создания и редактирования файлов запустите редактор, выполнив
code .
в терминале Cloud Shell. Это действие открывает редактор с активным рабочим каталогом, заданным в терминале. Чтобы открыть файл манифеста непосредственно для быстрого редактирования, выполнитеcode spot-node-deployment.yaml
. Эта команда открывает редактор без проводника файлов.Вставьте следующий текст в файл:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent 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"
Нажмите клавиши CTRL+S , чтобы сохранить файл, а затем нажмите клавиши CTRL+Q, чтобы закрыть редактор.
Выполните команду
kubectl apply
, чтобы применить конфигурацию и развернуть приложение в пространстве именcostsavings
:kubectl apply \ --namespace costsavings \ -f spot-node-deployment.yaml
Ниже приведены выходные данные предыдущей команды:
pod/nginx created
Дополнительные сведения о работающем модуле pod можно получить с помощью флага
-o wide
при выполнении командыkubectl get pods
. В этом случае необходимо увидеть, на каком узле запланирован модуль pod. Убедитесь, что вы запросили pod в пространстве именcostsavings
.kubectl get pods --namespace costsavings -o wide
Выходные данные должны выглядеть следующим образом:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 43s 10.244.3.3 aks-batchprocpl2-25254417-vmss000000 <none> <none>
Обратите внимание на имя узла,
aks-batchprocpl2-25254417-vmss000000
. Этот узел является частью созданного ранее пула точечных узловbatchprocpl2
.