가용성 영역은 데이터 센터 오류로부터 애플리케이션 및 데이터를 보호하는 데 도움이 됩니다. 영역은 Azure 지역 내의 고유한 물리적 위치입니다. 각 영역에는 전력, 냉각 및 네트워킹을 독립적으로 갖춘 하나 이상의 데이터 센터가 포함됩니다.
가용성 영역과 함께 AKS(Azure Kubernetes Service)를 사용하면 단일 지역 내의 여러 가용성 영역에 리소스를 물리적으로 분산하여 안정성을 향상합니다. 여러 영역에 노드를 배포해도 추가 비용이 발생하지 않습니다. 가용성 영역, 다중 지역 구성, 서비스 유지 관리 중 안정성 및 백업을 비롯한 AKS 안정성 기능에 대한 자세한 내용은 AKS의 안정성을 참조하세요.
이 문서에서는 가용성 영역을 사용하도록 AKS 리소스를 구성하는 방법을 보여 줍니다.
AKS 리소스
이 다이어그램은 AKS 클러스터를 만들 때 생성되는 Azure 리소스를 보여줍니다.
AKS 컨트롤 플레인
Microsoft는 AKS 컨트롤 플레인, Kubernetes API 서버 및 관리되는 서비스와 같은 scheduleretcd 서비스를 호스트합니다. Microsoft는 여러 영역에 컨트롤 플레인을 복제합니다.
클러스터의 다른 리소스는 Azure 구독의 관리되는 리소스 그룹에 배포됩니다. 기본적으로 이 리소스 그룹에는 관리형 클러스터에 대한 MC_ 접두사로 지정되며 다음 섹션에 설명된 리소스가 포함되어 있습니다.
노드 풀
노드 풀은 Azure 구독에서 가상 머신 확장 집합으로 만들어집니다.
AKS 클러스터를 만들 때 하나의 시스템 노드 풀 이 필요하며 자동으로 만들어집니다. 다음과 같은 CoreDNSmetrics-server중요한 시스템 Pod를 호스팅합니다. AKS 클러스터 에 더 많은 사용자 노드 풀을 추가하여 애플리케이션을 호스트할 수 있습니다.
노드 풀을 배포할 수 있는 세 가지 방법이 있습니다.
- 영역을 가로지르는
- 영역 맞춤
- 지역
시스템 노드 풀 영역은 클러스터 또는 노드 풀을 만들 때 구성됩니다.
영역을 가로지르는
이 구성에서 노드는 선택한 모든 영역에 분산됩니다. 이러한 영역은 매개 변수를 사용하여 --zones 지정됩니다.
# Create an AKS cluster, and create a zone-spanning system node pool 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 node pool, 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는 영역 간 노드 수의 균형을 자동으로 조정합니다.
영역 중단이 발생하면 영향을 받는 영역 내의 노드가 영향을 받을 수 있지만 다른 가용성 영역의 노드는 영향을 받지 않습니다.
노드 위치의 유효성을 검사하려면 다음 명령을 실행합니다.
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
영역 맞춤
이 구성에서 각 노드는 특정 영역에 맞춰집니다(고정). 세 개의 가용성 영역이 있는 지역에 대해 3개의 노드 풀을 만들려면 다음을 수행합니다.
# # Add three new zone-aligned user node pools, 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-groups를 true로 설정할 것을 권장합니다.
지역(가용성 영역을 사용하지 않음)
지역 모드는 배포 템플릿(예: "zones"=[] 또는 "zones"=null)에서 영역 할당이 설정되지 않은 경우에 사용됩니다.
이 구성에서 노드 풀은 영역 고정되지 않은 지역 인스턴스를 만들고 지역 전체에 인스턴스를 암시적으로 배치합니다. 인스턴스가 영역 간에 균형 있게 분산되거나 각기 다른 가용성 영역에 있을 것이라는 보장은 없습니다. 인스턴스가 동일한 가용성 영역에 있을 것이라는 보장도 없습니다.
드물게 전체 존 서비스가 중단될 경우, 노드 풀 내의 일부 또는 모든 인스턴스가 영향을 받을 수 있습니다.
노드 위치의 유효성을 검사하려면 다음 명령을 실행합니다.
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 0
aks-nodepool1-34917322-vmss000001 eastus 0
aks-nodepool1-34917322-vmss000002 eastus 0
배포
팟들
Kubernetes는 Azure 가용성 영역을 인식하고 서로 다른 영역의 노드 간에 Pod의 균형을 맞출 수 있습니다. 영역을 사용할 수 없게 되면 Kubernetes는 영향을 받는 노드에서 Pod를 자동으로 이동합니다.
Kubernetes 참조 Well-Known 레이블, 주석 및 Taints에 설명된 대로, Kubernetes는 topology.kubernetes.io/zone 레이블을 사용하여 복제 컨트롤러 또는 서비스를 다양한 사용 가능한 영역에 걸쳐 Pod를 자동으로 배포합니다.
실행 중인 Pod 및 노드를 확인하려면 다음 명령을 실행합니다.
kubectl describe pod | grep -e "^Name:" -e "^Node:"
매개변수는 maxSkew pods가 고르지 않게 분산될 수 있는 정도를 설명합니다. 3개의 영역과 3개의 복제본을 가정하면 1 각 영역에 하나 이상의 Pod가 실행되도록 이 값을 설정합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: my-app
containers:
- name: my-container
image: my-image
스토리지 및 볼륨
기본적으로 Kubernetes 버전 1.29 이상에서는 영구 볼륨 클레임에 대한 영역 중복 스토리지를 사용하여 Azure Managed Disks를 사용합니다.
이러한 디스크는 영역 간에 복제되어 애플리케이션의 복원력을 향상시킵니다. 이 작업은 데이터 센터 오류에 대한 데이터를 보호하는 데 도움이 됩니다.
다음 예제에서는 영역 중복 스토리지에서 Azure Standard SSD를 사용하는 영구 볼륨 클레임을 보여 줍니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azure-managed-disk
spec:
accessModes:
- ReadWriteOnce
storageClassName: managed-csi
#storageClassName: managed-csi-premium
resources:
requests:
storage: 5Gi
영역 정렬 배포를 위해 skuname 매개 변수가 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
중요합니다
2025년 9월 30일에 기본 Load Balancer가 사용 중지됩니다. 자세한 내용은 공식 공지를 참조하세요. 기본 Load Balancer를 사용하는 경우 사용 중지 날짜 전에 표준 Load Balancer로 업그레이드 해야 합니다.
제한점
가용성 영역을 사용하는 경우 다음과 같은 제한 사항이 적용됩니다.
- AKS의 할당량, 가상 머신 크기 제한 및 지역 가용성을 참조하세요.
- 노드 풀을 만든 후에는 사용된 가용성 영역 수를 변경할 수 없습니다 .
- 대부분의 지역은 가용성 영역을 지원합니다. 지역 목록을 참조하세요.
관련 콘텐츠
- AKS의 안정성에 대해 알아봅니다.
- 시스템 노드 풀에 대해 알아봅니다.
- 사용자 노드 풀에 대해 알아봅니다.
- 부하 분산 장치에 대해 알아봅니다.
- AKS에서 비즈니스 연속성 및 재해 복구에 대한 모범 사례를 가져옵니다.
Azure Kubernetes Service