Упражнение. Настройка пулов точечных узлов с помощью средства автомасштабирования кластера в кластере AKS
Пулы узлов пользователей позволяют получить доступ к неиспользуемой вычислительной емкости 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
, который вы создали ранее.