Azure Kubernetes Service (AKS) のクラスターでノード プールを作成する

Azure Kubernetes Service (AKS) で同じ構成のノードは、ノード プールにグループ化できます。 これらのノード プールには、お使いのアプリケーションを実行する基になる VM が含まれています。 AKS クラスターを作成するときは、ノードの初期数とそのサイズ (SKU) を定義し、システム ノード プールを作成します。

コンピューティングまたは記憶域の要件が異なるアプリケーションをサポートするには、ユーザー ノード プールを作成します。 システム ノード プールは、CoreDNS や konnectivity などの重要なシステム ポッドをホストするという主要な目的を果たします。 ユーザー ノード プールは、アプリケーション ポッドをホストするという主要な目的を果たします。 たとえば、より多くのユーザー ノード プールを使用して、コンピューティング集中型アプリケーションに GPU を提供したり、高パフォーマンスな SSD ストレージへのアクセスを提供したりします。 ただし、AKS クラスター内にプールを 1 つだけ持つ必要がある場合は、システム ノード プールでアプリケーション ポッドをスケジュールできます。

Note

この機能により、複数のノード プールの作成と管理をより詳細に制御できるようになり、作成/更新/削除 (CRUD) 操作に個別のコマンドが必要になります。 以前は、az aks create または az aks update を介したクラスター操作は、managedCluster API を使用するものであり、コントロール プレーンと単一ノード プールを変更する唯一の方法でした。 この機能は、agentPool API を介した、エージェント プールに対する個別の操作セットを公開するものであり、個々のノード プールに対して操作を実行するには az aks nodepool コマンド セットを使用する必要があります。

この記事では、AKS クラスターで 1 つ以上のノード プールを作成する方法について説明します。

開始する前に

制限事項

複数のノード プールをサポートする AKS クラスターを作成する場合には、次の制限があります。

  • Azure Kubernetes Service (AKS) のクォータ、仮想マシンのサイズの制限、およびリージョンの可用性」を参照してください。
  • 別のシステム ノード プールが AKS クラスター内にあり、それが代わりをする場合、システム ノード プールは削除できます。 それ以外の場合は、システム ノード プールを削除できません。
  • システム プールには少なくとも 1 つのノードを含める必要があり、ユーザー ノード プールには 0 以上のノードを含めることができます。
  • 複数ノード プールする場合、AKS クラスターは Standard SKU ロード バランサーを使用する必要があります。 この機能は、Basic SKU ロード バランサーではサポートされていません。
  • AKS クラスターでは、ノードに仮想マシン スケール セットを使用する必要があります。
  • ノード プールの名前は、小文字の英数字のみを含めることができ、小文字で始める必要があります。
    • Linux のノード プールの長さは、1 から 12 文字の範囲内である必要があります。
    • Windows のノード プールの長さは、1 から 6 文字の範囲内である必要があります。
  • すべてのノード プールは、同じ仮想ネットワーク内に存在する必要があります。
  • クラスターの作成時に複数のノード プールを作成する場合は、ノード プールのすべての Kubernetes のバージョンが、コントロール プレーンに設定されたバージョンと一致している必要があります。

AKS クラスターを作成する

重要

運用環境内のお使いの AKS クラスターで 1 つのシステム ノード プールを実行する場合、そのノード プールには少なくとも 3 つのノードを使用することをお勧めします。 1 つのノードがダウンすると、コントロール プレーン リソースが失われ、冗長性が損なわれます。 コントロール プレーン ノードを増やすことによって、このリスクを軽減できます。

  1. az group create コマンドを使用して、Azure リソース グループを作成します。

    az group create --name myResourceGroup --location eastus
    
  2. az aks create コマンドを使用して、1 つのノード プールを持つ AKS クラスターを作成します。

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --vm-set-type VirtualMachineScaleSets \
        --node-count 2 \
        --generate-ssh-keys \
        --load-balancer-sku standard
    

    クラスターの作成には数分かかります。

  3. クラスターの準備ができたら、az aks get-credentials コマンドを使用してクラスターの資格情報を取得します。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

ノード プールの追加

