Azure Kubernetes Service (AKS) のクラスターで複数のノード プールを作成および管理するCreate and manage multiple node pools for a cluster in Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) で同じ構成のノードは、ノード プールにグループ化できます。In Azure Kubernetes Service (AKS), nodes of the same configuration are grouped together into node pools. これらのノード プールには、お使いのアプリケーションを実行する基になる VM が含まれています。These node pools contain the underlying VMs that run your applications. 最初のノード数とそのサイズ (SKU) は、既定のノード プールが作成される AKS クラスターの作成時に定義します。The initial number of nodes and their size (SKU) are defined when you create an AKS cluster, which creates a default node pool. コンピューティングまたは記憶域の要件が異なるアプリケーションをサポートするには、ノード プールを追加作成します。To support applications that have different compute or storage demands, you can create additional node pools. たとえば、これらの追加のノード プールを使用すると、コンピューティング集約型のアプリケーションに GPU を提供したり、高パフォーマンスな SSD ストレージにアクセスを提供したりできます。For example, use these additional node pools to provide GPUs for compute-intensive applications, or access to high-performance SSD storage.

注意

この機能を使用すると、複数のノード プールを作成および管理する方法をより細かく制御できます。This feature enables higher control over how to create and manage multiple node pools. そのため、作成/更新/削除には個別のコマンドが必要です。As a result, separate commands are required for create/update/delete. 以前は、az aks create または az aks update を介したクラスター操作は、managedCluster API を使用するものであり、コントロール プレーンと単一ノード プールを変更する唯一の方法でした。Previously cluster operations through az aks create or az aks update used the managedCluster API and were the only option to change your control plane and a single node pool. この機能は、agentPool API を介した、エージェント プールに対する個別の操作セットを公開するものであり、個々のノード プールに対して操作を実行するには az aks nodepool コマンド セットを使用する必要があります。This feature exposes a separate operation set for agent pools through the agentPool API and require use of the az aks nodepool command set to execute operations on an individual node pool.

この記事では、AKS クラスターで複数のノード プールを作成および管理する方法について説明します。This article shows you how to create and manage multiple node pools in an AKS cluster.

開始する前にBefore you begin

Azure CLI バージョン 2.0.76 以降がインストールされて構成されている必要があります。You need the Azure CLI version 2.0.76 or later installed and configured. バージョンを確認するには、az --version を実行します。Run az --version to find the version. インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。If you need to install or upgrade, see Install Azure CLI.

制限事項Limitations

複数のノード プールをサポートする AKS クラスターを作成および管理する場合には、次の制限があります。The following limitations apply when you create and manage AKS clusters that support multiple node pools:

  • Azure Kubernetes Service (AKS) のクォータ、仮想マシンのサイズの制限、およびリージョンの可用性」を参照してください。See Quotas, virtual machine size restrictions, and region availability in Azure Kubernetes Service (AKS).
  • システム ノード プール (既定では、最初のノード プール) を削除することはできません。You can't delete the system node pool, by default the first node pool.
  • AKS クラスターが複数のノード プールを使用するためには、Standard SKU のロード バランサーを使用する必要があります。Basic SKU のロード バランサーでは、この機能がサポートされません。The AKS cluster must use the Standard SKU load balancer to use multiple node pools, the feature is not supported with Basic SKU load balancers.
  • AKS クラスターでは、ノードに仮想マシン スケール セットを使用する必要があります。The AKS cluster must use virtual machine scale sets for the nodes.
  • ノード プールの名前は、小文字の英数字のみを含めることができ、小文字で始める必要があります。The name of a node pool may only contain lowercase alphanumeric characters and must begin with a lowercase letter. Linux ノード プールの場合、長さは 1 から 12 文字である必要があります。Windows ノード プールの場合、長さは 1 から 6 文字である必要があります。For Linux node pools the length must be between 1 and 12 characters, for Windows node pools the length must be between 1 and 6 characters.
  • すべてのノード プールは、同じ VNET およびサブネット内に存在する必要があります。All node pools must reside in the same vnet and subnet.
  • クラスターの作成時に複数のノード プールを作成する場合は、ノード プールで使用されるすべての Kubernetes のバージョンが、コントロール プレーンに設定されたバージョンと一致している必要があります。When creating multiple node pools at cluster create time, all Kubernetes versions used by node pools must match the version set for the control plane. これは、ノード プールごとの操作を使用してクラスターがプロビジョニングされた後で更新できます。This can be updated after the cluster has been provisioned by using per node pool operations.

AKS クラスターを作成するCreate an AKS cluster

まず、1 つのノード プールで AKS クラスターを作成開始します。To get started, create an AKS cluster with a single node pool. 次の例では、az group create コマンドを使用して、myResourceGroup という名前のリソース グループを eastus リージョンに作成しています。The following example uses the az group create command to create a resource group named myResourceGroup in the eastus region. 次いで、myAKSCluster という名前の AKS クラスターを az aks create コマンドを使用して作成しています。An AKS cluster named myAKSCluster is then created using the az aks create command. 次の手順では、1.15.7--kubernetes-version を使用してノード プールを更新する方法を示しています。A --kubernetes-version of 1.15.7 is used to show how to update a node pool in a following step. Kubernetes のサポートされている任意のバージョンを指定できます。You can specify any supported Kubernetes version.

