クラスターのノード プールを管理する (AKS on Azure Stack HCI 23H2)

適用対象: Azure Stack HCI バージョン 23H2

注意

AKS on Azure Stack HCI 22H2 でのノード プールの管理については、「 ノード プールの管理」を参照してください。

Azure Arc によって有効になっている AKS では、同じ構成のノードが ノード プールにグループ化されます。 これらのノード プールには、お使いのアプリケーションを実行する基になる VM が含まれています。 この記事では、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"
}

ノード プールにデプロイされるポッドの最大数を指定する

クラスター作成時または新しいノード プールの作成時に、ノードにデプロイ可能な最大ポッドを構成できます。 ノード プールの作成時にを指定 maxPods しない場合、ノード プールは最大 110 ポッドの既定値でデプロイされます。

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

ノード プールのスケーリング

ノード プールのノード数をスケールアップまたはスケールダウンできます。

ノード プール内のノード数をスケーリングするには、az aksarc nodepool scale コマンドを使用します。 次の例では、 という名前 nodepool1のノード プール内のノード数を 2 にスケーリングします。

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 スケジューラでは、テイントと容認を使用して、ノードで実行できるワークロードを制限できます。

  • テイントは、ノードに適用されて、特定のポッドのみをそのノードでスケジュールできることを示します。
  • その後、 ノード のテイントを "容認" できるようにするポッドに容認が適用されます。

ノード プールの許容範囲を設定する

前の手順では、ノード プールの作成時に sku=gpu:NoSchedule テイントを適用しました。 次の YAML マニフェストの例では、容認を使用して、Kubernetes スケジューラがそのノード プール内のノードで 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
    

    ポッドのスケジュールおよび NGINX イメージのプルには、数秒かかります。

  3. コマンドを使用して状態を kubectl describe pod 確認します。

    kubectl describe pod mypod
    

    次の要約された出力例は、容認が sku=gpu:NoSchedule 適用されることを示しています。 [ イベント ] セクションで、スケジューラによってポッドがノードに 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スケジュールできます。 その他のポッドは、nodepool1 ノード プールにスケジュールされます。 追加のノード プールを作成した場合、テイントと容認を使用して、それらのノード リソースにどのようなポッドをスケジュールするか制限できます。

ノード プールのラベルの設定

詳細については、「 Azure Arc 対応 AKS クラスターでラベルを使用する」を参照してください。 ::: zone-end

次の手順