次の方法で共有


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

Azure Kubernetes Service (AKS)では、同じ構成のノードは、node プールにグループ化されます。 ノード プールには、アプリケーションを実行する基になる仮想マシン (VM) が含まれています。 お使いの AKS クラスターには、システム ノード プールとユーザー ノードプールの 2 つの異なるノード プールのモードがあります。 この記事では、AKS でシステム ノード プールを管理する方法について説明します。 複数のノード プールを使用する方法については、ノード プールの 作成を参照してください。

  • システム ノード プール: 主な目的は、 CoreDNSmetrics-serverなどの重要なシステム ポッドをホストすることです。 システム ノード プールを使用してアプリケーションを実行しないでください。 システム ノード プールでは、Ubuntu Linux または Azure Linux を使用します。
  • ユーザー ノード プール: 主な目的は、アプリケーション ポッドをホストし、システム ノード プールからアプリケーションを分離することです。 この分離により、アプリケーションがクラスターのシステム ノード プールで不安定になるのを防ぐことができます。 ユーザー ノード プールでは、Ubuntu Linux、Azure Linux、またはWindowsを使用できます。

1 つのシステム ノード プールを持つ運用 AKS クラスターには、少なくとも 2 つのノードが含まれている必要があります。 単一のシステム ノード プールを使用する運用 AKS クラスターの推奨事項は、フォールト トレランスと可用性ゾーンを向上させるために少なくとも 3 つのノードを用意することです。 たとえば、 az aks create コマンドの既定のノード数は 3 で、1 つの Linux システム ノード プールと 3 つの Linux ノードを持つ新しいクラスターが作成されます。

AKS クラスターにノード プールが 1 つしかない場合は、システム ノード プールでアプリケーション ポッドをスケジュールすることは可能ですが、お勧めしません。 より優れた解決策は、アプリケーションのユーザー ノード プールを作成することです。

開始する前に

Azure CLI バージョン 2.3.1 以降をインストールして構成する必要があります。 バージョンを確認するには、az --version コマンドを実行します。 インストールまたはアップグレードする必要がある場合は、「Install 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 つのノードが含まれている必要がありますが、推奨事項は 3 つのノードです。 ユーザー ノード プールには、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 つのシステム ノード プールが必要です。
  • 既存のノード プールで変更できない各種の設定を変更したい場合は、新しいノード プールを作成して既存のものと置き換えることができる。 1 つの例として、新しい maxPods 設定で新しいノード プールを追加し、古いノード プールを削除します。
  • ノード アフィニティを使用して、ノード ラベルに基づいてスケジュールできるノードを "要求" または "優先" します。 keykubernetes.azure.com に、operatorIn に、values または user のいずれかの system を YAML に設定して、kubectl apply -f yourYAML.yaml を使ってこの定義を適用することができます。

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

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

この記事で使用するコマンドのリソース グループ、クラスター名、および場所の変数を作成します。 この記事では、値を指定するか、独自の値を使用できます。

export RESOURCE_GROUP="myResourceGroup"
export CLUSTER_NAME="myAKSCluster"
export LOCATION="eastus"
export NEW_SYSTEM_NP="systempool"
export NEW_NODE_POOL="mynodepool"

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

az group create --name $RESOURCE_GROUP --location $LOCATION

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

az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --node-count 2 --generate-ssh-keys

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

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

次のコマンドは、3 つのノードを持つモードタイプの System の専用ノードプールを追加します。 az aks nodepool add コマンドは既定で 3 つのノードを追加しますが、--node-count パラメーターを使用して必要なノードの数を指定します。

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --node-count 3 \
  --node-taints CriticalAddonsOnly=true:NoSchedule \
  --mode System

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

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

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --query "{Count:count, Mode:mode, NodePool:name, NodeTaint:nodeTaints, ResourceGroup:resourceGroup}"

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

{
  "Count": 3,
  "Mode": "System",
  "NodePool": "systempool",
  "NodeTaint": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "ResourceGroup": "myResourceGroup"
}

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

注記

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

システム ノード プールとユーザー ノード プールの両方のモードを変更できます。 AKS クラスターに別のシステム ノード プールが既に存在する場合にのみ、システム ノード プールをユーザー ノード プールに変更できます。

このコマンドを実行して、新しいシステム モード ノード プールを作成します。

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --node-count 3 \
  --mode System

次のコマンドを使用して、モードを確認できます。

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
System

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

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode User

モードが変更されたことを確認するには、次のコマンドを使用します。

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
User

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

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode System

前のコマンドを実行して、モードが変更されたことを確認します。

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

注記

API バージョン 2020-03-01前に AKS クラスターでシステム ノード プールを使用するには、新しいシステム ノード プールを追加してから、元の既定のノード プールを削除します。

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

az aks nodepool delete \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL

システム ノード プールを削除した後、クラスターで作成された元のシステム ノード プールと、セクション 既存の AKS クラスターに専用のシステム ノード プールを追加する で作成したシステム ノード プールが残ります。

az aks nodepool list \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --query "[].{Name:name, Mode:mode}" --output table

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

AKS クラスターのリソース グループを削除すると、すべてのクラスター リソースとその関連ノード リソース グループ (MC_) が削除されます。

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

az group delete --name $RESOURCE_GROUP --yes --no-wait

次のステップ

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