注意

複数のノード プールを使用する場合、Basic ロード バランサー SKU はサポートされませんThe Basic load balancer SKU is not supported when using multiple node pools. 既定では、AKS クラスターが、Azure CLI および Azure portal から Standard ロード バランサー SKU で作成されます。By default, AKS clusters are created with the Standard load balancer SKU from Azure CLI and Azure portal.

# Create a resource group in East US
az group create --name myResourceGroup --location eastus

# Create a basic single-node AKS cluster
az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --vm-set-type VirtualMachineScaleSets \
    --node-count 2 \
    --generate-ssh-keys \
    --kubernetes-version 1.15.7 \
    --load-balancer-sku standard

クラスターの作成には数分かかります。It takes a few minutes to create the cluster.

注意

重要なシステム サービスが既定のノード プールで実行されるため、クラスターを確実に動作させるには、このノード プールで少なくとも 2 つのノードを実行する必要があります。To ensure your cluster operates reliably, you should run at least 2 (two) nodes in the default node pool, as essential system services are running across this node pool.

クラスターの準備ができたら、az aks get-credentials コマンドを使用して、kubectl で使用するクラスターの資格情報を取得します。When the cluster is ready, use the az aks get-credentials command to get the cluster credentials for use with kubectl:

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

ノード プールの追加Add a node pool

前の手順で作成したクラスターには、ノード プールが 1 つあります。The cluster created in the previous step has a single node pool. az aks nodepool add コマンドを使用して、2 番目のノード プールを追加しましょう。Let's add a second node pool using the az aks nodepool add command. 次の例では、3 つのノードを実行する mynodepool という名前のノード プールを作成します。The following example creates a node pool named mynodepool that runs 3 nodes:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --node-count 3 \
    --kubernetes-version 1.15.5

注意

ノード プールの名前は、小文字で始める必要があり、英数字のみを含めることができます。The name of a node pool must start with a lowercase letter and can only contain alphanumeric characters. Linux ノード プールの場合、長さは 1 から 12 文字である必要があります。Windows ノード プールの場合、長さは 1 から 6 文字である必要があります。For Linux node pools the length must be between 1 and 12 characters, for Windows node pools the length must be between 1 and 6 characters.

お使いのノード プールの状態を確認するには、az aks node pool list コマンドを使用し、次のようにお使いのリソース グループとクラスター名を指定します。To see the status of your node pools, use the az aks node pool list command and specify your resource group and cluster name:

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

次の出力例では、mynodepool がノード プール内に 3 つのノードと共に正常に作成されたことを示しています。The following example output shows that mynodepool has been successfully created with three nodes in the node pool. 前の手順で AKS クラスターを作成したとき、既定の nodepool1 がノード数 2 で作成されました。When the AKS cluster was created in the previous step, a default nodepool1 was created with a node count of 2.

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

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

ヒント

ノード プールを追加するときに VmSize を指定しなかった場合、既定のサイズは、Windows ノード プールの場合は Standard_DS2_v3、Linux ノード プールの場合は Standard_DS2_v2 になります。If no VmSize is specified when you add a node pool, the default size is Standard_DS2_v3 for Windows node pools and Standard_DS2_v2 for Linux node pools. OrchestratorVersion が指定されていない場合、コントロール プレーンと同じバージョンが既定値になります。If no OrchestratorVersion is specified, it defaults to the same version as the control plane.

ノード プールのアップグレードUpgrade a node pool

注意

クラスターまたはノード プールでは、アップグレードやスケーリングの操作を同時に実行することはできず、実行を試みた場合には、エラーが返されます。Upgrade and scale operations on a cluster or node pool cannot occur simultaneously, if attempted an error is returned. 代わりに、ターゲット リソースに対する次の要求を行う前に、各操作の種類をその同じリソースで完了する必要があります。Instead, each operation type must complete on the target resource prior to the next request on that same resource. 詳細については、トラブルシューティング ガイドを参照してください。Read more about this on our troubleshooting guide.

最初の手順で AKS クラスターを初回作成したとき、--kubernetes-version として 1.15.7 を指定しました。When your AKS cluster was initially created in the first step, a --kubernetes-version of 1.15.7 was specified. これにより、コントロール プレーンと既定ノード プールの両方の Kubernetes バージョンが設定されます。This set the Kubernetes version for both the control plane and the default node pool. このセクションのコマンドからは、1 つの特定のノード プールをアップグレードする方法が説明されます。The commands in this section explain how to upgrade a single specific node pool.

コントロール プレーンとノード プールの Kubernetes バージョンをアップグレードするとき、両者の関係については、下のセクションで説明します。The relationship between upgrading the Kubernetes version of the control plane and the node pool are explained in the section below.

注意

