애플리케이션에 대한 AKS(Azure Kubernetes Service)의 크기 조정 옵션
AKS(Azure Kubernetes Service)에서 애플리케이션을 실행할 때 컴퓨팅 리소스의 양을 늘리거나 줄여야 할 수 있습니다. 보유한 애플리케이션 인스턴스 수를 변경하면 기본 Kubernetes 노드 수를 변경해야 할 수도 있습니다. 많은 수의 다른 애플리케이션 인스턴스를 프로비전해야 할 수도 있습니다.
이 문서에서는 Pod 또는 노드 수동 스케일링, Horizontal Pod Autoscaler 사용, 클러스터 자동 크기 조정기 사용, ACI(Azure Container Instances)와의 통합을 비롯한 핵심 AKS 애플리케이션 스케일링 개념을 소개합니다.
수동으로 Pod 또는 노드 크기 조정
복제본(또는 Pod) 및 노드를 수동으로 확장하여 애플리케이션이 사용 가능한 리소스 및 상태의 변경에 응답하는 방법을 테스트할 수 있습니다. 리소스를 수동으로 크기 조정하면 노드 수와 같은 고정 비용을 유지하는 데 사용할 설정된 리소스 양을 정의할 수도 있습니다. 수동으로 스케일링하려면 복제본 또는 노드 수를 정의합니다. 그러면 Kubernetes API가 복제본 또는 노드 수에 따라 추가 Pod 생성 또는 노드 드레이닝을 예약합니다.
노드를 축소할 때 Kubernetes API는 클러스터에서 사용하는 컴퓨팅 형식에 연결된 관련 Azure Compute API를 호출합니다. 예를 들어 Virtual Machine Scale Sets에서 빌드된 클러스터의 경우 Virtual Machine Scale Sets API는 제거할 노드를 결정합니다. 스케일 다운 시 제거를 위해 노드를 선택하는 방법에 대한 자세한 내용은 Virtual Machine Scale Sets FAQ를 참조하세요.
수동 노드 스케일링을 시작하려면 AKS 클러스터에서 수동으로 노드 스케일링을 참조하세요. Pod 수를 수동으로 스케일링하려면 kubectl scale 명령을 참조하세요.
Horizontal Pod Autoscaler
Kubernetes 는 수평 Pod 자동 확장 조정기(HPA)를 사용하여 리소스 수요를 모니터링하고 Pod 수를 자동으로 조정합니다. 기본적으로 HPA는 복제본 수에 필요한 변경 내용이 있는지 Metrics API를 15초마다 확인하고 Metrics API는 60초마다 Kubelet에서 데이터를 검색합니다. 따라서 HPA는 60초마다 업데이트됩니다. 변경이 필요한 경우 그에 따라 복제본 수가 늘어나거나 줄어듭니다. HPA는 Metrics Server for Kubernetes 버전 1.8 이상을 배포한 AKS 클러스터에서 작동합니다.
지정된 배포에 대한 HPA를 구성하는 경우 실행할 수 있는 최소 및 최대 복제본 수를 정의합니다. 또한 CPU 사용량과 같은 크기 조정 결정을 모니터링하고 기반으로 하는 메트릭을 정의합니다.
AKS에서 Horizontal Pod Autoscaler를 시작하려면 AKS에서 Pod 자동 스케일링을 참조하세요.
크기 조정 이벤트 휴지
HPA는 60초마다 효과적으로 업데이트되므로 다른 확인이 이루어지기 전에는 이전 크기 조정 이벤트가 성공적으로 완료되지 않았을 수 있습니다. 이 동작으로 인해 이전 크기 조정 이벤트가 애플리케이션 워크로드를 수신하고 이에 따라 리소스 요구 사항을 조정하기 전에 HPA가 복제본 수를 변경할 수 있습니다.
경합 이벤트를 최소화하기 위해 지연 값이 설정됩니다. 이 값은 HPA가 크기 조정 이벤트 후 다른 크기 조정 이벤트가 트리거될 수 있을 때까지 기다려야 하는 시간을 정의합니다. 이 동작을 통해 새 복제본 개수가 적용되고 Metrics API에는 분산된 워크로드가 반영됩니다. Kubernetes 1.12를 기준으로 스케일 업 이벤트에 대한 지연은 없지만 스케일 다운 이벤트에 대한 기본 지연은 5분입니다.
클러스터 자동 크기 조정기
Pod 수요 변화에 대응하기 위해 Kubernetes 클러스터 자동 크기 조정기는 노드 풀에서 요청된 컴퓨팅 리소스를 기반으로 노드 수를 조정합니다. 기본적으로 클러스터 자동 크기 조정기는 Metrics API 서버에서 10초 간격으로 필요한 노드 개수 변경을 확인합니다. 클러스터 자동 스케일러가 변경이 필요하다고 판단하면 AKS 클러스터의 노드 수가 그에 따라 증가하거나 감소합니다. 클러스터 자동 크기 조정기는 Kubernetes 1.10.x 이상을 실행하는 Kubernetes RBAC 지원 AKS 클러스터에서 작동합니다.
클러스터 자동 크기 조정기는 일반적으로 수평 Pod 자동 크기 조정기와 함께 사용됩니다. 결합되면 수평형 Pod 자동 크기 조정기는 애플리케이션 수요에 따라 Pod 수를 늘리거나 줄이고, 클러스터 자동 크기 조정기는 더 많은 Pod를 실행하도록 노드 수를 조정합니다.
AKS에서 클러스터 크기 조정기를 시작하려면 AKS의 클러스터 자동 크기 조정기를 참조하세요.
스케일 아웃 이벤트
노드에 요청된 Pod를 실행할 만큼 충분한 컴퓨팅 리소스가 없는 경우 해당 Pod는 예약 프로세스를 진행할 수 없습니다. 노드 풀 내에서 더 많은 컴퓨팅 리소스를 사용할 수 없으면 Pod를 시작할 수 없습니다.
클러스터 자동 크기 조정기가 노드 풀 리소스 제한으로 인해 예약할 수 없는 Pod를 확인하면 노드 풀 내의 노드 수를 늘려 추가 컴퓨팅 리소스를 제공합니다. 노드가 성공적으로 배포되고 노드 풀 내에서 사용할 수 있게 되면 Pod가 해당 노드에서 실행되도록 예약됩니다.
애플리케이션 크기를 빠르게 조정해야 하는 경우 클러스터 자동 크기 조정기를 통해 배포되는 추가 노드가 예약된 Pod를 수락할 수 있게 될 때까지 일부 Pod는 예약 대기 상태를 유지할 수 있습니다. 버스트 요구가 높은 애플리케이션의 경우 가상 노드 및 Azure Container Instances로 확장할 수 있습니다.
이벤트 스케일 인
클러스터 자동 크기 조정기는 최근에 새 예약 요청을 받지 못한 노드의 Pod 예약 상태도 모니터링합니다. 이 시나리오는 노드 풀에 필요한 것보다 많은 컴퓨팅 리소스가 있으므로 노드 수를 줄일 수 있음을 나타냅니다. 기본적으로 10분 동안 더 이상 필요하지 않다는 임계값을 통과한 노드는 삭제되도록 예약됩니다. 이 상황이 발생하면 Pod는 노드 풀 내의 다른 노드에서 실행되도록 예약되고 클러스터 자동 크기 조정기는 노드 수를 줄입니다.
클러스터 자동 크기 조정기가 노드 수가 줄이면 다른 노드에서 pod가 예약되어 있으므로 애플리케이션에 약간의 중단이 발생할 수 있습니다. 중단을 최소화하려면 단일 Pod 인스턴스를 사용하는 애플리케이션을 피합니다.
KEDA(Kubernetes 이벤트 기반 자동 크기 조정)
KEDA(Kubernetes Event-driven Autoscaling)는 워크로드의 이벤트 기반 자동 크기 조정을 위한 오픈 소스 구성 요소입니다. 수신된 이벤트 수에 따라 워크로드 크기를 동적으로 조정합니다. KEDA는 ScaledObject라고 하는 CRD(사용자 지정 리소스 정의)를 사용하여 Kubernetes를 확장하여 특정 트래픽에 대응하여 애플리케이션의 크기를 조정하는 방법을 설명합니다.
KEDA 크기 조정은 워크로드가 트래픽의 버스트를 받거나 대량의 데이터를 처리하는 시나리오에서 유용합니다. KEDA는 이벤트 기반이고 이벤트 수에 따라 크기를 조정하는 반면 HPA는 리소스 사용률(예: CPU 및 메모리)에 따른 메트릭 기반이므로 Horizontal Pod Autoscaler와 다릅니다.
AKS에서 KEDA 추가 기능을 시작하려면 KEDA 개요를 참조하세요.
ACI(Azure Container Instances)로 버스트
AKS 클러스터를 빠르게 확장하기 위해 ACI(Azure Container Instances)와 통합합니다. Kubernetes에는 복제본 및 노드 수를 확장하는 기본 제공 구성 요소가 있습니다. 그러나 애플리케이션 크기를 빠르게 조정해야 할 경우 Horizontal Pod Autoscaler는 노드 풀의 기존 컴퓨팅 리소스가 제공할 수 있는 것보다 더 많은 Pod를 예약할 수 있습니다. 이 시나리오는 구성된 경우 클러스터 자동 크기 조정기가 노드 풀에 추가 노드를 배포하도록 트리거하지만, 이러한 노드가 성공적으로 프로비전되고 Kubernetes 스케줄러가 Pod를 실행할 수 있도록 하는 데 몇 분 정도 걸릴 수 있습니다.
ACI를 사용하면 추가 인프라 오버헤드 없이 컨테이너 인스턴스를 빠르게 배포할 수 있습니다. AKS에 연결하면, ACI가 AKS 클러스터의 보안되고 논리적인 확장이 됩니다. Virtual Kubelet을 기반으로 하는 가상 노드 구성 요소가 ACI를 가상 Kubernetes 노드로 제공하는 AKS 클러스터에 설치됩니다. 그러면 Kubernetes는 AKS 클러스터에서 직접, VM 노드의 Pod로 실행되는 Pod가 아니라 가상 노드를 통해 ACI 인스턴스로 실행되는 Pod를 예약할 수 있습니다.
가상 노드를 사용하기 위해 애플리케이션을 수정할 필요가 없습니다. 클러스터 자동 크기 조정기가 AKS 클러스터에 새 노드를 배포할 때 지연 없이 AKS 및 ACI 전반에 걸쳐 배포의 크기를 조정할 수 있습니다.
가상 노드는 AKS 클러스터가 있는 동일한 가상 네트워크의 추가 서브넷에 배포됩니다. 이 가상 네트워크 구성은 ACI와 AKS 간의 트래픽을 보호합니다. AKS 클러스터와 마찬가지로 ACI 인스턴스는 다른 사용자와 격리된 안전한 논리적 컴퓨팅 리소스입니다.
다음 단계
애플리케이션 스케일링을 시작하려면 다음 리소스를 참조하세요.
- 수동으로 Pod 또는 노드 스케일링
- Horizontal Pod Autoscaler 사용
- 클러스터 자동 크기 조정기 사용
- Kubernetes KEDA(이벤트 기반 자동 크기 조정) 추가 기능 사용
Kubernetes 및 AKS 핵심 개념에 대한 자세한 내용은 다음 문서를 참조하세요.
Azure Kubernetes Service