AKS(Azure Kubernetes Service)에서 클러스터의 노드 풀 만들기

AKS(Azure Kubernetes Service)에서 동일한 구성의 노드는 노드 풀에 그룹화됩니다. 이러한 노드 풀에는 애플리케이션을 실행하는 기본 VM이 포함됩니다. AKS 클러스터를 만들 때, 초기 노드 수와 그 크기(SKU)를 정의합니다. 이를 통해 시스템 노드 풀이 만들어집니다.

컴퓨팅 또는 스토리지 수요가 다른 애플리케이션을 지원하기 위해 사용자 노드 풀을 만들 수 있습니다. 시스템 노드 풀의 주요 목적은 CoreDNS 및 konnectivity와 같은 중요 시스템 Pod를 호스트하는 것입니다. 사용자 노드 풀의 기본 목적은 애플리케이션 Pod를 호스트하는 것입니다. 예를 들어 더 많은 사용자 노드 풀을 사용하여 컴퓨팅 집약적 애플리케이션에 대한 GPU를 제공하거나 고성능 SSD 스토리지에 액세스할 수 있습니다. 그러나 AKS 클러스터에 풀을 하나만 포함하려는 경우 시스템 노드 풀에서 애플리케이션 Pod를 예약할 수 있습니다.

참고 항목

이 기능을 사용하면 여러 노드 풀을 만들고 관리할 수 있으며 CRUD(만들기/업데이트/삭제) 작업을 위한 별도의 명령이 필요합니다. 이전에는 az aks create 또는 az aks update를 통한 클러스터 작업에서 managedCluster API를 사용했으며 컨트롤 플레인과 단일 노드 풀을 변경하는 유일한 옵션이었습니다. 이 기능은 agentPool API를 통해 에이전트 풀에 대한 별도의 작업 세트를 노출하며 개별 노드 풀에서 작업을 실행하려면 az aks nodepool 명령 세트를 사용해야 합니다.

이 문서에서는 AKS 클러스터에서 하나 이상의 노드 풀을 만드는 방법을 보여 줍니다.

시작하기 전에

제한 사항

여러 노드 풀을 지원하는 AKS 클러스터를 만드는 경우 다음과 같은 제한 사항이 적용됩니다.

  • AKS(Azure Kubernetes Service)의 할당량, 가상 머신 크기 제한 및 지역 가용성을 참조하세요
  • AKS 클러스터에 시스템 노드 풀을 대체할 다른 시스템 노드 풀이 있으면 시스템 노드 풀을 삭제해도 됩니다. 그렇지 않은 경우 시스템 노드 풀을 삭제할 수 없습니다.
  • 시스템 풀에 하나 이상의 노드가 포함되어야 하고, 사용자 노드 풀에는 0개 이상의 노드가 포함될 수 있습니다.
  • 여러 노드 풀을 사용하려면 AKS 클러스터에서 표준 SKU 부하 분산 장치를 사용해야 합니다. 기본 SKU 부하 분산 장치에서는 이 기능이 지원되지 않습니다.
  • AKS 클러스터는 노드에 대한 Virtual Machine Scale Sets를 사용해야 합니다.
  • 노드 풀의 이름은 영숫자 소문자만 포함할 수 있고 소문자 문자로 시작해야 합니다.
    • Linux 노드 풀의 경우 길이는 1~12자 사이여야 합니다.
    • Windows 노드 풀의 경우 길이는 1~6자 사이여야 합니다.
  • 모든 노드 풀은 동일한 가상 네트워크에 있어야 합니다.
  • 클러스터를 만들 때 여러 노드 풀을 만드는 경우 노드 풀의 모든 Kubernetes 버전은 컨트롤 플레인에 설정된 버전과 일치해야 합니다.

AKS 클러스터 만들기

Important