ノード プールの OS イメージのバージョンは、クラスターの Kubernetes バージョンに関連付けられています。The node pool OS image version is tied to the Kubernetes version of the cluster. OS イメージは、クラスターのアップグレードの後でのみアップグレードされます。You will only get OS image upgrades, following a cluster upgrade.

この例には 2 つのノード プールがあるため、az aks nodepool upgrade を使用してノード プールをアップグレードする必要があります。Since there are two node pools in this example, we must use az aks nodepool upgrade to upgrade a node pool. mynodepool を Kubernetes 1.15.7 にアップグレードしましょう。Let's upgrade the mynodepool to Kubernetes 1.15.7. 次の例のように、az aks node pool upgrade コマンドを使用してノード プールをアップグレードします。Use the az aks nodepool upgrade command to upgrade the node pool, as shown in the following example:

az aks nodepool upgrade \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --kubernetes-version 1.15.7 \
    --no-wait

az aks node pool list コマンドを使用し、再度お使いのノード プールの状態を一覧表示します。List the status of your node pools again using the az aks node pool list command. 次の例では、mynodepool1.15.7 への Upgrading 状態であることを示しています。The following example shows that mynodepool is in the Upgrading state to 1.15.7:

$ az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster

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

ノードを指定したバージョンにアップグレードするには数分かかります。It takes a few minutes to upgrade the nodes to the specified version.

AKS クラスター内のノード プールは、すべて同じ Kubernetes のバージョンにアップグレードするのがベスト プラクティスです。As a best practice, you should upgrade all node pools in an AKS cluster to the same Kubernetes version. az aks upgrade の既定の動作では、この配置を実現するために、すべてのノード プールがコントロール プレーンと共にアップグレードされます。The default behavior of az aks upgrade is to upgrade all node pools together with the control plane to achieve this alignment. 個々のノード プールをアップグレードできる機能によりローリング アップグレードの実行が可能になり、アプリケーションのアップタイムを維持するノード プール間のポッドを前述の制約内でスケジュールできます。The ability to upgrade individual node pools lets you perform a rolling upgrade and schedule pods between node pools to maintain application uptime within the above constraints mentioned.

複数のノード プールを使用するでクラスターのコントロール プレーンをアップグレードするUpgrade a cluster control plane with multiple node pools

注意

Kubernetes は、標準のセマンティック バージョニングのバージョン管理スキームを使用します。Kubernetes uses the standard Semantic Versioning versioning scheme. バージョン番号は x.y.z として表されます。ここで、x はメジャー バージョン、y はマイナー バージョン、z は修正プログラムのバージョンです。The version number is expressed as x.y.z, where x is the major version, y is the minor version, and z is the patch version. たとえば、バージョン 1.12.6 の場合は、1 がメジャー バージョン、12 がマイナー バージョン、6 が修正プログラムのバージョンです。For example, in version 1.12.6, 1 is the major version, 12 is the minor version, and 6 is the patch version. コントロール プレーンの Kubernetes バージョンと初期ノード プールは、クラスター作成時に設定されます。The Kubernetes version of the control plane and the initial node pool are set during cluster creation. その他のすべてのノード プールには、クラスターに追加されるときに Kubernetes バージョンが設定されます。All additional node pools have their Kubernetes version set when they are added to the cluster. Kubernetes バージョンは、ノード プール間、およびノード プールとコントロール プレーン間では異なる場合があります。The Kubernetes versions may differ between node pools as well as between a node pool and the control plane.

AKS クラスターには、Kubernetes バージョンが関連付けられている 2 つのクラスター リソース オブジェクトがあります。An AKS cluster has two cluster resource objects with Kubernetes versions associated.

  1. クラスターのコントロール プレーンの Kubernetes バージョン。A cluster control plane Kubernetes version.
  2. Kubernetes バージョンのノード プール。A node pool with a Kubernetes version.

コントロール プレーンは、1 つまたは複数のノード プールにマップされます。A control plane maps to one or many node pools. アップグレード操作の動作は、どの Azure CLI コマンドを使用するかによって異なります。The behavior of an upgrade operation depends on which Azure CLI command is used.

AKS コントロール プレーンをアップグレードするには、az aks upgrade を使用する必要があります。Upgrading an AKS control plane requires using az aks upgrade. これにより、コントロール プレーンのバージョンとクラスター内のすべてのノード プールがアップグレードされます。This upgrades the control plane version and all node pools in the cluster.

--control-plane-only フラグを使用して az aks upgrade コマンドを実行すると、クラスターのコントロール プレーンのみがアップグレードされます。Issuing the az aks upgrade command with the --control-plane-only flag upgrades only the cluster control plane. クラスター内の関連付けられているノード プールは一切変更されません。None of the associated node pools in the cluster are changed.

個々のノード プールをアップグレードするには、az aks nodepool upgrade を使用する必要があります。Upgrading individual node pools requires using az aks nodepool upgrade. この場合は、指定された Kubernetes バージョンのターゲット ノード プールのみがアップグレードされますThis upgrades only the target node pool with the specified Kubernetes version

