Azure Kubernetes Service (AKS) でシステム ノード プールを管理する

Azure Kubernetes Service (AKS) で同じ構成のノードは、ノード プールにグループ化できます。 ノード プールには、お使いのアプリケーションを実行する基になる VM が含まれます。 お使いの AKS クラスターには、システム ノード プールとユーザー ノードプールの 2 つの異なるノード プールのモードがあります。 システム ノード プールは、CoreDNSmetrics-server などの重要なシステム ポッドをホストするという主要な目的を果たします。 ユーザー ノード プールは、アプリケーション ポッドをホストするという主要な目的を果たします。 ただし、AKS クラスター内のプールを 1 つだけにする場合は、システム ノード プールでアプリケーション ポッドをスケジュールすることができます。 各 AKS クラスターには、少なくとも 2 つのノードを含むシステム ノード プールが、少なくとも 1 つ含まれている必要があります。

重要

運用環境内のお使いの AKS クラスターで 1 つのシステム ノード プールを実行する場合、そのノード プールには少なくとも 3 つのノードを使用することをお勧めします。

この記事では、AKS でシステム ノード プールを管理する方法について説明します。 複数のノード プールを使用する方法について詳しくは、「複数のノード プールを使用する」を参照してください。

開始する前に

Azure CLI バージョン 2.3.1 以降がインストールされて構成されている必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

制限事項

システム ノード プールをサポートする AKS クラスターを作成および管理する場合には、次の制限があります。

  • AKS でのクォータ、VM サイズの制限、リージョンの可用性に関するページを参照してください。
  • ノード プール モードを設定するには、2020-03-01 以上の API バージョンを使用する必要があります。 2020-03-01 より前の API バージョンで作成されたクラスターにはユーザー ノード プールのみが含まれますが、プール モードの更新手順に従って、システム ノード プールを含むように移行できます。
  • ノード プールの名前は、小文字の英数字のみを含めることができ、小文字で始める必要があります。 Linux のノード プールの長さは、1 から 12 文字の範囲内である必要があります。 Windows のノード プールの長さは、1 から 6 文字の範囲内である必要があります。
  • ノード プールのモードは必須プロパティであり、ARM テンプレートまたは API 呼び出しを直接行う場合は、明示的に設定する必要があります。

システムおよびユーザー ノード プール

システム ノード プールの場合、AKS はラベル kubernetes.azure.com/mode: system をそのノードに自動的に割り当てます。 これにより、AKS では、このラベルを含むノード プールでのシステム ポッドのスケジューリングが優先されます。 このラベルは、システム ノード プールでのアプリケーション ポッドのスケジュールを妨げません。 ただし、アプリケーション ポッドから重要なシステム ポッドを分離することをお勧めします。これにより、間違ったまたは悪意のあるアプリケーション ポッドが誤ってシステム ポッドを削除することを防ぐことができます。

この動作は、専用のシステム ノード プールを作成することで適用することができます。 システム ノード プールでアプリケーション ポッドがスケジュールされないようにするには、CriticalAddonsOnly=true:NoSchedule テイントを使用します。

システム ノード プールには、次の制限があります。

  • システム ノード プールでは、ポッドの最小値と最大値の式に関する説明のとおり、少なくともポッドを 30 サポートしている必要があります。
  • システム プールの osType は、Linux である必要があります。
  • ユーザー ノード プールの osType には、Linux または Windows が可能です。
  • システム プールには少なくとも 2 つのノードを含める必要があり、ユーザー ノード プールには 0 以上のノードを含めることができます。
  • システム ノード プールには、少なくとも 4 つの vCPU と 4 GB のメモリのがある VM SKU が必要です。
  • B シリーズ VM はシステム ノード プールではサポートされていません。
  • 特に大規模なクラスター (複数の CoreDNS ポッド レプリカ、3 から 4+ のアドオンなど) の場合、最小要件として 8 個の vCPU からなる 3 つのノードか、少なくとも 16 個の vCPU からなる 2 つのノードをお勧めします (Standard_DS4_v2 など)。
  • スポット ノード プールには、ユーザー ノード プールが必要です。
  • 別のシステム ノード プールを追加したり、システム ノード プールとなるノード プールを変更したりしても、システム ポッドは自動的には移動されません。 ノード プールをユーザー ノード プールに変更しても、システム ポッドは同じノード プール上で実行し続けることができます。 システム ポッドを実行中の、以前はシステム ノード プールだったノード プールを削除またはスケールダウンした場合、それらのシステム ポッドは、推奨されるスケジュールで新しいシステム ノード プールに再デプロイされます。

ノード プールには、次の操作を実行できます。

  • 専用のシステム ノード プールを作成する (mode:system のノード プールに対してシステム ポッドをスケジュールすることを優先)
  • 別のシステム ノード プールが AKS クラスター内にあり、それが代わりをする場合に、システム ノード プールをユーザー ノード プールに変更する。
  • ユーザー ノード プールをシステム ノード プールに変更する。
  • ユーザー ノード プールを削除する。
  • 別のシステム ノード プールが AKS クラスター内にあり、それが代わりをする場合に、システム ノード プールを削除できる。
  • AKS クラスターには、少なくとも 1 つのシステム ノード プールが必要であり、複数のシステム ノード プールが存在する場合がある。
  • 既存のノード プールで変更できない各種の設定を変更したい場合は、新しいノード プールを作成して既存のものと置き換えることができる。 たとえば、新しい maxPods 設定で新しいノード プールを追加し、古いノード プールを削除する。
  • ノード アフィニティを使用して、ノード ラベルに基づいてスケジュールできるノードを "要求" または "優先" します。 keykubernetes.azure.com に、operatorIn に、user または system のいずれかの values を YAML に設定して、kubectl apply -f yourYAML.yaml を使ってこの定義を適用することができます。

