Упражнение - Настройка нескольких узлов и включение функции масштабирования до нуля в кластере AKS
Служба Azure Kubernetes позволяет создавать разные пулы узлов для сопоставления определенных рабочих нагрузок с узлами, работающими в каждом пуле узлов.
Вспомните из примера отслеживания дронов, что ваша команда разработала новую службу прогнозного моделирования, которая обрабатывает сведения о пути полета в экстремальных погодных условиях и создает оптимальные маршруты полета. Эта служба требует поддержки виртуальной машины на основе GPU и работает только в определенные дни в течение недели. Команда хочет убедиться, что виртуальные машины не используются, когда служба не запускается.
Здесь вы создадите управляемый с помощью Azure Kubernetes Service (AKS) кластер Kubernetes. Затем вы настроите кластер для поддержки нескольких пулов узлов и позволите кластерам масштабировать эти узлы. Затем вы добавите второй пул узлов для поддержки рабочих нагрузок пользователей с динамическим числом узлов. Наконец, вы масштабируете количество узлов до нуля, чтобы сократить затраты на узлы, используемые в кластере AKS.
Создание новой группы ресурсов
Войдите в Azure Cloud Shell с помощью учетной записи Azure. Выберите версию оболочки Bash для Cloud Shell.
Вы будете повторно использовать значения, создаваемые здесь во всех упражнениях в этом модуле. Сохраните выходные данные для дальнейшего использования.
Выберите регион для размещения группы ресурсов. Функции из последующих упражнений недоступны во всех регионах. По этой причине мы рекомендуем использовать регион eastus. Если вы решили использовать другое значение, измените значение
REGION_NAME
.Выполните следующие команды, чтобы зарегистрировать переменные:
REGION_NAME=eastus RESOURCE_GROUP=rg-akscostsaving AKS_CLUSTER_NAME=akscostsaving-$RANDOM
Совет
Можно использовать кнопку "Копировать ", чтобы скопировать команды в буфер обмена. Чтобы вставить, щелкните правой кнопкой мыши новую строку в терминале Cloud Shell и выберите вставитьили используйте сочетание клавиш SHIFT+Insert ('+V в macOS).
Вы можете проверить каждое значение, выполнив команду
echo
; например,echo $REGION_NAME
.Запишите ваш
AKS_CLUSTER_NAME
. В ходе упражнений вы будете использовать это значение позже для очистки и настройки для кластера.echo $AKS_CLUSTER_NAME
Создайте новую группу ресурсов с именем rg-akscostsaving. Вы развернете все ресурсы, создаваемые в этих упражнениях, в эту группу ресурсов. Одна группа ресурсов упрощает очистку ресурсов после завершения модуля.
az group create \ --name $RESOURCE_GROUP \ --location $REGION_NAME
Создание кластера AKS
С помощью созданной группы ресурсов можно создать кластеры AKS в группе. Первым шагом является получение версии Kubernetes в выбранном регионе. Эта версия настроена для настройки кластера.
Чтобы получить версию Kubernetes, выполните команду
az aks get-versions
. Следующий запрос возвращает версию Kubernetes без предварительной версии. Сохраните это значение в переменной Bash с именемVERSION
. Чтобы получить и сохранить номер версии, выполните следующую команду:VERSION=$(az aks get-versions \ --location $REGION_NAME \ --query "values[?isPreview==null].version | [-1]" \ --output tsv) echo $VERSION
Выполните команду
az aks create
, чтобы создать кластер AKS. Кластер выполняется с двумя узлами в пуле узлов системы. Эта команда может занять несколько минут для выполнения.az aks create \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --location $REGION_NAME \ --kubernetes-version $VERSION \ --node-count 2 \ --load-balancer-sku standard \ --vm-set-type VirtualMachineScaleSets \ --generate-ssh-keys
Команда
az aks create
имеет несколько параметров, которые позволяют точно настроить кластер Kubernetes. Существует два важных параметра при настройке правильной поддержки в кластере для масштабирования и нескольких пулов узлов:Параметр и значение Описание --load-balancer-sku standard
Поддержка балансировщика нагрузки по умолчанию в AKS basic
. Подсистема балансировки нагрузкиbasic
не поддерживается при использовании нескольких пулов узлов. Установите значение какstandard
.--vm-set-type VirtualMachineScaleSets
Для работы с функциями масштабирования в AKS необходимы наборы виртуальных машин с возможностью масштабирования. Этот параметр обеспечивает поддержку масштабируемых наборов. Обратите внимание, что два узла настроены в пуле узлов по умолчанию с помощью параметра
--node-count 2
. Помните из предыдущего описания, что основные системные службы выполняются в этом пуле системных узлов. Важно, чтобы производственные кластеры использовали как минимум--node-count 3
для обеспечения надежности работы кластера. В этом упражнении мы используем только два узла из соображений экономии.Выполните команду
az aks nodepool list
, чтобы вывести список пулов узлов в новом кластере:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Ниже приведен пример выходных данных команды:
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Обратите внимание, что
mode
пула узлов имеет значениеSystem
и чтоname
назначается автоматически.
Добавление пула узлов
В вашем кластере есть один пул узлов. Добавьте второй пул узлов, выполнив команду
az aks nodepool add
. Выполните команду на этом шаге, чтобы создать пул узлов пользователя с тремя узлами и именемbatchprocpl
. Помните, что имена пула узлов должны начинаться со строчной буквы и содержать только буквенно-цифровые символы. Имена пула узлов ограничены 12 символами для пулов узлов Linux и шесть символов для пулов узлов Windows.Выполните следующую команду:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl \ --node-count 2
Выполните команду
az aks nodepool list
, чтобы получить список нового пула узлов в новом кластере:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Ниже приведен пример выходных данных команды:
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl", "mode": "User", "name": "batchprocpl", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": { "maxSurge": null }, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null }, { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Обратите внимание, что для
mode
нового пула узлов задано значениеUser
, аname
batchprocpl
.
Установите количество узлов в пуле на ноль
Выполните команду az aks nodepool scale
, чтобы масштабировать узлы в пуле узлов вручную.
Выполните команду az aks nodepool scale
и используйте параметр --node-count
, чтобы задать значение счетчика узлов равным 0.
Ниже приведен пример команды:
az aks nodepool scale \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name batchprocpl \
--node-count 0
Ниже приведен пример выходных данных команды:
{
"agentPoolType": "VirtualMachineScaleSets",
"availabilityZones": null,
"count": 0,
"enableAutoScaling": null,
"enableNodePublicIp": false,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl",
"maxCount": null,
"maxPods": 110,
"minCount": null,
"mode": "User",
"name": "batchprocpl",
"nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
"nodeLabels": null,
"nodeTaints": null,
"orchestratorVersion": "1.17.9",
"osDiskSizeGb": 128,
"osType": "Linux",
"provisioningState": "Succeeded",
"proximityPlacementGroupId": null,
"resourceGroup": "rg-akscostsaving",
"scaleSetEvictionPolicy": null,
"scaleSetPriority": null,
"spotMaxPrice": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"upgradeSettings": {
"maxSurge": null
},
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null
}
Обратите внимание, что для пула узлов count
значение параметра имеет значение 0, а для параметра enableAutoScaling
задано значение null
. Чтобы запланировать рабочие нагрузки, необходимо увеличить число узлов для этого пула узлов вручную, так как создание узла по умолчанию не происходит автоматически.
Настройка контекста Kubernetes
В выходных данных предыдущей команды число пулов узлов имеет значение 0. Вы можете подтвердить доступные узлы в кластере, выполнив команду kubectl get nodes
.
Запустите
kubectl
для взаимодействия с сервером API кластера. Необходимо настроить контекст кластера Kubernetes, чтобы разрешитьkubectl
подключаться. Контекст содержит адрес кластера, пользователя и пространство имен. Выполните командуaz aks get-credentials
, чтобы настроить контекст Kubernetes в Cloud Shell.Получите учетные данные кластера, выполнив следующую команду:
az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME
Ниже приведен пример выходных данных команды.
Merged "akscostsaving-17835" as current context in /home/user/.kube/config
Перечислите узлы в ваших пулах узлов.
kubectl get nodes
Ниже приведен пример выходных данных команды:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37990379-vmss000000 Ready agent 32m v1.17.9 aks-nodepool1-37990379-vmss000001 Ready agent 32m v1.17.9
Обратите внимание, что, несмотря на то, что команда
az aks nodepool list
содержит два пула узлов, в кластере доступны только два узла, а оба — изnodepool1
.
Чтобы оптимизировать затраты на AKS при управлении требованиями рабочей нагрузки напрямую, хорошая стратегия заключается в том, чтобы:
- Вручную масштабируйте количество узлов в пулах узлов.
- Уменьшите масштаб дорогостоящих пулов пользовательских узлов, основанных на NV, к нулю.
Давайте рассмотрим стратегию, в которой необходимо масштабировать узлы, но не управляйте спросом напрямую.