アップグレードの検証規則Validation rules for upgrades

クラスターのコントロール プレーンおよびノード プールに対して有効な Kubernetes のアップグレードは、次の規則のセットによって検証されます。The valid Kubernetes upgrades for a cluster's control plane and node pools are validated by the following sets of rules.

  • ノード プールをアップグレードするための有効なバージョンの規則:Rules for valid versions to upgrade node pools:

    • ノード プールのバージョンは、コントロール プレーンと同じ "メジャー" バージョンである必要があります。The node pool version must have the same major version as the control plane.
    • ノード プールの "マイナー" バージョンは、コントロール プレーンのバージョンの 2 つ以内の "マイナー" バージョンでなければなりません。The node pool minor version must be within two minor versions of the control plane version.
    • ノード プールのバージョンを、コントロールの major.minor.patch バージョンよりも大きくすることはできません。The node pool version cannot be greater than the control major.minor.patch version.
  • アップグレード操作を送信するための規則:Rules for submitting an upgrade operation:

    • コントロール プレーンでも、ノード プールでも、Kubernetes バージョンをダウングレードすることはできません。You cannot downgrade the control plane or a node pool Kubernetes version.
    • ノード プールの Kubernetes バージョンが指定されていない場合、動作は使用中のクライアントによって異なります。If a node pool Kubernetes version is not specified, behavior depends on the client being used. Resource Manager テンプレートの宣言は、ノード プールに対して定義されている既存のバージョンが使用される場合、そのバージョンにフォールバックします。何も設定されていない場合、フォールバックのためにコントロール プレーン バージョンが使用されます。Declaration in Resource Manager templates fall back to the existing version defined for the node pool if used, if none is set the control plane version is used to fall back on.
    • 特定の時点でコントロール プレーンまたはノード プールのアップグレードまたはスケーリングのどちらかを行うことはできますが、単一のコントロール プレーンまたはノード プール リソースに対して複数の操作を同時に送信することはできません。You can either upgrade or scale a control plane or a node pool at a given time, you cannot submit multiple operations on a single control plane or node pool resource simultaneously.

ノード プールの手動でのスケーリングScale a node pool manually

お使いのアプリケーションのワークロードに対する需要の変化に伴い、ノード プール内のノード数をスケーリングしなければならなくなる場合があります。As your application workload demands change, you may need to scale the number of nodes in a node pool. ノード数は増やすことも減らすことも可能です。The number of nodes can be scaled up or down.

ノード プール内のノード数をスケーリングするには、az aks node pool scale コマンドを使用します。To scale the number of nodes in a node pool, use the az aks node pool scale command. 次の例では、mynodepool 内のノード数を 5 にスケーリングしています。The following example scales the number of nodes in mynodepool to 5:

az aks nodepool scale \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --node-count 5 \
    --no-wait

az aks node pool list コマンドを使用し、再度お使いのノード プールの状態を一覧表示します。List the status of your node pools again using the az aks node pool list command. 次の例では、mynodepool が新しいノード数の 5Scaling の状態であることを示しています。The following example shows that mynodepool is in the Scaling state with a new count of 5 nodes:

$ az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster

