가용성 영역을 사용하는 AKS(Azure Kubernetes Service) 클러스터 만들기
이 문서에서는 AKS 클러스터를 만들고 노드 구성 요소를 가용성 영역에 분산하는 방법을 보여 줍니다.
시작하기 전에
- Azure CLI 버전 2.0.76 이상이 설치되고 구성되어 있어야 합니다.
az --version
을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요. - AKS의 가용성 영역 개요를 읽고 AKS에서 가용성 영역을 사용할 때의 이점과 제한 사항을 이해합니다.
Azure Resource Manager 템플릿 및 가용성 영역
Azure Resource Manager 템플릿을 사용하여 가용성 영역이 있는 AKS 클러스터를 만들 때 다음 세부 정보를 유의하세요.
- 템플릿의 null 값을 명시적으로 정의하는 경우(예:
"availabilityZones": null
)는 속성을 존재하지 않는 것처럼 처리합니다. 즉, 클러스터가 가용성 영역에 배포되지 않습니다. - 템플릿에
"availabilityZones":
속성을 포함하지 않으면 클러스터가 가용성 영역에 배포되지 않습니다. - 기존 클러스터의 가용성 영역에 대한 설정을 업데이트할 수 없으며, Azure Resource Manager 템플릿으로 AKS 클러스터를 업데이트하는 경우 동작이 다릅니다. 가용성 영역에 대한 템플릿에서 명시적으로 null 값을 설정하고 클러스터를 업데이트하는 경우 가용성 영역에 대한 클러스터가 업데이트되지 않습니다. 그러나
"availabilityZones": []
와 같은 구문으로 가용성 영역 속성을 생략하면 배포가 기존 AKS 클러스터에서 가용성 영역을 사용하지 않도록 하고 실패합니다.
가용성 영역에 AKS 클러스터 만들기
az aks create
명령을 사용하여 클러스터를 만드는 경우 --zones
매개 변수는 에이전트 노드를 배포할 가용성 영역을 지정합니다. 관리형 컨트롤 플레인 구성 요소가 배포되는 가용성 영역은 이 매개 변수에 의해 제어되지 않습니다. 클러스터 배포 중에 해당 지역의 모든 가용성 영역(있는 경우)에 자동으로 분산됩니다.
다음 예제 명령은 총 3개의 노드가 있는 리소스 그룹 및 AKS 클러스터를 만드는 방법을 보여 줍니다. 영역 1, 영역 2 및 영역 3에 하나씩 에이전트 노드가 있습니다.
az group create
명령을 사용하여 리소스 그룹을 만듭니다.az group create --name $RESOURCE_GROUP --location $LOCATION
--zones
매개 변수와 함께az aks create
명령을 사용하여 AKS 클러스터를 만듭니다.az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --generate-ssh-keys \ --vm-set-type VirtualMachineScaleSets \ --load-balancer-sku standard \ --node-count 3 \ --zones 1 2 3
AKS 클러스터를 만드는 데 몇 분이 걸립니다.
새 노드가 속해야 하는 영역을 결정할 때 지정된 AKS 노드 풀은 기본 Azure Virtual Machine Scale Sets에서 제공하는 가장 적합한 영역 균형을 사용합니다. 각 영역에 동일한 수의 VM이 있거나 확장 집합에 대한 다른 모든 영역에 대략 하나의 VM이 있는 경우 AKS 노드 풀은 “균형” 상태입니다.
영역 간 노드 배포 확인
클러스터가 준비되면 확장 집합의 에이전트 노드가 속한 가용성 영역을 나열합니다.
az aks get-credentials
명령을 사용하여 AKS 클러스터 자격 증명을 가져옵니다.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
kubectl describe
명령을 사용하여 클러스터의 노드를 나열하고topology.kubernetes.io/zone
값을 필터링합니다.kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
다음 예제 출력은 첫 번째 가용성 영역에 대한 eastus2-1, 두 번째 가용성 영역에 대한 eastus2-2와 같이 지정된 지역 및 가용성 영역에 분산된 세 개의 노드를 보여 줍니다.
Name: aks-nodepool1-28993262-vmss000000 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000001 topology.kubernetes.io/zone=eastus2-2 Name: aks-nodepool1-28993262-vmss000002 topology.kubernetes.io/zone=eastus2-3
에이전트 풀에 노드를 더 추가하면 Azure 플랫폼에서 기본 VM을 지정된 가용성 영역에 자동으로 배포합니다.
Kubernetes 버전 1.17.0 이상에서 AKS는 레이블 topology.kubernetes.io/zone
및 사용되지 않는 failure-domain.beta.kubernetes.io/zone
을 사용합니다. 다음 명령을 사용하여 이전 예제에서 kubectl describe nodes
명령을 실행하면 동일한 결과를 얻을 수 있습니다.
kubectl get nodes -o custom-columns=NAME:'{.metadata.name}',REGION:'{.metadata.labels.topology\.kubernetes\.io/region}',ZONE:'{metadata.labels.topology\.kubernetes\.io/zone}'
다음 예제는 더 자세한 정보가 포함된 출력과 유사합니다.
NAME REGION ZONE
aks-nodepool1-34917322-vmss000000 eastus eastus-1
aks-nodepool1-34917322-vmss000001 eastus eastus-2
aks-nodepool1-34917322-vmss000002 eastus eastus-3
영역 간 Pod 배포 확인
잘 알려진 레이블, 주석 및 Taint에 설명된 대로, Kubernetes는 topology.kubernetes.io/zone
레이블을 사용하여 사용 가능한 여러 영역에 복제 컨트롤러 또는 서비스에 Pod를 자동으로 배포합니다. 이 예제에서는 레이블을 테스트하고 클러스터를 3개에서 5개 노드로 확장하여 Pod가 올바르게 분산되는지 확인합니다.
--node-count
이5
로 설정된az aks scale
명령을 사용하여 AKS 클러스터를 3개에서 5개 노드로 확장합니다.az aks scale \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 5
크기 조정 작업이 완료되면 다음
kubectl describe
명령을 사용하여 영역 전체에 Pod 배포를 확인합니다.kubectl describe nodes | grep -e "Name:" -e "topology.kubernetes.io/zone"
다음 예제 출력은 첫 번째 가용성 영역에 대한 eastus2-1, 두 번째 가용성 영역에 대한 eastus2-2와 같이 지정된 지역 및 가용성 영역에 분산된 5개의 노드를 보여 줍니다.
Name: aks-nodepool1-28993262-vmss000000 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000001 topology.kubernetes.io/zone=eastus2-2 Name: aks-nodepool1-28993262-vmss000002 topology.kubernetes.io/zone=eastus2-3 Name: aks-nodepool1-28993262-vmss000003 topology.kubernetes.io/zone=eastus2-1 Name: aks-nodepool1-28993262-vmss000004 topology.kubernetes.io/zone=eastus2-2
다음
kubectl create deployment
및kubectl scale
명령을 사용하여 세 개의 복제본이 있는 NGINX 애플리케이션을 배포합니다.kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine kubectl scale deployment nginx --replicas=3
다음
kubectl describe
명령을 사용하여 영역 간에 Pod 분포를 확인합니다.kubectl describe pod | grep -e "^Name:" -e "^Node:"
다음 예제 출력은 첫 번째 가용성 영역에 대한 eastus2-1, 두 번째 가용성 영역에 대한 eastus2-2와 같이 지정된 지역 및 가용성 영역에 분산된 세 개의 Pod를 보여 줍니다.
Name: nginx-6db489d4b7-ktdwg Node: aks-nodepool1-28993262-vmss000000/10.240.0.4 Name: nginx-6db489d4b7-v7zvj Node: aks-nodepool1-28993262-vmss000002/10.240.0.6 Name: nginx-6db489d4b7-xz6wj Node: aks-nodepool1-28993262-vmss000004/10.240.0.8
이전 출력에서 볼 수 있듯이, 첫 번째 Pod는 가용성 영역
eastus2-1
에 있는 노드 0에서 실행됩니다. 두 번째 Pod는eastus2-3
에 해당하는 노드 2에서 실행되며, 세 번째 Pod는eastus2-2
의 노드 4에서 실행됩니다. 추가 구성 없이도 Kubernetes는 세 개 가용성 영역 모두에 Pod를 올바르게 분산합니다.
다음 단계
이 문서에서는 가용성 영역을 사용하는 AKS 클러스터를 만드는 방법을 설명했습니다. 고가용성 클러스터의 추가 고려 사항은 AKS의 비즈니스 연속성 및 재해 복구를 위한 모범 사례를 참조하세요.
Azure Kubernetes Service