Управление пулами узлов для кластера (AKS в Azure Stack HCI 23H2)

Область применения: Azure Stack HCI, версия 23H2

Примечание

Сведения об управлении пулами узлов в AKS в Azure Stack HCI 22H2 см. в статье Управление пулами узлов.

В AKS, включенном Azure Arc, узлы одной конфигурации группируются в пулы узлов. Эти узлы содержат базовые виртуальные машины, на которых выполняются ваши приложения. В этой статье показано, как создавать пулы узлов для кластера в AKS Arc и управлять ими.

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

Чтобы приступить к работе, создайте кластер Kubernetes с одним пулом узлов:

az aksarc create -n <cluster name> -g <resource group> --custom-location <custom location Id> --vnet-ids <vnet id> --generate-ssh-keys --load-balancer-count <load balancer count>

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

Вы можете добавить пул узлов в существующий кластер с помощью az aksarc nodepool add команды . Убедитесь, что имя пула узлов отличается от имени существующего пула узлов:

az aksarc nodepool add --name <node pool name> -g <resource group> --cluster-name <cluster name> --os-sku <Linux or Windows> --node-count <count> --node-vm-size <vm size>

Получение сведений о конфигурации для пула узлов

Чтобы просмотреть конфигурацию пулов узлов, используйте az aksarc nodepool show команду :

az aksarc nodepool show --cluster-name <cluster name> -n <node pool name> -g <resource group>

Выходные данные примера:

{
"availabilityZones": null,
"count": 1,
"extendedLocation": null,
"id":
"/subscriptions/&lt;subscription&gt;/resourceGroups/edgeci-registration-rr1s46r1710&lt;resource
group&gt;/providers/Microsoft.Kubernetes/connectedClusters/&lt;cluster
name&gt;/providers/Microsoft.HybridContainerService/provisionedClusterInstances/default/agentPools/&lt;nodepoolname&gt;",
"location": "westeurope",
"name": "nodepoolname",
"nodeImageVersion": null,
"osSku": "CBLMariner",
"osType": "Linux",
"provisioningState": "Succeeded",
"resourceGroup": "resourcegroup",
"status": {
  "errorMessage": null,
  "operationStatus": null,
  "readyReplicas": [
   {
    "count": 1,
    "vmSize": "Standard\_A4\_v2"
   }
  ]
},
"systemData": {
…
},
"tags": null,
"type":
"microsoft.hybridcontainerservice/provisionedclusterinstances/agentpools",
"vmSize": "Standard\_A4\_v2"
}

Указание максимального количества модулей pod, развернутых в пуле узлов

Можно настроить максимальное количество модулей pod, развертываемых на узле во время создания кластера или при создании пулов узлов. Если не указать maxPods при создании пулов узлов, пул узлов развертывается со значением по умолчанию не более 110 модулей pod:

az aksarc nodepool add --cluster-name <cluster name> -n <node pool name> -g <resource group> --max-pods 50 --yes

Масштабирование пула узлов

Вы можете масштабировать количество узлов в пуле узлов.

Чтобы масштабировать количество узлов в пуле узлов, используйте az aksarc nodepool scale команду . В следующем примере число узлов масштабируется до 2 в пуле узлов с именем nodepool1:

az aksarc nodepool scale --cluster-name <cluster name> -n nodepool1 -g <resource group> --node-count 2 --yes

Удаление пула узлов

Если необходимо удалить пул узлов, используйте az aksarc nodepool delete команду :

az aksarc nodepool delete --cluster-name <cluster name> -n <node pool name> -g <resource group> --yes

Указание отметки или метки для пула узлов

При создании пула узлов в него можно добавлять отметки или метки. При добавлении отметки или метки все узлы в этом пуле узлов также получают этот фрагмент или метку.

Важно!

К узлам для всего пула узлов следует добавлять отметки или метки с помощью az aksarc nodepool. Мы не рекомендуем использовать для kubectl применения меток или меток к отдельным узлам в пуле узлов.

Настройка оттенков пула узлов

  1. Создайте пул узлов с запятой с помощью az aksarc nodepool add команды . Укажите имя taintnp и используйте --node-taints параметр , чтобы указать sku=gpu:NoSchedule для маркера:

    az aksarc nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name taintnp \
        --node-count 1 \
        --node-taints sku=gpu:NoSchedule \
        --no-wait
    
  2. Проверьте состояние пула узлов с помощью az aksarc nodepool list команды :

    az aksarc nodepool list -g myResourceGroup --cluster-name myAKSCluster
    

    В следующем примере выходных taintnp данных показано, что пул узлов создает узлы с указанным nodeTaints:

    [
      {
        ...
        "count": 1,
        ...
        "name": "taintnp",
        ...
        "provisioningState": "Succeeded",
        ...
        "nodeTaints":  [
          "sku=gpu:NoSchedule"
        ],
        ...
      },
     ...
    ]
    

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

  • Отметка применяется к узлу, указывая, что на него могут назначаться только определенные модули pod.
  • Затем к модулу pod применяется толерация , которая позволяет им "допускать" запятнание узла.

Настройка допусков пула узлов

На предыдущем шаге вы применили отметку sku=gpu:NoSchedule при создании пула узлов. В следующем примере манифеста YAML используется толер, позволяющий планировщику Kubernetes запускать pod NGINX на узле в этом пуле узлов:

  1. Создайте файл с именем nginx-toleration.yaml и скопируйте или вставьте следующий пример YAML:

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
      - image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine
        name: mypod
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 1
            memory: 2G
      tolerations:
      - key: "sku"
        operator: "Equal"
        value: "gpu"
        effect: "NoSchedule"
    
  2. Запланируйте модуль с помощью команды kubectl apply.

    kubectl apply -f nginx-toleration.yaml
    

    Планирование объекта Pod и извлечение образа NGINX займет несколько секунд.

  3. Проверьте состояние с помощью kubectl describe pod команды :

    kubectl describe pod mypod
    

    В следующем сжатом примере выходных sku=gpu:NoSchedule данных показано, что применяется толерация. В разделе События планировщик назначил модуль pod moc-lbeof1gn6x3 узлу:

    [...]
    Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                     node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
                     sku=gpu:NoSchedule
    Events:
      Type    Reason     Age    From                Message
      ----    ------     ----   ----                -------
      Normal  Scheduled  54s  default-scheduler   Successfully assigned default/mypod to moc-lbeof1gn6x3
      Normal  Pulling    53s  kubelet             Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
      Normal  Pulled     48s  kubelet             Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" in 3.025148695s (3.025157609s including waiting)
      Normal  Created    48s  kubelet             Created container
      Normal  Started    48s  kubelet             Started container
    

    На узлах в taintnpможно запланировать только объекты pod, к которым применяется эта толерантность. Все остальные модули pod запланированы в пуле узлов nodepool1 . Если вы создаете больше пулов узлов, можно использовать ограничения и допустимости, чтобы ограничить количество модулей pod, которые можно запланировать на этих ресурсах узла.

Настройка меток пула узлов

Дополнительные сведения см. в статье Использование меток в кластере AKS с поддержкой Azure Arc. ::: zone-end

Дальнейшие действия