다음을 통해 공유


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 버전은 컨트롤 플레인에 설정된 버전과 일치해야 합니다.

환경 변수 설정

export RESOURCE_GROUP_NAME="my-aks-rg"
export LOCATION="eastus"
export CLUSTER_NAME="my-aks-cluster"
export NODE_POOL_NAME="mynodepool"

단일 노드 풀을 사용하여 AKS 클러스터 만들기

중요합니다

프로덕션 환경에서 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 \
        --___location $LOCATION \
        --load-balancer-sku standard \
        --generate-ssh-keys
    

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

  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
    

    다음 압축된 예제 출력은 mynodepool 이 3개의 노드를 사용하여 성공적으로 생성되었음을 보여 줍니다. 이전 단계에서 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",
        ...
      }
    ]
    

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 이상)은 이제 필요한 az aks update 인수만 사용하여 -g <resourceGroup> -n <clusterName> 명령을 실행할 수 있습니다. 이 명령은 변경 사항 없이 업데이트 작업을 수행하므로 실패한 상태에서 중단된 클러스터를 복구할 수 있습니다.
  • 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용 기본 컨테이너 런타임이자 유일한 컨테이너 런타임입니다.

중요합니다

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 크기 목록을 확인합니다.
  • 워크로드가 올바르게 예약되도록 를 실행하는 Windows Server 2019 노드 풀에 containerd을 사용하고 배포에 톨러레이션 또는 노드 선택기를 사용하는 것이 좋습니다.

containerd로 Windows Server 노드 풀 추가

  • containerd를 사용하여 az aks nodepool add 가 있는 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로 업그레이드

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

    export CONTAINER_D_NODE_POOL_NAME="mywindowsnodepool"
    
    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로 업그레이드

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

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

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

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

    참고 항목

    • --node-osdisk-type 명령과 함께 az aks create 플래그를 사용하여 클러스터를 만드는 동안 임시 OS 디스크를 지정할 수 있습니다.
    • 네트워크에 연결된 OS 디스크로 노드 풀을 생성하려면 --node-osdisk-type Managed를 지정하면 됩니다.
    export EPHEMERAL_NODE_POOL_NAME="mydiskpool"
    
    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
    

중요합니다

임시 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)에서 클러스터에 대한 여러 노드 풀 관리를 참조하세요.