Упражнение. Настройка нескольких узлов и включение масштабирования до нуля в кластере AKS
Служба Azure Kubernetes позволяет создавать различные пулы узлов для сопоставления конкретных рабочих нагрузок с узлами, работающими в каждом пуле узлов.
Вспомните из примера отслеживания дронов, что ваша команда разработала новую службу прогнозного моделирования, которая обрабатывает сведения о пути полета в экстремальных погодных условиях и создает оптимальные маршруты полета. Эта служба требует поддержки виртуальных машин на базе GPU и выполняется только в определенные дни недели. Необходимо сделать так, чтобы виртуальные машины не использовались, когда служба будет находиться в режиме остановки.
Здесь вы создадите кластер Kubernetes, управляемый службой Azure Kubernetes (AKS). Затем вы настроите кластер для поддержки нескольких пулов узлов и позволяет кластерам масштабировать узлы в пулах узлов. Затем вы добавите второй пул узлов для поддержки рабочих нагрузок пользователей с динамическим числом узлов. Наконец, вы масштабируете количество узлов до нуля, чтобы сократить затраты на узлы, используемые в кластере AKS.
Создание группы ресурсов
Войдите в Azure Cloud Shell с помощью учетной записи Azure. Выберите Cloud Shell версии Bash.
Вы будете повторно использовать значения, создаваемые здесь во всех упражнениях в этом модуле. Сохраните выходные данные для дальнейшего использования.
Выберите регион для размещения группы ресурсов. Функции из последующих упражнений недоступны во всех регионах. По этой причине рекомендуется использовать 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. Чтобы настроить в кластере масштабирование и поддержку нескольких пулов узлов, нужно правильно задать два параметра.Параметр и значение Description --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
. Помните, что имена пулов узлов должны начинаться со строчной буквы и содержать только буквы и цифры. Имена пулов узлов Linux могут содержать до 12 символов, а имена пулов узлов 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
узлов задано null
значение 0 и enableAutoScaling
задано значение . Чтобы запланировать рабочие нагрузки, необходимо увеличить число узлов для этого пула узлов вручную, так как создание узла по умолчанию не происходит автоматически.
Настройка контекста Kubernetes
В результатах выполнения предыдущей команды счетчик пула узлов установлен на 0. Чтобы проверить доступные узлы в кластере, выполните команду kubectl get nodes
.
Запустите
kubectl
для взаимодействия с сервером API кластера. Чтобы разрешить подключениеkubectl
, необходимо настроить контекст кластера Kubernetes. Контекст содержит адрес кластера, пользователя и пространство имен. Используйте команду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 до нуля.
Рассмотрим стратегию, когда узлы масштабировать нужно, а прямого контроля над нагрузками нет.