프로덕션 환경에서 AKS 클러스터에 대해 단일 시스템 노드 풀을 실행하는 경우 노드 풀에 대해 노드를 3개 이상 사용하는 것이 좋습니다. 하나의 노드가 다운되면 컨트롤 플레인 리소스를 잃고 중복성이 손상됩니다. 더 많은 컨트롤 플레인 노드를 사용하여 이 위험을 완화할 수 있습니다.

  1. az group create 명령을 사용하여 Azure 리소스 그룹을 만듭니다.

    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    
  2. az aks create 명령을 사용하여 노드 풀이 하나인 AKS 클러스터를 만듭니다.

    az aks create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --vm-set-type VirtualMachineScaleSets \
        --node-count 2 \
        --generate-ssh-keys \
        --load-balancer-sku standard
    

    클러스터를 만드는 데 몇 분이 걸립니다.

  3. 클러스터가 준비되면 az aks get-credentials 명령을 사용하여 클러스터 자격 증명을 가져옵니다.

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    

노드 풀 추가

이전 단계에서 만든 클러스터에는 노드 풀이 하나 있습니다. 이 섹션에서는 클러스터에 두 번째 노드 풀을 추가합니다.

  1. az aks nodepool add 명령을 사용하여 새 노드 풀을 만듭니다. 다음 예제에서는 3개의 노드를 실행하는 mynodepool이라는 노드 풀을 만듭니다.

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $NODE_POOL_NAME \
        --node-count 3
    
  2. az aks node pool list 명령을 사용하여 노드 풀의 상태를 확인하고 리소스 그룹과 클러스터 이름을 지정합니다.

    az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
    

    다음 예제 출력은 3개의 노드가 있는 mynodepool을 성공적으로 만들었음을 보여줍니다. 이전 단계에서 AKS 클러스터를 만들 때 노드가 2개인 기본 nodepool1이 만들어졌습니다.

    [
      {
        ...
        "count": 3,
        ...
        "name": "mynodepool",
        "orchestratorVersion": "1.15.7",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      },
      {
        ...
        "count": 2,
        ...
        "name": "nodepool1",
        "orchestratorVersion": "1.15.7",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      }
    ]
    

ARM64 노드 풀

ARM64 프로세서는 Kubernetes 워크로드에 대해 저전력 컴퓨팅을 제공합니다. ARM64 노드 풀을 만들려면 Dpsv5, Dplsv5 또는 Epsv5 시리즈 Virtual Machine을 선택해야 합니다.

제한 사항

  • Kubernetes 버전이 1.29.0 미만인 Defender 지원 클러스터에서는 ARM64 노드 풀이 지원되지 않습니다.
  • FIPS 지원 노드 풀은 ARM64 SKU에서 지원되지 않습니다.

ARM64 노드 풀 추가

  • az aks nodepool add를 사용하여 기존 클러스터에 ARM64 노드 풀을 추가합니다.

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $ARM_NODE_POOL_NAME \
        --node-count 3 \
        --node-vm-size Standard_D2pds_v5
    

Azure Linux 노드 풀

AKS용 Azure Linux 컨테이너 호스트는 AKS 컨테이너 호스트로 사용할 수 있는 오픈 소스 Linux 배포판입니다. 높은 안정성, 보안 및 일관성을 제공합니다. 여기에는 컨테이너 워크로드를 실행하는 데 필요한 최소한의 패키지 세트만 포함되어 있어 부팅 시간과 전반적인 성능이 향상됩니다.

Azure Linux 노드 풀 추가

  • az aks nodepool add 명령을 사용하고 --os-sku AzureLinux를 지정하여 Azure Linux 노드 풀을 기존 클러스터에 추가합니다.

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $AZ_LINUX_NODE_POOL_NAME \
        --os-sku AzureLinux
    

Ubuntu 노드를 Azure Linux 노드로 마이그레이션

다음 방법 중 하나를 사용하여 기존 Ubuntu 노드를 Azure Linux로 마이그레이션할 수 있습니다.

고유한 서브넷이 있는 노드 풀

논리적 격리를 위해 워크로드에서 클러스터 노드를 별도의 풀로 분할해야 하는 경우가 있습니다. 클러스터의 각 노드 풀 전용 서브넷은 이 격리를 지원하는 데 도움이 될 수 있으며, 이를 통해 노드 풀 간에 분할할 비연속 가상 네트워크 주소 공간을 갖도록 하는 등의 요구 사항을 해결할 수 있습니다.