前の手順で作成したクラスターには、ノード プールが 1 つあります。 このセクションでは、クラスターに 2 番目のノード プールを追加します。

  1. az aks nodepool add コマンドを使用して、新しいノード プールを作成します。 次の例では、3 つのノードを実行する mynodepool という名前のノード プールを作成します。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3
    
  2. az aks node pool list コマンドを使用し、お使いのリソース グループとクラスター名を指定して、ノード プールの状態を確認します。

    az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster
    

    次の出力例では、mynodepool が 3 つのノードと共に正常に作成されたことを示しています。 前の手順で AKS クラスターを作成したとき、既定の nodepool1 がノード数 2 で作成されました。

    [
      {
        ...
        "count": 3,
        ...
        "name": "mynodepool",
        "orchestratorVersion": "1.15.7",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      },
      {
        ...
        "count": 2,
        ...
        "name": "nodepool1",
        "orchestratorVersion": "1.15.7",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      }
    ]
    

ARM64 ノード プール

ARM64 プロセッサは、Kubernetes ワークロードに低電力コンピューティングを提供します。 ARM64 ノード プールを作成するには、Dpsv5Dplsv5、または Epsv5 シリーズの仮想マシンを選択する必要があります。

制限事項

  • ARM64 ノード プールは、Defender 対応クラスターではサポートされていません。
  • FIPS 対応ノード プールは ARM64 SKU ではサポートされていません。

ARM64 ノード プールを追加する

  • az aks nodepool add を使用して、既存のクラスターに ARM64 ノード プールを追加します。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name armpool \
        --node-count 3 \
        --node-vm-size Standard_D2pds_v5
    

Azure Linux ノード プール

AKS 用 Azure Linux コンテナー ホストは、AKS コンテナー ホストとして使用できるオープンソースの Linux ディストリビューションです。 高い信頼性、セキュリティ、整合性を提供します。 これには、コンテナー ワークロードの実行に必要な最小限のパッケージ セットのみが含まれているため、ブート時間と全体的なパフォーマンスが向上します。

Azure Linux ノード プールを追加する

  • az aks nodepool add コマンドを使用し、--os-sku AzureLinux を指定して、既存のクラスターに Azure Linux ノード プールを追加します。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name azlinuxpool \
        --os-sku AzureLinux
    

Ubuntu ノードを Azure Linux ノードに移行する

次のいずれかの方法を使って、既存の Ubuntu ノードを Azure Linux に移行できます。

一意のサブネットを持つノード プール

ワークロードでは、クラスターのノードを論理的に分離するために個別のプールに分割することが必要になる場合があります。 クラスター内の各ノード プール専用の個別のサブネットは、この分離のサポートに役立ち、ノード プール間で分割する非連続の仮想ネットワーク アドレス空間などの要件に対処できます。

注意

必ず Azure CLI バージョン 2.35.0 以降を使用してください。

制限事項

  • ノード プールに割り当てられるサブネットはすべて、同じ仮想ネットワークに属している必要があります。
  • DNS 解決や kubectl logs/exec/port-forward プロキシのトンネリングなど、重要な機能を提供するために、システム ポッドはクラスター内のすべてのノードとポッドにアクセスできる必要があります。
  • クラスターを作成した後で VNET を拡張する場合、元の CIDR ブロックの外でサブネットを追加するには、クラスターを更新する必要があります。 エージェント プールの追加時に AKS でエラーが出力される一方で、aks-previewAzure CLI 拡張機能 (バージョン 0.5.66 以降) では、必須の -g <resourceGroup> -n <clusterName> 引数のみで az aks update コマンドを実行できるようになりました。 このコマンドは、変更を加えることなく更新操作を実行します。これにより、障害が発生した状態で停止しているクラスターを復旧できます。
  • 1.23.3 より前の Kubernetes バージョンのクラスターでは、kube-proxy によって新しいサブネットからのトラフィックが SNAT されるため、Azure ネットワーク ポリシーによってパケットがドロップされる可能性があります。
  • Windows ノードでは、ノード プールが再イメージ化されるまで、新しいサブネットへのトラフィックを SNAT します。
  • 内部ロード バランサーは、既定でノード プール サブネットの 1 つに設定されます。

