クラスターのノード プールを管理する (AKS on Azure Stack HCI 22H2)

適用対象: AKS on Azure Stack HCI 22H2、AKS on Windows Server

注意

AKS on Azure Stack HCI 23H2 でのノード プールの管理については、「 ノード プールの管理」を参照してください。

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

注意

この機能を使用すると、複数のノード プールを作成および管理する方法をより細かく制御できます。 その結果、作成、更新、および削除の操作には、個別のコマンドが必要になります。 以前は、 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 コマンドを使用して、 linuxnodepool という名前の 1 つの Linux ノード プール (ノードが 1 つ) を持つ新しい Kubernetes クラスターを作成します。 以前のバージョンの AKS でクラスターが既にデプロイされていて、古いデプロイを引き続き使用する場合は、この手順をスキップできます。 新しいノード プール コマンドのセットを使用して、既存のクラスターにノード プールを追加することもできます。

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

注意

の古いパラメーター セット 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 つの特定のノード プールの構成情報を表示するには、Get-AksHciNodePool の パラメーターを使用-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 のノード プール内のノード数を 3 に mycluster スケーリングします。

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

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

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

場合によっては、アプリケーションのワークロード需要の変化に合わせて、コントロール プレーン ノードをスケーリングする必要があります。 コントロール プレーン ノードをスケーリングするには、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

注意

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

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

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

次の手順