참고 항목

Azure CLI 버전 2.35.0 이상을 사용해야 합니다.

제한 사항

  • 노드 풀에 할당된 모든 서브넷은 동일한 가상 네트워크에 속해야 합니다.
  • 시스템 Pod는 클러스터의 모든 노드 및 Pod에 대한 액세스 권한이 있어야만 DNS 확인 및 터널링 kubectl logs/exec/port-forward 프록시와 같은 중요한 기능을 제공할 수 있습니다.
  • 클러스터를 만든 후 VNET을 확장하는 경우 원래 CIDR 블록 외부에 서브넷을 추가하기 전에 클러스터를 업데이트해야 합니다. 에이전트 풀 추가에서 AKS 오류가 발생하는 동안 aks-previewAzure CLI 확장(버전 0.5.66 이상)은 이제 필요한 -g <resourceGroup> -n <clusterName> 인수만 사용하여 az aks update 명령을 실행할 수 있습니다. 이 명령은 변경 사항 없이 업데이트 작업을 수행하므로 실패한 상태에서 중단된 클러스터를 복구할 수 있습니다.
  • Kubernetes 버전 1.23.3 미만의 클러스터에서 kube-proxy는 새 서브넷의 트래픽을 SNAT하므로 Azure 네트워크 정책에서 패킷을 삭제할 수 있습니다.
  • Windows 노드는 노드 풀이 이미지로 다시 설치될 때까지 새 서브넷에 대한 트래픽을 SNAT합니다.
  • 내부 부하 분산 장치는 기본적으로 노드 풀 서브넷 중 하나로 설정됩니다.

고유한 서브넷을 사용하는 노드 풀 추가

  • az aks nodepool add 명령을 사용하여 고유한 서브넷이 있는 노드 풀을 기존 클러스터에 추가하고 --vnet-subnet-id를 지정합니다.

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $NODE_POOL_NAME \
        --node-count 3 \
        --vnet-subnet-id $SUBNET_RESOURCE_ID
    

FIPS 지원 노드 풀

AKS 클러스터에 FIPS(Federal Information Process Standard)를 사용하도록 설정하는 방법에 대한 자세한 내용은 AKS(Azure Kubernetes Service) 노드 풀에 대해 FIPS(Federal Information Process Standard) 사용하도록 설정를 참조하세요.

containerd가 있는 Windows Server 노드 풀

Kubernetes 버전 1.20 이상부터 containerd를 Windows Server 2019 노드 풀에 대한 컨테이너 런타임으로 지정할 수 있습니다. Kubernetes 1.23부터 containerd는 Windows용 기본 컨테이너 런타임이자 유일한 컨테이너 런타임입니다.

Important

Windows Server 2019 노드 풀에서 containerd를 사용하는 경우:

  • 컨트롤 플레인과 Windows Server 2019 노드 풀 모두 Kubernetes 버전 1.20 이상을 사용해야 합니다.
  • Windows Server 컨테이너를 실행하는 노드 풀을 만들거나 업데이트할 때 --node-vm-size의 기본값은 Standard_D2s_v3이며, 이는 Kubernetes 버전 1.20 이전의 Windows Server 2019 노드 풀에 대한 최소 권장 크기입니다. containerd를 사용하는 Windows Server 2019 노드 풀에 대한 최소 권장 크기는 Standard_D4s_v3입니다. --node-vm-size 매개 변수를 설정할 때 제한된 VM 크기 목록을 확인합니다.
  • 워크로드가 올바르게 예약되도록 containerd를 실행하는 Windows Server 2019 노드 풀에 테인트 또는 레이블을 사용하고 배포에 톨러레이션 또는 노드 선택기를 사용하는 것이 좋습니다.

