AKS on Windows Server でクラスターのノード プールを管理する

適用対象: Windows Server 上の AKS

Note

Azure Local上の AKS でのノード プールの管理については、「ノード プールの管理」を参照してください。

Windows Server上の AKS では、同じ構成のノードがノード プールにグループ化されます。 これらのノード プールには、お使いのアプリケーションを実行する基になる VM が含まれています。 この記事では、AKS でクラスターのノード プールを作成および管理する方法について説明します。

Note

この機能により、複数のノード プールを作成および管理する方法をより詳細に制御できます。 その結果、作成、更新、削除の各操作には個別のコマンドが必要になります。 以前は、 New-AksHciCluster または Set-AksHciCluster を使用したクラスター操作は、1 つの Windows ノード プールと 1 つの Linux ノード プールを使用してクラスターを作成またはスケーリングする唯一のオプションでした。 この機能により、ノード プール用の個別の操作セットが公開されることになり、ノード プール コマンド New-AksHciNodePoolSet-AksHciNodePoolGet-AksHciNodePool、および Remove-AksHciNodePool を使用して、個々のノード プールに対して操作を実行する必要があります。

開始する前に

バージョン 1.1.6 をインストールすることをお勧めします。 PowerShell モジュールが既にインストールされている場合は、次のコマンドを実行してバージョンを見つけます。

Get-Command -Module AksHci

PowerShell を更新する必要がある場合は、「 AKS ホストをアップグレードする」の手順に従

AKS クラスターの作成

まず、1 つのノード プールで AKS クラスターを作成開始します。 次の例では、 New-AksHciCluster コマンドを使用して、1 つのノードを持つ linuxnodepool という名前の 1 つの Linux ノード プールを持つ新しい Kubernetes クラスターを作成します。 以前のバージョンの AKS でクラスターが既にデプロイされていて、古いデプロイを引き続き使用する場合は、この手順をスキップできます。 新しいノード プール コマンドのセットを使用して、既存のクラスターにノード プールを追加することもできます。

New-AksHciCluster -name mycluster -nodePoolName linuxnodepool -nodeCount 1 -osType linux

Note

New-AksHciClusterの古いパラメーター セットは引き続きサポートされています。

ノード プールを追加する

前の手順で作成した mycluster*' という名前のクラスターには、1 つのノード プールがあります。 New-AksHciNodePool コマンドを使用して、既存のクラスターに 2 番目のノード プールを追加できます。 次の例では、1 つのノード windowsnodepool という名前の Windows ノード プールを作成します。 ノード プールの名前が既存のノード プールと同じ名前ではないことを確認します。

New-AksHciNodePool -clusterName mycluster -name windowsnodepool -count 1 -osType Windows -osSku Windows2022

ノード プールの構成情報を取得する

ノード プールの構成情報を確認するには、Get-AksHciNodePool コマンドを使用します。

Get-AksHciNodePool -clusterName mycluster

出力例:

ClusterName  : mycluster
NodePoolName : linuxnodepool
Version      : v1.20.7
OsType       : Linux
NodeCount    : 1
VmSize       : Standard_K8S3_v1
Phase        : Deployed

ClusterName  : mycluster
NodePoolName : windowsnodepool
Version      : v1.20.7
OsType       : Windows
NodeCount    : 1
VmSize       : Standard_K8S3_v1
Phase        : Deployed

1 つの特定のノード プールの構成情報を表示するには、-name パラメーターを使用します。

Get-AksHciNodePool -clusterName mycluster -name linuxnodepool

出力例:

ClusterName  : mycluster
NodePoolName : linuxnodepool
Version      : v1.20.7
OsType       : Linux
NodeCount    : 1
VmSize       : Standard_K8S3_v1
Phase        : Deployed
Get-AksHciNodePool -clusterName mycluster -name windowsnodepool

出力例:

ClusterName  : mycluster
NodePoolName : windowsnodepool
Version      : v1.20.7
OsType       : Windows
NodeCount    : 1
VmSize       : Standard_K8S3_v1
Phase        : Deployed