システム ノード プールを含む新しい AKS クラスターを作成する

新しい AKS クラスターを作成すると、初期ノード プールは既定でタイプ system のモードになります。 az aks nodepool add を使用して作成した新しいノード プールは、モード パラメーターを明示的に指定しない限り、ユーザー ノード プールになります。

次の例では、myResourceGroup という名前のリソース グループを米国東部リージョンに作成します。

az group create --name myResourceGroup --location eastus

AKS クラスターを作成するには、az aks create コマンドを使用します。 次の例では、2 つのノードが含まれる 1 つの専用システム プールを持つ、myAKSCluster という名前のクラスターを作成します。 ご自分の運用環境のワークロードでは、少なくともノードが 3 つあるシステム ノード プールを使用していることを確認してください。 この操作が完了するまでに数分かかる場合があります。

# Create a new AKS cluster with a single system pool
az aks create -g myResourceGroup --name myAKSCluster --node-count 2 --generate-ssh-keys

既存の AKS クラスターに専用システム ノード プールを追加する

既存の AKS クラスターには、システム ノード プールを 1 つ以上追加できます。 ユーザー ノード プールでアプリケーション ポッドをスケジュールし、システム ノード プールを重要なシステム ポッド専用にすることをお勧めします。 これにより、悪意のあるアプリケーション ポッドが誤ってシステムポッドを削除することを防ぐことができます。 システム ノード プールの CriticalAddonsOnly=true:NoScheduleテイントでこの動作を適用します。

次のコマンドでは、モード型が system の専用ノード プールを既定のノード数 3 で追加します。

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name systempool \
    --node-count 3 \
    --node-taints CriticalAddonsOnly=true:NoSchedule \
    --mode System

お使いのノード プールの詳細を表示する

お使いのノード プールの詳細を確認するには、次のコマンドを使用します。

az aks nodepool show -g myResourceGroup --cluster-name myAKSCluster -n systempool

システム ノード プールには System 型のモードが定義され、ユーザー ノード プールには User 型のモードが定義されています。 システム プールの場合は、テイントが CriticalAddonsOnly=true:NoSchedule に設定されていることを確認します。これにより、このノード プールでアプリケーション ポッドがスケジュールされることを防ぐことができます。

{
  "agentPoolType": "VirtualMachineScaleSets",
  "availabilityZones": null,
  "count": 3,
  "enableAutoScaling": null,
  "enableNodePublicIp": false,
  "id": "/subscriptions/yourSubscriptionId/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/agentPools/systempool",
  "maxCount": null,
  "maxPods": 110,
  "minCount": null,
  "mode": "System",
  "name": "systempool",
  "nodeImageVersion": "AKSUbuntu-1604-2020.06.30",
  "nodeLabels": {},
  "nodeTaints": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "orchestratorVersion": "1.16.10",
  "osDiskSizeGb": 128,
  "osType": "Linux",
  "provisioningState": "Succeeded",
  "proximityPlacementGroupId": null,
  "resourceGroup": "myResourceGroup",
  "scaleSetEvictionPolicy": null,
  "scaleSetPriority": null,
  "spotMaxPrice": null,
  "tags": null,
  "type": "Microsoft.ContainerService/managedClusters/agentPools",
  "upgradeSettings": {
    "maxSurge": null
  },
  "vmSize": "Standard_DS2_v2",
  "vnetSubnetId": null
}

既存のクラスターのシステムおよびユーザー ノード プールを更新する

Note

システム ノード プール モードを設定するには、2020-03-01 以降の API バージョンを使用する必要があります。 2020-03-01 より前の API バージョンで作成されたクラスターには、結果としてユーザー ノード プールのみが含まれます。 以前のクラスターでシステム ノード プールの機能とメリットを使用するには、次のコマンドを使用して、既存のノード プールのモードを最新の Azure CLI バージョンに更新します。

システムおよびユーザー ノード プールのいずれもモードを変更できます。 システム ノード プールをユーザー プールに変更できるのは、AKS クラスターに別のシステム ノード プールが既に存在する場合のみです。

このコマンドは、システム ノード プールをユーザー ノード プールに変更します。

az aks nodepool update -g myResourceGroup --cluster-name myAKSCluster -n mynodepool --mode user

このコマンドは、ユーザー ノード プールをシステム ノード プールに変更します。

az aks nodepool update -g myResourceGroup --cluster-name myAKSCluster -n mynodepool --mode system

システムノードプールを削除する

Note

API バージョン 2020-03-02 より前で AKS クラスターでシステム ノード プールを使用する場合、新しいシステム ノード プールを追加してから、元の既定のノード プールを削除してください。

お使いの AKS クラスターに少なくとも 2 つのシステム ノード プールがないと、そのうちの 1 つを削除できません。

az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster -n mynodepool

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

クラスターを削除するには、az group delete コマンドを使用して AKS リソース グループを削除します。

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

次のステップ

この記事では、AKS クラスターでシステム ノード プールを作成および管理する方法を学習しました。 AKS ノード プールを開始および停止する方法について詳しくは、AKS ノード プールの開始と停止に関するページを参照してください。