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

Завершено

Пулы узлов пользователей позволяют получить доступ к неиспользуемой вычислительной емкости Azure по более низким ценам с поддержкой высокопроизводительных вычислений.

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

Следующим шагом является добавление пула точечных узлов пользователей с автоматическим масштабированием, чтобы снизить эксплуатационные затраты кластера. Использование кластера зависит от необходимых ресурсов и не предсказуемо, поэтому вы настраиваете правила для отслеживания пиков и спадов. Рабочая нагрузка развертывается с включенной сопоставлением узлов, чтобы модуль pod планировался на узлах в пуле точечных узлов.

Создание пула точечных узлов

Необходимо создать отдельный пул узлов, поддерживающий службу пакетной обработки. Это будет пул точечных узлов с политикой вытеснения "Удалить" и максимальной ценой для точечного узла –1.

  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
    

    Помните, что из-за ограничений емкости в выбранном расположении этот запрос может завершиться ошибкой.

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

Настройка пространства имен

  1. Используйте команду 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. Теперь, используя второй пул пакетной обработки, настроенный в виде пула точечных узлов, можно создать файл развертывания и запланировать рабочие нагрузки в этом пуле.

  1. Создайте файл манифеста для развертывания Kubernetes с именем spot-node-deployment.yaml с помощью встроенного редактора.

    code spot-node-deployment.yaml
    

    Совет

    Cloud Shell включает в себя встроенный редактор файлов. Редактор Cloud Shell поддерживает такие функции, как выделение языков, палитра команд и проводник файлов. Для простого создания и редактирования файлов запустите редактор, выполнив команду code . в терминале Cloud Shell. Это действие открывает редактор с активным рабочим каталогом, установленным в терминале. Чтобы открыть файл манифеста непосредственно для быстрого редактирования, запустите code spot-node-deployment.yaml. Эта команда открывает редактор без проводника.

  2. Затем вставьте в файл следующий текст:

    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"
    
  3. Нажмите клавиши CTRL+S , чтобы сохранить файл, а затем нажмите клавиши CTRL+Q , чтобы закрыть редактор.

  4. Примените конфигурацию с помощью команды kubectl apply и разверните приложение в пространстве имен costsavings.

    kubectl apply \
    --namespace costsavings \
    -f spot-node-deployment.yaml
    

    Ниже приведены выходные данные предыдущей команды:

    pod/nginx created
    
  5. Дополнительные сведения о выполнении объекта 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, который вы создали ранее.