containerd로 Windows Server 노드 풀 추가

  • az aks nodepool add를 사용하여 containerd 가 있는 Windows Server 노드 풀을 기존 클러스터에 추가합니다.

    참고 항목

    WindowsContainerRuntime=containerd 사용자 지정 헤더를 지정하지 않으면 노드 풀은 기본적으로 containerd를 계속 컨테이너 런타임으로 사용합니다.

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --os-type Windows \
        --name $CONTAINER_D_NODE_POOL_NAME \
        --node-vm-size Standard_D4s_v3 \
        --kubernetes-version 1.20.5 \
        --aks-custom-headers WindowsContainerRuntime=containerd \
        --node-count 1
    

특정한 기존 Windows Server 노드 풀을 containerd로 업그레이드

  • az aks nodepool upgrade 명령을 사용하여 특정 노드 풀을 Docker에서 containerd로 업그레이드합니다.

    az aks nodepool upgrade \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $CONTAINER_D_NODE_POOL_NAME \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

기존 Windows Server 노드 풀을 containerd로 업그레이드

  • az aks nodepool upgrade 명령을 사용하여 모든 노드 풀을 Docker에서 containerd로 업그레이드합니다.

    az aks nodepool upgrade \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

임시 OS 디스크가 있는 노드 풀

  • --node-osdisk-type 플래그가 Ephemeral로 설정된 az aks nodepool add 명령을 사용하여 임시 OS 디스크를 사용하는 노드 풀을 기존 클러스터에 추가합니다.

    참고 항목

    • az aks create 명령과 함께 --node-osdisk-type 플래그를 사용하여 클러스터를 만드는 동안 임시 OS 디스크를 지정할 수 있습니다.
    • 네트워크에 연결된 OS 디스크로 노드 풀을 생성하려면 --node-osdisk-type Managed를 지정하면 됩니다.
    az aks nodepool add --name $EPHEMERAL_NODE_POOL_NAME --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME -s Standard_DS3_v2 --node-osdisk-type Ephemeral
    

Important

임시 OS를 사용하면 VM 캐시 크기까지 VM 및 인스턴스 이미지를 배포할 수 있습니다. AKS의 기본 노드 OS 디스크 구성은 128GB를 사용합니다. 즉, 128GB보다 큰 캐시가 있는 VM 크기가 필요합니다. 기본 Standard_DS2_v2의 캐시 크기는 86GB이며 이는 충분히 크지 않습니다. Standard_DS3_v2 VM SKU의 캐시 크기는 172GB로 충분히 큽니다. --node-osdisk-size를 사용하여 OS 디스크의 기본 크기를 줄일 수도 있지만 AKS 이미지의 최소 크기는 30GB라는 점에 유의해야 합니다.

노드 풀 삭제

노드 풀이 더 이상 필요 없으면 노드 풀을 삭제하고 기본 VM 노드를 제거할 수 있습니다.

주의

노드 풀을 삭제하면 AKS는 차단 및 드레이닝을 수행하지 않으며 노드 풀을 삭제할 때 발생할 수 있는 데이터 손실에 대한 복구 옵션이 없습니다. 다른 노드 풀에서 Pod를 예약할 수 없는 경우 해당 애플리케이션을 사용할 수 없게 됩니다. 사용 중인 애플리케이션에 데이터 백업이 없거나 클러스터의 다른 노드 풀에서 실행할 수 없는 경우 노드 풀을 삭제하면 안 됩니다. 삭제하려는 노드 풀에서 현재 실행 중인 Pod 일정 변경의 중단을 최소화하려면 삭제하기 전에 노드 풀의 모든 노드에서 차단 및 드레이닝을 수행합니다.

  • az aks nodepool delete 명령을 사용하여 노드 풀을 삭제하고 노드 풀 이름을 지정합니다.

    az aks nodepool delete --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --no-wait
    

    노드 및 노드 풀을 삭제하는 데 몇 분 정도 걸립니다.

다음 단계

이 문서에서는 AKS 클러스터에서 여러 노드 풀을 만드는 방법을 배웠습니다. 여러 노드 풀을 관리하는 방법에 대한 자세한 내용은 AKS(Azure Kubernetes Service)에서 클러스터에 대한 여러 노드 풀 관리를 참조하세요.