다음을 통해 공유


가용성 영역을 사용하는 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에 하나씩 에이전트 노드가 있습니다.

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

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. --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 노드 풀은 “균형” 상태입니다.

영역 간 노드 배포 확인

클러스터가 준비되면 확장 집합의 에이전트 노드가 속한 가용성 영역을 나열합니다.

  1. az aks get-credentials 명령을 사용하여 AKS 클러스터 자격 증명을 가져옵니다.

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. 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가 올바르게 분산되는지 확인합니다.

  1. --node-count5로 설정된 az aks scale 명령을 사용하여 AKS 클러스터를 3개에서 5개 노드로 확장합니다.

    az aks scale \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --node-count 5
    
  2. 크기 조정 작업이 완료되면 다음 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
    
  3. 다음 kubectl create deploymentkubectl scale 명령을 사용하여 세 개의 복제본이 있는 NGINX 애플리케이션을 배포합니다.

    kubectl create deployment nginx --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    kubectl scale deployment nginx --replicas=3
    
  4. 다음 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의 비즈니스 연속성 및 재해 복구를 위한 모범 사례를 참조하세요.