다음을 통해 공유


AKS(Azure Kubernetes Service)의 가용성 영역

가용성 영역은 데이터 센터 오류로부터 애플리케이션 및 데이터를 보호하는 데 도움이 됩니다. 영역은 Azure 지역 내의 고유한 물리적 위치입니다. 각 영역에는 전력, 냉각 및 네트워킹을 독립적으로 갖춘 하나 이상의 데이터 센터가 포함됩니다.

가용성 영역과 함께 AKS를 사용하면 단일 지역 내의 여러 가용성 영역에 리소스를 물리적으로 분산하여 안정성을 향상합니다. 여러 영역에 노드를 배포해도 추가 비용이 발생하지 않습니다.

이 문서에서는 가용성 영역 사용하도록 AKS 리소스를 구성하는 방법을 보여 줍니다.

AKS 리소스

이 다이어그램은 AKS 클러스터를 만들 때 생성되는 Azure 리소스를 보여줍니다.

Azure 구독에서 Microsoft 및 AKS 구성 요소가 호스트하는 AKS 구성 요소를 보여 주는 다양한 AKS 구성 요소를 보여 주는 다이어그램

AKS 컨트롤 플레인

Microsoft는 AKS 컨트롤 플레인, Kubernetes API 서버 및 관리되는 서비스와 같은 scheduleretcd 서비스를 호스트합니다. Microsoft는 여러 영역에 컨트롤 플레인을 복제합니다.

클러스터의 다른 리소스는 Azure 구독의 관리되는 리소스 그룹에 배포됩니다. 기본적으로 이 리소스 그룹에는 관리형 클러스터에 대한 MC_ 접두사로 지정되며 다음 리소스가 포함됩니다.

노드 풀

노드 풀은 Azure 구독에서 Virtual Machine Scale Set으로 만들어집니다.

AKS 클러스터를 만들 때 하나의 시스템 노드 풀 이 필요하고 자동으로 생성됩니다. 다음과 같은 CoreDNSmetrics-server중요한 시스템 Pod를 호스팅합니다. 애플리케이션을 호스트하기 위해 AKS 클러스터에 더 많은 사용자 노드 풀을 추가할 수 있습니다.

노드 풀을 배포할 수 있는 세 가지 방법이 있습니다.

  • 영역 스패닝
  • 영역 맞춤
  • 지역

다양한 모델의 가용성 영역에 걸쳐 AKS 노드 분포를 보여 주는 다이어그램.

시스템 노드 풀의 경우 클러스터를 만들 때 사용되는 영역 수가 구성됩니다.

영역 스패닝

확장 집합에 걸쳐 있는 영역은 매개 변수를 사용하여 이러한 영역을 지정하여 선택한 모든 영역에 노드를 분산합니다 --zones .

# Create an AKS Cluster, and create a zone spanning System Nodepool in all three AZs, one node in each AZ
az aks create --resource-group example-rg --name example-cluster --node-count 3 --zones 1, 2, 3
# Add one new zone spanning User Nodepool, two nodes in each
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-a  --node-count 6 --zones 1, 2, 3 

AKS는 영역 간의 노드 수를 자동으로 균형 조정합니다.

영역 중단이 발생하면 영향을 받는 영역 내의 노드가 영향을 받을 수 있지만 다른 가용성 영역의 노드는 영향을 받지 않습니다.

영역 맞춤

각 노드는 특정 영역에 맞춰집니다(고정됨). 3개의 가용성 영역 있는 지역에 대해 3개의 노드 풀을 만들려면 다음을 수행합니다.

# # Add three new zone aligned User Nodepools, two nodes in each
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-x  --node-count 2 --zones 1
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-y  --node-count 2 --zones 2
az aks nodepool add --resource-group example-rg --cluster-name example-cluster --name userpool-z  --node-count 2 --zones 3

이 구성은 노드 간의 대기 시간이 짧아야 할 때 사용할 수 있습니다. 또한 크기 조정 작업 또는 클러스터 자동 크기 조정기를 사용하는 경우 보다 세부적인 제어를 제공합니다.

참고 항목

  • 단일 워크로드가 노드 풀에 배포되는 경우 강화 작업 중에 워크로드에 대한 영역에 분산된 노드 분산을 유지하도록 설정하는 --balance-similar-node-groupstrue 것이 좋습니다.

지역(가용성 영역 사용하지 않음)

지역 모드는 영역 할당이 배포 템플릿("zones"=[] or "zones"=null)에서 설정되지 않은 경우에 사용됩니다.