Note

New-AksHciCluster で新しいパラメーター セットを使用してクラスターをデプロイしてから、クラスター情報を取得するために Get-AksHciCluster を実行すると、WindowsNodeCountLinuxNodeCount のフィールドに 0 出力が返されます。 各ノード プール内のノードの正確な数を取得するには、指定したクラスター名でコマンド Get-AksHciNodePool を使用します。

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

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

ノード プールのノード数をスケーリングするには、Set-AksHciNodePool コマンドを使用します。 次の例では、linuxnodepool クラスター内の mycluster という名前のノード プール内のノード数を 3 にスケーリングします。

Set-AksHciNodePool -clusterName mycluster -name linuxnodepool -count 3

コントロール プレーン ノードをスケーリングします

コントロール プレーン ノードの管理は変更されていません。 作成、スケーリング、および削除の方法は変わりません。 値を指定しない場合は、 New-AksHciCluster コマンドを使用してコントロール プレーン ノードをデプロイし、パラメーターを controlPlaneNodeCount し、既定値をそれぞれ 1 とStandard_A4_V2で controlPlaneVmSize します。

場合によっては、アプリケーションのワークロード需要の変化に合わせて、コントロール プレーン ノードをスケーリングする必要があります。 コントロール プレーン ノードをスケーリングするには、Set-AksHciCluster コマンドを使用します。 次の例では、前の手順で作成した mycluster クラスターでコントロール プレーン ノードを 3 にスケーリングします。

Set-AksHciCluster -name mycluster -controlPlaneNodeCount 3

ノード プールの削除

ノード プールを削除する必要がある場合は、Remove-AksHciNodePool コマンドを使用します。 次の例では、windowsnodepool クラスターから mycluster という名前のノード プールを削除します。

Remove-AksHciNodePool -clusterName mycluster -name windowsnodepool

ノード プールにテイントを指定する

ノード プールを作成するときに、テイントをそのノード プールに追加できます。 テイントを追加すると、そのノード プール内のすべてのノードもそのテイントを取得します。 テイントと容認について詳しくは、Kubernetes のテイントと容認に関する記事をご覧ください。

ノード プールのテイントの設定

テイントが指定されたノード プールを作成するには、New-AksHciNodePool を使用します。 名前 taintnpを指定し、 -taints パラメーターを使用してテイントの sku=gpu:noSchedule を指定します。

New-AksHciNodePool -clusterName mycluster -name taintnp -count 1 -osType linux -taints sku=gpu:NoSchedule

Note

テイントは、ノード プールを作成するときにノード プールに対してのみ設定できます。

次のコマンドを実行して、指定したテイントでノード プールが正常にデプロイされたことを確認します。

Get-AksHciNodePool -clusterName mycluster -name taintnp
Status       : {Phase, Details}
ClusterName  : mycluster
NodePoolName : taintnp
Version      : v1.20.7-kvapkg.1
OsType       : Linux
NodeCount    : 1
VmSize       : Standard_K8S3_v1
Phase        : Deployed
Taints       : {sku=gpu:NoSchedule}

前の手順では、ノード プールの作成時に sku=gpu:NoSchedule テイントを適用しました。 次の YAML マニフェストの基本例では、Kubernetes スケジューラがそのノードプール内のノードで NGINX ポッドを実行できるように toleration を使用しています。

nginx-toleration.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"

次に、次のコマンドを使用してポッドをスケジュールします。

kubectl apply -f nginx-toleration.yaml

そのポッドがデプロイされていることを確認するために、次のコマンドを実行します。

kubectl describe pod mypod
[...]
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  32s   default-scheduler  Successfully assigned default/mypod to moc-lk4iodl7h2y
  Normal  Pulling    30s   kubelet            Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
  Normal  Pulled     26s   kubelet            Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" in 4.529046457s
  Normal  Created    26s   kubelet            Created container mypod

次のステップ