Упражнение. Настройка нескольких узлов и включение масштабирования до нуля в кластере AKS

Завершено

Служба Azure Kubernetes позволяет создавать различные пулы узлов для сопоставления конкретных рабочих нагрузок с узлами, работающими в каждом пуле узлов.

Вспомните из примера отслеживания дронов, что ваша команда разработала новую службу прогнозного моделирования, которая обрабатывает сведения о пути полета в экстремальных погодных условиях и создает оптимальные маршруты полета. Эта служба требует поддержки виртуальных машин на базе GPU и выполняется только в определенные дни недели. Необходимо сделать так, чтобы виртуальные машины не использовались, когда служба будет находиться в режиме остановки.

Здесь вы создадите кластер Kubernetes, управляемый службой Azure Kubernetes (AKS). Затем вы настроите кластер для поддержки нескольких пулов узлов и позволяет кластерам масштабировать узлы в пулах узлов. Затем вы добавите второй пул узлов для поддержки рабочих нагрузок пользователей с динамическим числом узлов. Наконец, вы масштабируете количество узлов до нуля, чтобы сократить затраты на узлы, используемые в кластере AKS.

Создание группы ресурсов

  1. Войдите в Azure Cloud Shell с помощью учетной записи Azure. Выберите Cloud Shell версии Bash.

  2. Вы будете повторно использовать значения, создаваемые здесь во всех упражнениях в этом модуле. Сохраните выходные данные для дальнейшего использования.

  3. Выберите регион для размещения группы ресурсов. Функции из последующих упражнений недоступны во всех регионах. По этой причине рекомендуется использовать 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например.

  4. Запишите ваше.AKS_CLUSTER_NAME В ходе упражнений вы будете использовать это значение позже для очистки и настройки для кластера.

    echo $AKS_CLUSTER_NAME
    
  5. Создайте группу ресурсов с именем rg-akscostsaving. Вы развернете все ресурсы, создаваемые в этих упражнениях в этой группе ресурсов. Если имеется всего одна группа ресурсов, то очистить ресурсы после завершения модуля будет проще.

    az group create \
        --name $RESOURCE_GROUP \
        --location $REGION_NAME
    

Создание кластера AKS

С помощью созданной группы ресурсов можно создать кластеры AKS в группе. Первым шагом является получение версии Kubernetes в выбранном регионе. Эта версия настроена для настройки кластера.

  1. Чтобы получить версию 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
    
  2. 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. В этом упражнении мы используем только два узла для рассмотрения затрат.

  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 что автоматически назначается пул узлов.

Добавление пула узлов

  1. Ваш кластер содержит один пул узлов. Добавьте второй пул узлов с помощью команды 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
    
  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.

  1. Запустите 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
    
  2. Вывод списка узлов в пулах узлов.

    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 до нуля.

Рассмотрим стратегию, когда узлы масштабировать нужно, а прямого контроля над нагрузками нет.