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 클러스터에서 하나 이상의 노드 풀을 만드는 방법을 보여 줍니다.
시작하기 전에
- Azure CLI 2.2.0 이상 버전을 설치하고 구성해야 합니다.
az --version
을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요. - Azure Kubernetes Service의 애플리케이션 스토리지 옵션을 검토하여 스토리지 구성을 계획합니다.
제한 사항
여러 노드 풀을 지원하는 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개 이상 사용하는 것이 좋습니다. 한 노드가 다운되면 중복성이 손상됩니다. 더 많은 시스템 노드 풀 노드를 사용하여 이 위험을 완화할 수 있습니다.
az group create
명령을 사용하여 Azure 리소스 그룹을 만듭니다.az group create --name $RESOURCE_GROUP_NAME --___location $LOCATION
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
클러스터를 만드는 데 몇 분이 걸립니다.
클러스터가 준비되면
az aks get-credentials
명령을 사용하여 클러스터 자격 증명을 가져옵니다.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
두 번째 노드 풀 추가
이전 단계에서 만든 클러스터에는 노드 풀이 하나 있습니다. 이 섹션에서는 클러스터에 두 번째 노드 풀을 추가합니다.
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
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-preview
Azure 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)에서 클러스터에 대한 여러 노드 풀 관리를 참조하세요.
Azure Kubernetes Service