이 구성에서 노드 풀은 지역(영역이 고정되지 않은) 인스턴스를 만들고 지역 전체에 인스턴스를 암시적으로 배치합니다. 영역 간에 균형 또는 분산을 보장하거나 인스턴스가 동일한 가용성 영역에 배치된다는 보장은 없습니다.

드물게 전체 영역 중단의 경우 노드 풀 내의 모든 인스턴스 또는 모든 인스턴스가 영향을 받을 수 있습니다.

노드 위치의 유효성을 검사하려면 다음 명령을 실행합니다.

kubectl describe nodes | grep -e "Name:" -e "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

Kubernetes는 Azure 가용성 영역 알고 있으며 서로 다른 영역의 노드 간에 Pod의 균형을 맞출 수 있습니다. 영역을 사용할 수 없게 되면 Kubernetes는 영향을 받은 노드에서 Pod를 자동으로 이동합니다.

잘 알려진 레이블, 주석 및 Taint에 설명된 대로, Kubernetes는 topology.kubernetes.io/zone 레이블을 사용하여 사용 가능한 여러 영역에 복제 컨트롤러 또는 서비스에 Pod를 자동으로 배포합니다.

실행 중인 Pod 노드를 보려면 다음 명령을 실행합니다.

  kubectl describe pod | grep -e "^Name:" -e "^Node:"

'maxSkew' 매개 변수는 Pod가 고르지 않게 분산될 수 있는 정도를 설명합니다. 3개의 영역과 3개의 복제본을 가정하면 이 값을 1로 설정하면 각 영역에 하나 이상의 Pod가 실행됩니다.

kind: Pod
apiVersion: v1
metadata:
  name: myapp
spec:
  replicas: 3
  topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: "topology.kubernetes.io/zone"
    whenUnsatisfiable: DoNotSchedule # or ScheduleAnyway
  containers:
  - name: pause
    image: registry.k8s.io/pause:3.1

스토리지 및 볼륨

기본적으로 Kubernetes 버전 1.29 이상은 영구 볼륨 클레임에 ZRS(영역 중복 스토리지)를 사용하여 Azure Managed Disks를 사용합니다.

이러한 디스크는 애플리케이션의 복원력을 향상시키고 데이터 센터 오류에 대비하여 데이터를 보호하기 위해 영역 간에 복제됩니다.

ZRS에서 표준 SSD를 사용하는 영구 볼륨 클레임의 예:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: azure-managed-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-csi
  #storageClassName: managed-csi-premium
  resources:
    requests:
      storage: 5Gi

영역 정렬 배포의 경우 매개 변수가 LRS(로컬 중복 스토리지)로 설정된 새 스토리지 클래스 skuname 를 만들 수 있습니다. 그런 다음 PVC(영구 볼륨 클레임)에서 새 스토리지 클래스를 사용할 수 있습니다.

LRS 디스크는 비용이 적게 들지만 영역 중복이 아니며 다른 영역의 노드에 디스크를 연결하는 것은 지원되지 않습니다.

LRS 표준 SSD 스토리지 클래스의 예:

kind: StorageClass

metadata:
  name: azuredisk-csi-standard-lrs
provisioner: disk.csi.azure.com
parameters:
  skuname: StandardSSD_LRS
  #skuname: PremiumV2_LRS

부하 분산 장치

Kubernetes는 기본적으로 Azure 표준 Load Balancer 배포하여 지역의 모든 영역에서 인바운드 트래픽의 균형을 유지합니다. 노드를 사용할 수 없게 되면 부하 분산 장치는 트래픽을 정상 노드로 다시 라우팅합니다.

Azure Load Balancer를 사용하는 예제 서비스:

apiVersion: v1
kind: Service
metadata:
  name: example
spec:
  type: LoadBalancer
  selector:
    app: myapp
  ports:
    - port: 80
      targetPort: 8080

Important

2025년 9월 30일에 기본 Load Balancer가 사용 중지됩니다. 자세한 내용은 공식 공지를 참조하세요. 현재 기본 Load Balancer를 사용하는 경우 사용 중지 날짜 전에 표준 Load Balancer 업그레이드해야 합니다.

제한 사항

가용성 영역 사용하는 경우 다음과 같은 제한 사항이 적용됩니다.

  • AKS의 할당량, Virtual Machine 크기 제한 및 지역 가용성을 참조 하세요.
  • 노드 풀을 만든 후에는 사용된 가용성 영역 수를 변경할 수 없습니다.
  • 대부분의 지역에서는 가용성 영역 지원합니다. 목록은 여기에서 찾을 수 있습니다.

다음 단계