Azure Kubernetes Service(AKS)에서 애플리케이션을 실행할 때 수요 변화에 맞춰 pod, pod 리소스, 노드 또는 이벤트 기반 워크로드를 확장할 수 있습니다. AKS는 수동 크기 조정, HPA(Horizontal Pod Autoscaler), VPA(Vertical Pod Autoscaler), 클러스터 자동 크기 조정기, Kubernetes KEDA(이벤트 기반 자동 크기 조정), 노드 자동 프로비전 및 ACI(Azure Container Instances)를 사용한 버스트 크기 조정을 지원합니다.
올바른 크기 조정 방법 선택
| 크기 조정 방법 | 적합한 대상 | 핵심 지표 | 가이드 |
|---|---|---|---|
| HPA(Horizontal Pod Autoscaler) | 수요 변동이 있는 상태 비저장 또는 파티셔닝 가능한 워크로드 | CPU 사용률, RPS, 큐 깊이 | Kubernetes에서 HPA(Horizontal Pod Autoscaling)를 사용해야 하는 경우는 언제인가요? |
| VPA(Vertical Pod Autoscaler) | 병렬화할 수 없는 워크로드; Pod 리소스 요청의 적정 크기 조정 | CPU/메모리 리소스 사용량 | AKS에서 Vertical Pod Autoscaler 사용 |
| 클러스터 자동 크기 조정기 | 파드가 Pending 상태로 남아 있을 때의 노드 수준의 용량 | 보류 중인 Pod | AKS에서 클러스터 자동 크기 조정기 사용 |
| 노드 자동 프로비전(NAP) | 올바른 크기의 VM 용량이 필요한 보류 중인 워크로드 | 대기 중인 Pod 리소스 요구사항 | 노드 자동 프로비전 개요 |
| KEDA | 이벤트 기반 워크로드; 0으로 확장 필요 | 큐 길이, 이벤트 백로그 | KEDA 추가 기능 개요 |
| ACI 버스트 크기 조정 | 가상 노드 제한을 충족하는 버스트 수요가 있는 Linux 워크로드 | 수요 급증 | Azure Container Instances 사용하여 가상 노드 만들기 |
각 크기 조정 방법을 사용하는 경우
- 워크로드가 동일한 복제본을 여러 개 실행할 수 있고 CPU, 메모리 또는 요청 속도에 따라 수요가 변동하는 경우 HPA를 사용합니다.
- 워크로드가 수평적으로 확장할 수 없거나(병렬화할 수 없음) 더 나은 일정 예약을 위해 리소스 요청 크기를 조정해야 하는 경우 VPA를 사용합니다.
- 미리 정의된 노드 풀이 있고 보류 중인 Pod 수요에 따라 노드를 추가하거나 제거해야 하는 경우 클러스터 자동 크기 조정기를 사용합니다.
- 노드 풀을 수동으로 구성하지 않고 자동 VM SKU 선택 및 노드 프로비저닝을 원하는 경우 NAP를 사용합니다.
- 크기 조정이 외부 이벤트(큐, 스트림, 메시지)에 응답해야 하거나 0으로 확장 기능이 필요한 경우 KEDA를 사용합니다.
- VM 프로비저닝을 기다리지 않고 Linux 워크로드에 대한 신속한 용량 확장이 필요한 경우 ACI 버스트 크기 조정을 사용합니다(일반적으로 2~5분).
빠른 권장 사항
대부분의 프로덕션 워크로드의 경우 NAP, VPA 및 KEDA를 미리 구성한 AKS Automatic부터 시작합니다. AKS 표준에서는 이러한 기능을 명시적으로 사용하도록 설정하고 구성합니다.
수동으로 Pod 또는 노드 크기 조정
Pod 복제본 및 노드의 크기를 수동으로 조정하여 애플리케이션이 사용 가능한 리소스의 변경에 응답하는 방법을 테스트하거나 고정 용량을 유지할 수 있습니다. 수동으로 크기를 조정하려면 필요한 복제본 또는 노드 수를 정의합니다. 그런 다음 Kubernetes는 Pod를 만들거나 제거하는 반면 AKS는 해당 노드 풀에서 노드를 추가하거나 제거합니다.
노드를 축소할 때 AKS는 클러스터의 컴퓨팅 유형에 대한 관련 Azure Compute API를 호출합니다. Virtual Machine Scale Sets 빌드된 클러스터의 경우 Virtual Machine Scale Sets API는 제거할 노드를 결정합니다. 자세한 내용은 Virtual Machine Scale Sets FAQ를 참조하세요.
시작하려면 다음을 참조하십시오.
가로형 포드 오토스케일러 (Horizontal Pod Autoscaler)
워크로드에서 동일한 복제본을 여러 개 실행할 수 있고 수요가 변동하는 경우 HPA를 사용합니다. CPU나 메모리, 애플리케이션 메트릭(초당 요청 수, 지연 시간) 또는 외부 큐 및 백로그 메트릭을 기준으로 확장됩니다. 복제본이 기존 노드 용량을 초과할 수 있는 경우 AKS 자동에서 미리 구성된 NAP 기능을 사용하거나 AKS 표준에서 클러스터 자동 크기 조정기 또는 NAP를 구성합니다.
동일한 CPU 또는 메모리 메트릭에서 HPA 및 VPA를 사용하지 마세요. 두 자동 크기 조정기를 모두 사용하려면 권장 모드에서 VPA를 사용하거나 고유한 사용자 지정 메트릭을 사용하도록 HPA를 구성합니다.
자세한 정보: Kubernetes에서 HPA(Horizontal Pod Autoscaling)를 사용해야 하는 경우는 언제인가요?
참고 항목: Pod CPU 및 메모리 요청을 적정 크기로 조정하려면 AKS에서 Vertical Pod Autoscaler 사용을 참조하세요.
Vertical Pod 자동 크기 조정기
Vertical Pod Autoscaler는 Pod CPU 및 메모리 사용량을 분석하고 적절한 리소스 요청을 권장하거나 적용합니다. VPA를 사용하여 복제본을 추가하거나 일정 및 리소스 사용률을 개선하여 효율적으로 확장할 수 없는 워크로드 크기를 조정합니다.
업데이트 모드에 따라 VPA는 Pod를 만들거나 제거할 때 권장 사항을 적용하고 업데이트된 리소스 요청을 사용하여 Pod를 다시 만들 수 있습니다. VPA가 변경 내용을 자동으로 적용할 수 있도록 허용하기 전에 워크로드 가용성 요구 사항을 검토합니다.
시작하려면 AKS에서 Vertical Pod 자동 크기 조정기 사용을 참조하세요.
클러스터 자동 크기 조정기
클러스터 자동 크기 조정기는 Pod 예약 요구 사항에 따라 노드 풀의 노드 수를 조정합니다. 노드 용량 부족으로 인해 Pod를 예약할 수 없는 경우 노드를 추가하고 워크로드가 다른 곳에서 실행될 수 있을 때 사용량이 적은 노드를 제거합니다.
클러스터 자동 크기 조정기는 일반적으로 HPA와 함께 사용됩니다. HPA는 워크로드 수요에 따라 Pod 복제본 수를 조정하는 반면 클러스터 자동 크기 조정기는 해당 Pod를 수용하도록 노드 용량을 조정합니다.
시작하려면 AKS에서 클러스터 자동 크기 조정기 사용을 참조하세요.
스케일 아웃 이벤트
노드 풀에 Pod에 대한 컴퓨팅 리소스가 충분하지 않은 경우 Pod는 보류 상태로 유지됩니다. 클러스터 자동 크기 조정기가 노드 풀의 리소스 제약으로 인해 스케줄할 수 없는 Pod를 감지하면 노드 풀의 노드 수를 늘립니다. Kubernetes는 새 노드가 프로비저닝되고 준비 상태가 되면 보류 중인 Pod를 스케줄링합니다.
VM 기반 노드를 프로비전하는 데 몇 분 정도 걸릴 수 있습니다. 갑작스런 버스트 수요가 있는 워크로드의 경우 가상 노드 및 Azure Container Instances 사용하는 것이 좋습니다.
스케일 인 이벤트
클러스터 자동 크기 조정기는 노드의 사용 미달을 모니터링하고 해당 Pod를 다른 노드에서 실행할 수 있는지 여부를 결정합니다. 노드가 더 이상 필요하지 않으면 Kubernetes는 해당 파드를 재조정하고 AKS는 노드 풀에서 해당 노드를 제거합니다.
스케일 인 작업은 Pod가 노드 간에 이동함에 따라 워크로드를 방해할 수 있습니다. 여러 Pod 복제본을 실행하고 적절한 가용성 제어를 구성하여 중단을 최소화합니다.
Kubernetes 이벤트 기반 자동 크기 조정
Kubernetes KEDA(이벤트 기반 자동 크기 조정 )는 이벤트에 따라 워크로드 크기를 조정하는 오픈 소스 구성 요소입니다. KEDA는 워크로드가 이벤트 원본 또는 메트릭에 응답하는 방법을 설명하는 사용자 지정 리소스를 포함하여 ScaledObjectKubernetes를 확장합니다.
KEDA는 큐, 스트림, 메시지 또는 기타 이벤트 백로그를 처리하는 워크로드에 유용합니다. 사용할 수 있는 이벤트가 없을 때 지원되는 워크로드를 0으로 확장하고 백로그가 증가함에 따라 복제본을 늘릴 수 있습니다.
KEDA ScaledObject 를 동일한 워크로드에 대해 별도의 HPA와 결합하지 마세요. KEDA는 내부적으로 HPA를 만들고 사용하므로 자동 크기 조정기는 서로 경쟁합니다.
시작하려면 KEDA 추가 기능 개요를 참조하세요.
노드 자동 프로비전
NAP(노드 자동 프로비전)는 오픈 소스 Karpenter 프로젝트를 사용하여 보류 중인 Pod 요구 사항에 따라 노드를 프로비전하고 관리합니다. NAP는 실시간 워크로드 수요를 충족하기 위해 적절한 가상 머신 SKU 및 노드 수량을 선택합니다.
NAP는 허용된 VM SKU 집합으로 시작하고 보류 중인 워크로드에 대한 용량을 선택합니다. 리소스 제한 및 일정 기본 설정을 정의하여 노드를 프로비전하고 워크로드를 배포하는 방법을 제어할 수 있습니다.
컨트롤 플레인 크기 조정 및 보호
AKS는 클러스터 크기 및 API 서버 리소스 사용률에 따라 컨트롤 플레인 구성 요소의 크기를 자동으로 조정합니다. 이 지침은 AKS 자동 및 AKS 표준에 적용됩니다. 프로덕션 또는 대규모 워크로드에 표준 또는 프리미엄 가격 책정 계층을 사용합니다.
Kubernetes는 각 리소스 유형이 컨트롤 플레인에 서로 다른 요구 사항을 부과하는 다차원적 확장 범위를 갖습니다. 예를 들어, 비밀은 초기 LIST 호출을 수행하는 여러 컨트롤러와 Pod에서 감시되는 경우가 많기 때문에, 덜 자주 감시되는 리소스보다 컨트롤 플레인 부하를 더 많이 유발합니다. 한 차원으로 크게 확장하면 다른 차원의 용량을 줄일 수 있습니다. 예를 들어 수십만 개의 Pod를 실행하면 컨트롤 플레인에서 지원하는 Pod 변형 속도를 줄일 수 있습니다. 권장 사항은 대규모 AKS 클러스터에 대한 Kubernetes 클라이언트 모범 사례를 참조하세요.
컨트롤 플레인의 확장 여부를 확인하려면 ConfigMap을 large-cluster-control-plane-scaling-status 검사합니다.
kubectl describe configmap large-cluster-control-plane-scaling-status -n kube-system
이 ConfigMap이 있으면 AKS가 컨트롤 플레인을 스케일 업하는 것을 확인합니다.
컨트롤 플레인 세이프가드
API 서버의 크기를 자동으로 조정해도 부하가 높은 상태에서 안정화되지 않는 경우 AKS는 관리되는 API 서버 가드를 배포할 수 있습니다. 이 최후의 수단 보호는 비 시스템 클라이언트 요청을 제한하여 컨트롤 플레인이 응답하지 않도록 합니다.
kubelet와 같은 구성 요소의 시스템에 중요한 API 서버 호출은 계속 작동합니다.
관리형 API 서버 가드가 적용되었는지 확인하려면 aks-managed-apiserver-guardFlowSchema 및 PriorityLevelConfiguration를 확인합니다.
kubectl get flowschemas
kubectl get prioritylevelconfigurations
두 명령 출력에 모두 표시되면 aks-managed-apiserver-guard 가드가 활성화됩니다.
이러한 리소스가 있는 경우 완화 지침은 API 서버 및 etcd 문제 해결 가이드를 참조하세요.
ACI(Azure Container Instances)로 버스트
AKS를 Azure Container Instances 통합하여 급격한 수요 증가를 처리할 수 있습니다. Pod 자동 크기 조정은 기존 노드 풀에서 지원할 수 있는 것보다 더 많은 복제본을 만들 수 있지만 추가 VM 기반 노드를 프로비전하는 데 몇 분 정도 걸릴 수 있습니다. ACI는 추가 VM 노드 없이 컴퓨팅 용량을 제공합니다.
가상 노드(ACI 지원 가상 Kubernetes 노드)는 Linux Pod 및 노드를 지원하며 Azure CNI 네트워킹을 사용하는 AKS 클러스터가 필요합니다. API 서버 권한 있는 IP 범위, 영구 볼륨 및 영구 볼륨 클레임, IPv6 및 가상 노드에 연결된 관리 ID를 비롯한 몇 가지 일반적인 시나리오를 지원하지 않습니다. ACI 버스트 크기 조정을 사용하기 전에 가상 노드 제한을 검토합니다.
AKS 가상 노드 구성 요소는 Virtual Kubelet 을 기반으로 하며 ACI를 가상 Kubernetes 노드로 제공합니다. Kubernetes는 AKS VM 노드에서 직접 실행하지 않고 가상 노드를 통해 적합한 Pod를 ACI 컨테이너 인스턴스로 실행하도록 예약할 수 있습니다.
가상 노드는 AKS 클러스터와 동일한 가상 네트워크의 다른 서브넷을 사용합니다. 이 구성은 ACI가 클러스터의 논리적 확장 역할을 할 수 있도록 하면서 AKS와 ACI 간에 프라이빗 네트워크 연결을 제공합니다.
관련 콘텐츠
다음 리소스를 사용하여 워크로드에 맞는 크기 조정 방법을 구현합니다.
- 수동으로 Pod 또는 노드 크기 조정
- Kubernetes에서 HPA(Horizontal Pod Autoscaling)를 사용해야 하는 경우는 언제인가요?
- AKS에서 Vertical Pod Autoscaler 사용
- AKS에서 클러스터 자동 크기 조정기 사용
- KEDA 추가 기능 사용
- 노드 자동 프로비전 사용
- Azure Container Instances 사용하여 가상 노드 만들기
핵심 Kubernetes 및 AKS 개념에 대한 자세한 내용은 다음을 참조하세요.