次の方法で共有


Azure Kubernetes Service (AKS) でノード自動プロビジョニング (NAP) を有効または無効にする

この記事では、Azure CLI または Azure Resource Manager (ARM) テンプレートを使用して、Azure Kubernetes Service (AKS) でノード自動プロビジョニング (NAP) を有効または無効にする方法について説明します。

カスタム仮想ネットワーク (VNet) とサブネットを使用して NAP 対応 AKS クラスターを作成する場合は、カスタム仮想 ネットワークでのノード自動プロビジョニング (NAP) クラスターの作成に関するページを参照してください。

開始する前に

開始する前に、 AKS のノード自動プロビジョニング (NAP) の概要 に関する記事を参照してください。この記事では、 NAP のしくみ前提条件制限事項について詳しく説明しています。

AKS クラスターでノード自動プロビジョニング (NAP) を有効にする

以降のセクションでは、新規または既存の AKS クラスターで NAP を有効にする方法について説明します。

新しいクラスターで NAP を有効にする

  • az aks create フラグが --node-provisioning-mode に設定された Auto コマンドを使用して、新しいクラスターでノードの自動プロビジョニングを有効にします。 次のコマンドでは、 --network-pluginazure--network-plugin-modeoverlayに設定し、 --network-dataplaneciliumに設定します。

    az aks create \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --node-provisioning-mode Auto \
        --network-plugin azure \
        --network-plugin-mode overlay \
        --network-dataplane cilium \
        --generate-ssh-keys
    
  1. nap.jsonという名前のファイルを作成し、properties.nodeProvisioningProfile.mode フィールドを Auto に設定して次の ARM テンプレート構成を追加します。これにより NAP が有効になります。 (既定の設定は Manual です)。

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "metadata": {},
      "parameters": {},
      "resources": [
        {
          "type": "Microsoft.ContainerService/managedClusters",
          "apiVersion": "2025-05-01",
          "sku": {
            "name": "Base",
            "tier": "Standard"
          },
          "name": "napcluster",
          "location": "uksouth",
          "identity": {
            "type": "SystemAssigned"
          },
          "properties": {
            "networkProfile": {
                "networkPlugin": "azure",
                "networkPluginMode": "overlay",
                "networkPolicy": "cilium",
                "networkDataplane":"cilium",
                "loadBalancerSku": "Standard"
            },
            "dnsPrefix": "napcluster",
            "agentPoolProfiles": [
              {
                "name": "agentpool",
                "count": 3,
                "vmSize": "standard_d2s_v3",
                "osType": "Linux",
                "mode": "System"
              }
            ],
            "nodeProvisioningProfile": {
              "mode": "Auto"
            }
          }
        }
      ]
    }
    
  2. az deployment group create フラグを ARM テンプレート ファイルのパスに設定して、--template-file コマンドを使用して、新しいクラスターでノードの自動プロビジョニングを有効にします。

    az deployment group create --resource-group $RESOURCE_GROUP --template-file ./nap.json
    

既存のクラスターで NAP を有効にする

  • az aks update フラグが --node-provisioning-mode に設定されている Auto コマンドを使用して、既存のクラスターでノードの自動プロビジョニングを有効にします。

    az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --node-provisioning-mode Auto
    

AKS クラスターでノード自動プロビジョニング (NAP) を無効にする

Important