一意のサブネットを持つノード プールを追加する

  • az aks nodepool add コマンドを使用して、一意のサブネットを持つノード プールを既存のクラスターに追加し、--vnet-subnet-id を指定します。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3 \
        --vnet-subnet-id <YOUR_SUBNET_RESOURCE_ID>
    

FIPS 対応ノード プール

AKS クラスターで連邦情報処理規格 (FIPS) を有効にする方法の詳細については、「Azure Kubernetes Service (AKS) ノード プールの連邦情報処理規格 (FIPS) を有効にする」を参照してください。

containerd を含む Windows Server ノード プール

Kubernetes バージョン1.20 以降では、Windows Server 2019 ノード プールのコンテナー ランタイムとして containerd を指定できます。 Kubernetes 1.23 以降では、containerd のみが Windows の既定のコンテナー ランタイムです。

重要

Windows Server 2019 ノードプールで containerd を使用する場合:

  • コントロール プレーンと Windows Server 2019 の両方のノードプールで、Kubernetes バージョン 1.20 以上を使用する必要があります。
  • Windows Server のコンテナーを実行するためのノード プールを作成または更新する場合、--node-vm-size の既定値は Standard_D2s_v3 です。これは、Kubernetes バージョン 1.20 より前の Windows server 2019 ノードプールの最小推奨サイズです。 containerd を使用した Windows Server 2019 ノードプールの最小推奨サイズは Standard_D4s_v3です。 --node-vm-size パラメーターを設定する場合は、制限された VM サイズの一覧を確認してください。
  • ワークロードが正しくスケジュールされていることを保証するには、containerd を実行している Windows Server 2019 ノードプールで テイントまたはラベル を使用し、容認またはノードのセレクターをデプロイで使用することをお勧めします。

containerd を使用して Windows Server ノード プールを追加する

  • az aks nodepool add を使用して、containerd を持つ Windows Server ノード プールを既存のクラスターに追加します。

    Note

    WindowsContainerRuntime=containerd カスタムヘッダーを指定しない場合、既定でノード プールは containerd をコンテナー ランタイムとして使用します。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --os-type Windows \
        --name npwcd \
        --node-vm-size Standard_D4s_v3 \
        --kubernetes-version 1.20.5 \
        --aks-custom-headers WindowsContainerRuntime=containerd \
        --node-count 1
    

特定の既存の Windows Server ノード プールを containerd にアップグレードする

  • containerd コマンドを使用して、特定のノード プールを Docker から az aks nodepool upgrade にアップグレードします。

    az aks nodepool upgrade \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name npwd \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

既存のすべての Windows Server ノード プールを containerd にアップグレードする

  • az aks nodepool upgrade コマンドを使用して、すべてのノード プールを Docker から containerd にアップグレードします。

    az aks nodepool upgrade \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

ノード プールの削除

ノード プールが不要になったら、それを削除して、基になっている VM を削除します。

注意事項

ノード プールを削除しても、AKS では切断とドレインは実行されません。また、ノード プールを削除したときに実行できる、データ損失の回復オプションもありません。 他のノード プールでポッドをスケジュールできない場合、それらのアプリケーションは利用できなくなります。 使用中のアプリケーションにデータ バックアップがない場合や、お使いのクラスター内の他のノード プールで実行する機能がない場合は、ノード プールは削除しないでください。 削除するノード プールで現在実行されているポッドの再スケジュールの中断を最小限に抑えるために、削除する前にノード プール内のすべてのノードで cordon と drain を実行します。

  • az aks nodepool delete コマンドを使用し、ノード プール名を指定して、ノード プールを削除します。

    az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster --name mynodepool --no-wait
    

    ノードおよびノード プールの削除には数分かかります。

次のステップ

この記事では、AKS クラスターで複数のノード プールを作成する方法を学習しました。 複数のノード プールを管理する方法については、「Azure Kubernetes Service (AKS) でクラスターの複数のノード プールを管理する」を参照してください。