[
  {
    ...
    "count": 5,
    ...
    "name": "mynodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Scaling",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Succeeded",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

スケーリングの操作の完了には、数分かかります。It takes a few minutes for the scale operation to complete.

クラスター オートスケーラーを有効にすることで特定のノード プールを自動的にスケーリングするScale a specific node pool automatically by enabling the cluster autoscaler

AKS には、クラスター オートスケーラーと呼ばれる機能を使用してノード プールを自動的にスケーリングするための独立した機能が用意されています。AKS offers a separate feature to automatically scale node pools with a feature called the cluster autoscaler. この機能は、ノード プールごとに一意の最小および最大スケール カウントを使用して、ノード プールごとに有効にすることができます。This feature can be enabled per node pool with unique minimum and maximum scale counts per node pool. ノード プールごとのクラスター オートスケーラーを使用する方法を参照してください。Learn how to use the cluster autoscaler per node pool.

ノード プールの削除Delete a node pool

プールが不要になったら、それを削除して、基になっている VM を削除します。If you no longer need a pool, you can delete it and remove the underlying VM nodes. ノード プールを削除するには、az aks node pool delete コマンドを使用し、ノード プール名を指定します。To delete a node pool, use the az aks node pool delete command and specify the node pool name. 次の例では、前の手順で作成した mynoodepool を削除します。The following example deletes the mynoodepool created in the previous steps:

注意事項

ノード プールの削除で失われたデータを復元するオプションはありません。There are no recovery options for data loss that may occur when you delete a node pool. その他のノード プールでポッドをスケジューリングできない場合、それらのアプリケーションは利用できません。If pods can't be scheduled on other node pools, those applications are unavailable. 使用中のアプリケーションにデータ バックアップがない場合や、お使いのクラスター内の他のノード プールで実行する機能がない場合は、ノード プールは削除しないでください。Make sure you don't delete a node pool when in-use applications don't have data backups or the ability to run on other node pools in your cluster.

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

次の az aks node pool list コマンドでの出力例では、mynodepoolDeleting の状態であることを示しています。The following example output from the az aks node pool list command shows that mynodepool is in the Deleting state:

$ az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster

[
  {
    ...
    "count": 5,
    ...
    "name": "mynodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Deleting",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Succeeded",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

ノードおよびノード プールの削除には数分かかります。It takes a few minutes to delete the nodes and the node pool.

ノード プールの VM サイズの指定Specify a VM size for a node pool

前のノード プールの作成例では、クラスターに作成したノードに、既定の VM サイズを使用しました。In the previous examples to create a node pool, a default VM size was used for the nodes created in the cluster. より一般的なシナリオでは、さまざまなサイズおよび性能の VM のノード プールが作成されます。A more common scenario is for you to create node pools with different VM sizes and capabilities. たとえば、大きな CPU またはメモリのノードが含まれるノード プール、または GPU をサポートするノード プールが作成されます。For example, you may create a node pool that contains nodes with large amounts of CPU or memory, or a node pool that provides GPU support. 次の手順では、taints と tolerations を使用して、Kubernetes スケジューラにこれらのノードで実行されるポッドに対するアクセスを制限する方法を通知します。In the next step, you use taints and tolerations to tell the Kubernetes scheduler how to limit access to pods that can run on these nodes.

次の例では、Standard_NC6 の VM サイズを使用する GPU ベースのノード プールを作成します。In the following example, create a GPU-based node pool that uses the Standard_NC6 VM size. これらの VM は NVIDIA Tesla K80 カードを搭載しています。These VMs are powered by the NVIDIA Tesla K80 card. 使用可能な VM サイズの詳細については、「Azure での Linux VM のサイズ」を参照してください。For information on available VM sizes, see Sizes for Linux virtual machines in Azure.

再度 az aks node pool add コマンドを使用して、ノード プールを作成します。Create a node pool using the az aks node pool add command again. 今回は、次のように gpunodepool を名前として指定し、Standard_NC6 サイズを --node-vm-size パラメーターを使用して指定します。This time, specify the name gpunodepool, and use the --node-vm-size parameter to specify the Standard_NC6 size:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunodepool \
    --node-count 1 \
    --node-vm-size Standard_NC6 \
    --no-wait

az aks node pool list コマンドの次の出力例では、gpunodepool によって指定した VmSize を使用してノードが Creating されていることを示しています。The following example output from the az aks node pool list command shows that gpunodepool is Creating nodes with the specified VmSize:

$ az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster

[
  {
    ...
    "count": 1,
    ...
    "name": "gpunodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Creating",
    ...
    "vmSize": "Standard_NC6",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Succeeded",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

gpunodepool が正常に作成されるには、数分かかります。It takes a few minutes for the gpunodepool to be successfully created.

taints と tolerations を使用したポッドのスケジュールSchedule pods using taints and tolerations

現在、最初に作成した既定のノード プールと、GPU ベースのノード プールの 2 つのノード プールがお使いのクラスターにあります。You now have two node pools in your cluster - the default node pool initially created, and the GPU-based node pool. kubectl get nodes コマンドを使用すると、お使いのクラスターのノードを参照できます。Use the kubectl get nodes command to view the nodes in your cluster. 次の出力例では、ノードが示されています。The following example output shows the nodes:

$ kubectl get nodes

NAME                                 STATUS   ROLES   AGE     VERSION
aks-gpunodepool-28993262-vmss000000  Ready    agent   4m22s   v1.15.7
aks-nodepool1-28993262-vmss000000    Ready    agent   115m    v1.15.7

Kubernetes スケジューラでは、テイントと容認を使用して、ノードで実行できるワークロードを制限できます。The Kubernetes scheduler can use taints and tolerations to restrict what workloads can run on nodes.

  • テイントは、ノードに適用されて、特定のポッドのみをそのノードでスケジュールできることを示します。A taint is applied to a node that indicates only specific pods can be scheduled on them.
  • 容認は、ポッドに適用されて、ポッドがノードのテイントを "許容する" ことを許可します。A toleration is then applied to a pod that allows them to tolerate a node's taint.

Kubernetes での高度なスケジューラ機能の詳細については、「Azure Kubernetes Service (AKS) での高度なスケジューラ機能に関するベスト プラクティス」を参照してください。For more information on how to use advanced Kubernetes scheduled features, see Best practices for advanced scheduler features in AKS

この例では、--node-taints コマンドを使用してお使いの GPU ベースのノードに taint を適用しています。In this example, apply a taint to your GPU-based node using the --node-taints command. 前の kubectl get nodes コマンドからお使いの GPU ベースのノードの名前を指定します。Specify the name of your GPU-based node from the output of the previous kubectl get nodes command. taint が key:value、次いでスケジューリング オプションとして適用されます。The taint is applied as a key:value and then a scheduling option. 次の例では sku=gpu の組み合わせを使用してポッドを定義しています。されない場合、NoSchedule 機能を持つことになります。The following example uses the sku=gpu pair and defines pods otherwise have the NoSchedule ability:

az aks nodepool add --node-taints aks-gpunodepool-28993262-vmss000000 sku=gpu:NoSchedule

次の YAML マニフェストの基本例では、Kubernetes スケジューラが GPU ベースのノードで NGINX ポッドを実行できるように toleration を使用しています。The following basic example YAML manifest uses a toleration to allow the Kubernetes scheduler to run an NGINX pod on the GPU-based node. MNIST データセットに対して Tensorflow ジョブを実行する、より適切な、しかし時間がかかる例については、「Azure Kubernetes Service (AKS) でコンピューティングを集中的に使用するワークロードに GPU を使用する」を参照してください。For a more appropriate, but time-intensive example to run a Tensorflow job against the MNIST dataset, see Use GPUs for compute-intensive workloads on AKS.

gpu-toleration.yaml という名前のファイルを作成し、次の例の YAML にコピーします。Create a file named gpu-toleration.yaml and copy in the following example YAML:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - image: nginx:1.15.9
    name: mypod
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 1
        memory: 2G
  tolerations:
  - key: "sku"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

kubectl apply -f gpu-toleration.yaml コマンドを使用してポッドをスケジュールします。Schedule the pod using the kubectl apply -f gpu-toleration.yaml command:

kubectl apply -f gpu-toleration.yaml

ポッドのスケジュールおよび NGINX イメージのプルには、数秒かかります。It takes a few seconds to schedule the pod and pull the NGINX image. kubectl describe pod コマンドを使用して、ポッドの状態を参照します。Use the kubectl describe pod command to view the pod status. 次の縮約された出力例では、sku = gpu:NoSchedule toleration を適用しています。The following condensed example output shows the sku=gpu:NoSchedule toleration is applied. 次のように、イベント セクションでは、スケジューラがポッドを aks-gpunodepool-28993262-vmss000000 GPU ベース ノードに割り当てています。In the events section, the scheduler has assigned the pod to the aks-gpunodepool-28993262-vmss000000 GPU-based node:

$ kubectl describe pod mypod

[...]
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
                 sku=gpu:NoSchedule
Events:
  Type    Reason     Age    From                                          Message
  ----    ------     ----   ----                                          -------
  Normal  Scheduled  4m48s  default-scheduler                             Successfully assigned default/mypod to aks-gpunodepool-28993262-vmss000000
  Normal  Pulling    4m47s  kubelet, aks-gpunodepool-28993262-vmss000000  pulling image "nginx:1.15.9"
  Normal  Pulled     4m43s  kubelet, aks-gpunodepool-28993262-vmss000000  Successfully pulled image "nginx:1.15.9"
  Normal  Created    4m40s  kubelet, aks-gpunodepool-28993262-vmss000000  Created container
  Normal  Started    4m40s  kubelet, aks-gpunodepool-28993262-vmss000000  Started container

この taint が適用されたポッドのみが、gpunodepool のノードにスケジュールできます。Only pods that have this taint applied can be scheduled on nodes in gpunodepool. その他のポッドは、nodepool1 ノード プールにスケジュールされます。Any other pod would be scheduled in the nodepool1 node pool. ノード プールを追加作成した場合、追加の taints と tolerations を使用して、それらのノード リソースにどのようなポッドをスケジュールするか制限できます。If you create additional node pools, you can use additional taints and tolerations to limit what pods can be scheduled on those node resources.

ノード プールにタグを指定するSpecify a tag for a node pool

AKS クラスター内のノード プールに Azure タグを適用できます。You can apply an Azure tag to node pools in your AKS cluster. ノード プールに適用されるタグは、ノード プール内の各ノードに適用され、アップグレードによって保持されます。Tags applied to a node pool are applied to each node within the node pool and are persisted through upgrades. また、スケール アウト操作中にノード プールに追加される新しいノードにもタグが適用されます。Tags are also applied to new nodes added to a node pool during scale out operations. タグを追加すると、ポリシーの追跡やコスト見積もりなどのタスクに役立ちます。Adding a tag can help with tasks such as policy tracking or cost estimation.

重要

ノード プール タグを使用するには、aks-preview CLI 拡張機能のバージョン 0.4.29 以降が必要です。To use node pool tags, you need the aks-preview CLI extension version 0.4.29 or higher. az extension add コマンドを使用して aks-preview Azure CLI 拡張機能をインストールし、az extension update コマンドを使用して使用可能な更新プログラムがあるかどうかを確認します。Install the aks-preview Azure CLI extension using the az extension add command, then check for any available updates using the az extension update command:

# Install the aks-preview extension
az extension add --name aks-preview

# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview

az aks node pool add を使用して、ノード プールを作成します。Create a node pool using the az aks node pool add. 名前 tagnodepool を指定し、--tag パラメーターを使用して、dept = ITcostcenter=9999 をタグに指定します。Specify the name tagnodepool and use the --tag parameter to specify dept=IT and costcenter=9999 for tags.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name tagnodepool \
    --node-count 1 \
    --tags dept=IT costcenter=9999 \
    --no-wait

注意

--tags パラメーターは、az aks nodepool update コマンドを使用する場合やクラスターの作成時にも使用できます。You can also use the --tags parameter when using az aks nodepool update command as well as during cluster creation. クラスターの作成時に、--tags パラメーターを指定すると、そのクラスターで作成される最初のノード プールにタグが適用されます。During cluster creation, the --tags parameter applies the tag to the initial node pool created with the cluster. すべてのタグ名は、「タグを使用した Azure リソースの整理」の制限に従う必要があります。All tag names must adhere to the limitations in Use tags to organize your Azure resources. --tags パラメーターを使用してノード プールを更新すると、既存のタグ値が更新され、新しいタグが追加されます。Updating a node pool with the --tags parameter updates any existing tag values and appends any new tags. たとえば、ノード プールにタグの dept=ITcostcenter=9999 があった場合は、タグの team=devcostcenter=111 で更新すると、ノードプールには、タグの dept=ITcostcenter=111team=dev が含まれます。For example, if your node pool had dept=IT and costcenter=9999 for tags and you updated it with team=dev and costcenter=111 for tags, you nodepool would have dept=IT, costcenter=111, and team=dev for tags.

az aks nodepool list コマンドの次の出力例は、tagnodepool によって、指定した "タグ" を使用してノードが Creating されていることを示しています。The following example output from the az aks nodepool list command shows that tagnodepool is Creating nodes with the specified tag:

$ az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster

[
  {
    ...
    "count": 1,
    ...
    "name": "tagnodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Creating",
    ...
    "tags": {
      "dept": "IT",
      "costcenter": "9999"
    },
    ...
  },
 ...
]

Resource Manager テンプレートを使用したノード プールの管理Manage node pools using a Resource Manager template

作成する Azure Resource Manager テンプレートと管理対象リソースを使用する場合、通常、テンプレート内の設定を更新し、再デプロイしてリソースを更新できます。When you use an Azure Resource Manager template to create and managed resources, you can typically update the settings in your template and redeploy to update the resource. AKS 内のノード プールでは、AKS クラスターが作成されると、初期ノード プール プロファイルは更新できません。With node pools in AKS, the initial node pool profile can't be updated once the AKS cluster has been created. この動作は、既存の Resource Manager テンプレートの更新、ノード プールへの変更、再デプロイが行えないことを意味します。This behavior means that you can't update an existing Resource Manager template, make a change to the node pools, and redeploy. 代わりに、既存の AKS クラスターのノード プールのみを更新する別の Resource Manager テンプレートを作成する必要があります。Instead, you must create a separate Resource Manager template that updates only the node pools for an existing AKS cluster.

aks-agentpools.json などのテンプレートを作成し、次のマニフェスト例を貼り付けます。Create a template such as aks-agentpools.json and paste the following example manifest. このテンプレートの例は、次の設定を構成します。This example template configures the following settings:

  • 3 つのノードを実行するように、myagentpool という Linux ノード プールを更新します。Updates the Linux node pool named myagentpool to run three nodes.
  • Kubernetes バージョン 1.15.7 を実行するように、ノード プール内のノードを設定します。Sets the nodes in the node pool to run Kubernetes version 1.15.7.
  • Standard_DS2_v2 とノード サイズを定義します。Defines the node size as Standard_DS2_v2.

必要に応じてこれらの値を編集し、ノード プールを更新、追加、または削除します。Edit these values as need to update, add, or delete node pools as needed:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "clusterName": {
            "type": "string",
            "metadata": {
                "description": "The name of your existing AKS cluster."
            }
        },
        "location": {
            "type": "string",
            "metadata": {
                "description": "The location of your existing AKS cluster."
            }
        },
        "agentPoolName": {
            "type": "string",
            "defaultValue": "myagentpool",
            "metadata": {
                "description": "The name of the agent pool to create or update."
            }
        },
        "vnetSubnetId": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "The Vnet subnet resource ID for your existing AKS cluster."
            }
        }
    },
    "variables": {
        "apiVersion": {
            "aks": "2020-01-01"
        },
        "agentPoolProfiles": {
            "maxPods": 30,
            "osDiskSizeGB": 0,
            "agentCount": 3,
            "agentVmSize": "Standard_DS2_v2",
            "osType": "Linux",
            "vnetSubnetId": "[parameters('vnetSubnetId')]"
        }
    },
    "resources": [
        {
            "apiVersion": "2020-01-01",
            "type": "Microsoft.ContainerService/managedClusters/agentPools",
            "name": "[concat(parameters('clusterName'),'/', parameters('agentPoolName'))]",
            "location": "[parameters('location')]",
            "properties": {
                "maxPods": "[variables('agentPoolProfiles').maxPods]",
                "osDiskSizeGB": "[variables('agentPoolProfiles').osDiskSizeGB]",
                "count": "[variables('agentPoolProfiles').agentCount]",
                "vmSize": "[variables('agentPoolProfiles').agentVmSize]",
                "osType": "[variables('agentPoolProfiles').osType]",
                "storageProfile": "ManagedDisks",
                "type": "VirtualMachineScaleSets",
                "vnetSubnetID": "[variables('agentPoolProfiles').vnetSubnetId]",
                "orchestratorVersion": "1.15.7"
            }
        }
    ]
}

次の例で示すように、az group deployment create コマンドを使用してこのテンプレートをデプロイします。Deploy this template using the az group deployment create command, as shown in the following example. 既存の AKS クラスターの名前と場所を求められます。You are prompted for the existing AKS cluster name and location:

az group deployment create \
    --resource-group myResourceGroup \
    --template-file aks-agentpools.json

ヒント

次の例に示すように、テンプレートに tag プロパティを追加することで、ノード プールにタグを追加できます。You can add a tag to your node pool by adding the tag property in the template, as shown in the following example.

...
"resources": [
{
  ...
  "properties": {
    ...
    "tags": {
      "name1": "val1"
    },
    ...
  }
}
...

Resource Manager テンプレートで定義するノード プール設定および操作に応じて、AKS クラスターの更新には数分かかる場合があります。It may take a few minutes to update your AKS cluster depending on the node pool settings and operations you define in your Resource Manager template.

ノード プール内のノードごとにパブリック IP を割り当てるAssign a public IP per node in a node pool

警告

ノードごとにパブリック IP を割り当てるとき、プレビュー中、その IP は AKS の Standard Load Balancer で使用できません。ロード バランサーの規則と VM プロビジョニングが競合する可能性があるためです。During the preview of assigning a public IP per node, it cannot be used with the Standard Load Balancer SKU in AKS due to possible load balancer rules conflicting with VM provisioning. この制限のため、このプレビュー機能では Windows エージェント プールはサポートされていません。As a result of this limitation, Windows agent pools are not supported with this preview feature. プレビューの間、ノードごとにパブリック IP を割り当てる必要がある場合は、Basic Load Balancer SKU を使用する必要があります。While in preview you must use the Basic Load Balancer SKU if you need to assign a public IP per node.

AKS ノードは、通信用に独自のパブリック IP アドレスを必要としません。AKS nodes do not require their own public IP addresses for communication. ただし、一部のシナリオでは、ノード プール内のノードが独自のパブリック IP アドレスを備えることが必要な場合があります。However, some scenarios may require nodes in a node pool to have their own public IP addresses. たとえば、ゲームで、ホップを最小限にするためにクラウド仮想マシンにコンソールが直接接続する必要がある場合です。An example is gaming, where a console needs to make a direct connection to a cloud virtual machine to minimize hops. これは、別のプレビュー機能であるノード パブリック IP (プレビュー) に登録することで実現できます。This can be achieved by registering for a separate preview feature, Node Public IP (preview).

az feature register --name NodePublicIPPreview --namespace Microsoft.ContainerService

登録が正常に完了したら、上記と同じ手順に従って Azure Resource Manager テンプレートをデプロイし、ブール値プロパティ enableNodePublicIP を agentPoolProfiles に追加します。After successful registration, deploy an Azure Resource Manager template following the same instructions as above and add the boolean value property enableNodePublicIP to agentPoolProfiles. 指定しない場合は、既定で false として設定されるため、これを true に設定します。Set the value to true as by default it is set as false if not specified. これは作成時限定のプロパティであり、2019-06-01 の最小 API バージョンが必要です。This is a create-time only property and requires a minimum API version of 2019-06-01. これは、Linux と Windows のどちらのノード プールにも適用できます。This can be applied to both Linux and Windows node pools.

リソースをクリーンアップするClean up resources

この記事では、GPU ベースのノードを含む AKS クラスターを作成しました。In this article, you created an AKS cluster that includes GPU-based nodes. 不要なコストを減らすには、gpunodepool、または AKS クラスター全体を削除してください。To reduce unnecessary cost, you may want to delete the gpunodepool, or the whole AKS cluster.

GPU ベースのノード プールを削除するには、次の例のように az aks nodepool delete コマンドを使用します。To delete the GPU-based node pool, use the az aks nodepool delete command as shown in following example:

az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster --name gpunodepool

クラスター自体を削除するには、az group delete コマンドを使用して AKS リソース グループを削除します。To delete the cluster itself, use the az group delete command to delete the AKS resource group:

az group delete --name myResourceGroup --yes --no-wait

次のステップNext steps

この記事では、AKS クラスターで複数のノード プールを作成および管理する方法を学習しました。In this article, you learned how to create and manage multiple node pools in an AKS cluster. すべてのノード プールのポッドを制御する方法の詳細については、「Azure Kubernetes Service (AKS) での高度なスケジューラ機能に関するベスト プラクティス」を参照してください。For more information about how to control pods across node pools, see Best practices for advanced scheduler features in AKS.

Windows Server コンテナー ノード プールを作成して使用するには、AKS での Windows Server コンテナーの作成に関する記事を参照してください。To create and use Windows Server container node pools, see Create a Windows Server container in AKS.