クラスターで NAP を無効にできるのは、次の条件が満たされている場合のみです。

  • 既存の NAP ノードはありません。 kubectl get nodes -l karpenter.sh/nodepool コマンドを使用して、既存の NAP マネージド ノードを確認できます。
  • 既存のすべての Karpenter NodePools には、 spec.limits.cpu フィールドが 0 に設定されています。 このアクションにより、新しいノードが作成されなくなりますが、現在実行中のノードが中断されることはありません。
  1. 既存のすべての Karpenter spec.limits.cpu に対して、0 フィールドを NodePool に設定します。 例えば次が挙げられます。

    apiVersion: karpenter.sh/v1
    kind: NodePool
    metadata:
      name: default
    spec:
      limits:
        cpu: 0
    

    Important

    NAP ノードで以前に実行されていたすべてのポッドが NAP を無効にする前に、NAP 以外のノードに安全に移行されないようにする必要がない場合は、手順 2 と 3 をスキップして、代わりに各 NAP マネージド ノードに対して kubectl delete node コマンドを使用できます。 ただし、一部のポッドが保留中のままになり、ポッド中断予算 (PDB) が優先されない可能性があるため、 これらの手順をスキップすることはお勧めしません

    kubectl delete node コマンドを使用する場合は、NAP マネージド ノードのみを削除するように注意してください。 nap マネージド ノードは、 kubectl get nodes -l karpenter.sh/nodepool コマンドを使用して識別できます。

  2. すべての Karpenter karpenter.azure.com/disable:NoScheduleNodePool テイントを追加します。 例えば次が挙げられます。

    apiVersion: karpenter.sh/v1
    kind: NodePool
    metadata:
      name: default
    spec:
      template:
        spec:
          ...
          taints:
            - key: karpenter.azure.com/disable
              effect: NoSchedule
    

    このアクションにより、NAP マネージド ノード上のワークロードを NAP 以外のノードに移行するプロセスが開始され、PDB と中断の制限が適用されます。 ポッドは、対応できる場合は NAP 以外のノードに移行します。 十分な固定サイズ容量がない場合は、一部のノード NAP マネージド ノードが残ります。

  3. 既存の固定サイズの ManagedClusterAgentPools をスケールアップするか、新しい固定サイズの AgentPools を作成してノード NAP マネージド ノードから負荷を受け取ります。 これらのノードがクラスターに追加されると、ノード NAP で管理されるノードがドレインされ、作業が固定サイズのノードに移行されます。

  4. kubectl get nodes -l karpenter.sh/nodepool コマンドを使用して、NAP で管理されているすべてのノードを削除します。 NAP で管理されるノードがまだ存在する場合、クラスターには固定サイズの容量がない可能性があります。 この場合は、残りのワークロードを移行できるように、さらにノードを追加する必要があります。

  1. Manual フラグを az aks update に設定して、--node-provisioning-mode Azure CLI コマンドを使用して NAP モードをManualするように更新します。

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --node-provisioning-mode Manual
    
  1. properties.nodeProvisioningProfile.mode フィールドを更新して ARM テンプレートにManualし、再デプロイします。

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "metadata": {},
      "parameters": {},
      "resources": [
        {
          "type": "Microsoft.ContainerService/managedClusters",
          "apiVersion": "2025-05-01",
          "sku": {
            "name": "Base",
            "tier": "Standard"
          },
          "name": "napcluster",
          "location": "uksouth",
          "identity": {
            "type": "SystemAssigned"
          },
          "properties": {
            "networkProfile": {
                "networkPlugin": "azure",
                "networkPluginMode": "overlay",
                "networkPolicy": "cilium",
                "networkDataplane":"cilium",
                "loadBalancerSku": "Standard"
            },
            "dnsPrefix": "napcluster",
            "agentPoolProfiles": [
              {
                "name": "agentpool",
                "count": 3,
                "vmSize": "standard_d2s_v3",
                "osType": "Linux",
                "mode": "System"
              }
            ],
            "nodeProvisioningProfile": {
              "mode": "Manual"
            }
          }
        }
      ]
    }
    

監視ノードの自動プロビジョニング

Karpenter のログと状態を取得する

ログと状態の更新を Karpenter から取得して、NAP 関連のイベントの診断とデバッグに役立ちます。 AKS は、ユーザーに代わってノードの自動プロビジョニングを管理し、マネージド コントロール プレーンで実行します。 コントロール プレーン ログを有効にして、ノードの自動プロビジョニングから Karpenter のログと操作を確認できます。 コントロール プレーン ログの詳細については、AKS コントロール プレーン ログのドキュメントを参照してください。

  1. 次の手順に従って、ノードの自動プロビジョニング ログを Log Analytics にプッシュするリソース ログのルールを設定します。 node-auto-provisioning のオプションを選択するときは、確実に のボックスにチェックマークを入れてください。

  2. クラスターの [ログ] セクションを選択します。

  3. Log Analytics に次のサンプル クエリを入力します:

    AKSControlPlane
    | where Category == "karpenter-events"
    
  4. CLI でノードの自動プロビジョニング イベントを表示します。

    kubectl get events --field-selector source=karpenter-events
    

ノードの自動プロビジョニング メトリック

コントロール プレーン メトリック (プレビュー) を有効にすると、Prometheus アドオン用の Azure Monitor マネージド サービスを使用したノード自動プロビジョニングから、特定の Karpenter メトリックと操作を確認できます。

次のステップ

AKS でのノード自動プロビジョニングの詳細については、次の記事を参照してください。