다음을 통해 공유


AKS(Azure Kubernetes Service)에서 NAP(노드 자동 프로비저닝) 사용 또는 사용 안 함

이 문서에서는 Azure CLI 또는 ARM(Azure Resource Manager) 템플릿을 사용하여 AKS(Azure Kubernetes Service)에서 NAP(노드 자동 프로비저닝)를 사용하거나 사용하지 않도록 설정하는 방법을 설명합니다.

사용자 지정 VNet(가상 네트워크) 및 서브넷을 사용하여 NAP 사용 AKS 클러스터를 만들려면 사용자 지정 가상 네트워크에서 NAP(노드 자동 프로비저닝) 클러스터 만들기를 참조하세요.

시작하기 전 주의 사항:

시작하기 전에 AKS 문서에서 NAP(노드 자동 프로비저닝) 개요 를 검토합니다. 이 문서에서 는 NAP 작동 방식, 필수 구성 요소제한 사항을 자세히 설명합니다.

AKS 클러스터에서 NAP(노드 자동 프로비저닝) 사용

다음 섹션에서는 신규 또는 기존 AKS 클러스터에서 NAP를 사용하도록 설정하는 방법을 설명합니다.

비고

Prometheus 추가 기능에 대한 Azure Monitor 관리 서비스를 사용하여 노드 자동 프로비저닝의 로그 및 작업을 보려면 컨트롤 플레인 메트릭을 사용하도록 설정할 수 있습니다.

새 클러스터에서 NAP 사용

  • az aks create 명령어와 --node-provisioning-modeAuto 플래그를 설정하여 새 클러스터에서 노드 자동 프로비저닝을 활성화합니다. 다음 명령은 또한 --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인 파일을 만들고, 다음의 ARM 템플릿 구성을 추가합니다. 여기서 properties.nodeProvisioningProfile.mode 필드는 Auto로 설정되어, 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. ARM 템플릿 파일의 경로로 설정된 플래그가 있는 az deployment group create 명령을 사용하여 --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(노드 자동 프로비저닝) 사용 안 함

중요합니다

다음 조건이 충족되는 경우에만 클러스터에서 NAP를 사용하지 않도록 설정할 수 있습니다.

  • 기존 NAP 노드가 없습니다. 이 kubectl get nodes -l karpenter.sh/nodepool 명령을 사용하여 기존 NAP 관리 노드를 확인할 수 있습니다.
  • 기존의 모든 Karpenter NodePools에는 해당 spec.limits.cpu 필드가 0로 설정되어 있습니다. 이 작업을 수행하면 새 노드가 생성되지 않지만 현재 실행 중인 노드가 중단되지는 않습니다.
  1. spec.limits.cpu 필드를 모든 기존 Karpenter0에 대해 NodePool로 설정합니다. 다음은 그 예입니다.

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

    중요합니다

    NAP를 비활성화하기 전에 NAP 노드에서 실행 중이던 모든 Pod가 비 NAP 노드로 안전하게 마이그레이션되었는지 확인하고 싶지 않은 경우에는 2단계와 3단계를 건너뛰고 대신 각 NAP 관리 노드에 대해 kubectl delete node 명령을 사용할 수 있습니다. 그러나 이러한 단계를 건너뛰지 않는 것이 좋습니다. 그렇게 하면 일부 Pod가 보류 상태로 남아 있을 수 있으며 Pod 중단 예산(PDB)을 준수하지 않게 됩니다.

    kubectl delete node 명령을 사용할 때에는 NAP로 관리되는 노드만 삭제하도록 주의해야 합니다. kubectl get nodes -l karpenter.sh/nodepool 명령을 사용하여 NAP 관리 노드를 식별할 수 있습니다.

  2. 모든 카르펜터에 karpenter.azure.com/disable:NoSchedule 테인트를 추가하십시오NodePool. 다음은 그 예입니다.

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

    이 작업은 NAP 관리 노드의 워크로드를 비 NAP 노드로 마이그레이션하여 PDB 및 중단 제한을 적용하는 프로세스를 시작합니다. Pod는 적합할 경우 NAP가 아닌 노드로 마이그레이션됩니다. 고정 크기 용량이 충분하지 않은 경우 일부 노드 NAP 관리 노드는 그대로 유지됩니다.

  3. 기존 고정 크기의 ManagedClusterAgentPools를 확장하거나, NAP에서 관리하는 노드의 부하를 줄이기 위해 새로운 고정 크기의 AgentPools를 만듭니다. 이러한 노드가 클러스터에 추가되면 NAP에서 관리하는 노드가 사용을 중지하고, 작업이 고정 크기 노드로 마이그레이션됩니다.

  4. 명령을 사용하여 모든 NAP 관리 노드를 삭제합니다 kubectl get nodes -l karpenter.sh/nodepool . NAP 관리 노드가 여전히 있는 경우 클러스터에 고정 크기 용량이 부족할 수 있습니다. 이 경우 나머지 워크로드를 마이그레이션할 수 있도록 노드를 더 추가해야 합니다.

  1. NAP 모드를 Manual로 업데이트하고 --node-provisioning-mode로 설정된 Manual 플래그와 함께 az aks update Azure CLI 명령을 사용하세요.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --node-provisioning-mode Manual
    
  1. ARM 템플릿에서 properties.nodeProvisioningProfile.mode 필드를 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"
            }
          }
        }
      ]
    }
    

다음 단계

AKS의 노드 자동 프로비저닝에 대한 자세한 내용은 다음 문서를 참조하세요.