다음을 통해 공유


AKS(Azure Kubernetes Service) 수직 Pod 자동 크기 조정

이 문서에서는 오픈 소스 Kubernetes 버전을 기반으로 하는 AKS(Azure Kubernetes Service)의 VPA(Vertical Pod Autoscaler)를 사용하는 방법에 대한 개요를 제공합니다.

구성된 경우 VPA는 과거 사용량을 기반으로 워크로드당 컨테이너에 대한 리소스 요청 및 제한을 자동으로 설정합니다. VPA는 다른 Pod에 대한 CPU 및 메모리를 확보하고 AKS 클러스터의 효과적인 사용률을 보장하는 데 도움이 됩니다. Vertical Pod Autoscaler는 시간에 따른 리소스 사용량에 대한 권장 사항을 제공합니다. 리소스 사용량의 급격한 증가를 관리하려면 필요에 따라 Pod 복제본 수를 조정하는 Horizontal Pod Autoscaler를 사용합니다.

이점

Vertical Pod Autoscaler는 다음과 같은 이점을 제공합니다.

  • 애플리케이션에 적절한 크기로 프로세서 및 메모리 리소스를 분석하고 조정합니다. VPA는 스케일 업뿐만 아니라 시간이 지남에 따른 리소스 사용량에 따라 스케일 다운을 담당합니다.
  • 크기 조정 모드가 자동 또는 다시 만들기로 설정된 Pod는 리소스 요청을 변경해야 하는 경우 제거됩니다.
  • 리소스 정책을 지정하여 개별 컨테이너에 대한 CPU 및 메모리 제약 조건을 설정할 수 있습니다.
  • 노드에 Pod 예약을 위한 올바른 리소스가 있는지 확인합니다.
  • 프로세서 또는 메모리 리소스에 대한 조정을 구성할 수 있는 로깅을 제공합니다.
  • 클러스터 리소스 사용률을 개선하고 다른 Pod의 CPU 및 메모리를 확보합니다.

제한 사항 및 고려 사항

Vertical Pod 자동 크기 조정기를 사용하는 경우 다음과 같은 제한 사항 및 고려 사항을 고려합니다.

  • VPA는 클러스터당 개체 VerticalPodAutoscaler개와 연결된 최대 1,000개의 Pod를 지원합니다.
  • VPA는 클러스터에서 사용할 수 있는 것보다 더 많은 리소스를 권장할 수 있으므로 Pod가 노드에 할당되지 않고 리소스 부족으로 인해 실행되지 않습니다. LimitRange를 네임스페이스당 사용 가능한 최대 리소스로 설정하여 이 한도를 극복할 수 있으며, 이를 통해 Pod가 지정된 것보다 더 많은 리소스를 요청하지 않도록 할 수 있습니다. 또한 VerticalPodAutoscaler 개체의 포드당 허용되는 최대 리소스 권장 사항을 설정할 수 있습니다. VPA가 노드 리소스 부족 문제를 완전히 해결할 수는 없습니다. 한도 범위는 고정되지만 노드 리소스 사용량이 동적으로 변경됩니다.
  • 동일한 CPU 및 메모리 사용량 메트릭에 따라 크기가 조정되는 HPA(Horizontal Pod Autoscaler)와 함께 VPA를 사용하지 않는 것이 좋습니다.
  • VPA Recommender는 최대 8일간의 기록 데이터만 저장합니다.
  • VPA는 워크로드의 실제 메모리 사용량에 대한 가시성이 제한되어 JVM 기반 워크로드를 지원하지 않습니다.
  • VPA는 VPA와 함께 고유한 VPA 구현 실행을 지원하지 않습니다. 추가 또는 사용자 지정 Recommender가 지원됩니다.
  • AKS Windows 컨테이너는 지원되지 않습니다.

VPA 개요

VPA 개체는 다음 세 가지 구성 요소로 구성됩니다.

  • 추천자: 추천자는 메트릭 기록, OOM(메모리 부족) 이벤트 및 VPA 배포 사양을 포함하여 현재 및 과거의 리소스 소비를 모니터링하고, 수집한 정보를 사용하여 컨테이너 CPU 및 메모리 요청/제한에 대한 권장 값을 제공합니다.
  • 업데이터: 업데이터는 관리형 Pod를 모니터링하여 리소스 요청이 올바르게 설정되었는지 확인합니다. 그렇지 않은 경우 컨트롤러가 업데이트된 요청으로 다시 만들 수 있도록 해당 Pod를 제거합니다.
  • VPA 허용 컨트롤러: VPA 허용 컨트롤러는 Updater의 활동에 따라 컨트롤러에서 만들거나 다시 만든 새 Pod에 대한 올바른 리소스 요청을 설정합니다.

VPA Admission Controller

VPA Admission Controller는 자신을 Mutating Admission Webhook로 등록하는 바이너리입니다. 새 Pod가 만들어지면 VPA 허용 컨트롤러는 API 서버에서 요청을 가져오고 일치하는 VPA 구성이 있는지 평가하거나 해당 VPA 구성을 찾고 현재 권장 사항을 사용하여 Pod에서 리소스 요청을 설정합니다.

독립 실행형 작업인 overlay-vpa-cert-webhook-check은(는) VPA Admission Controller 외부에서 실행됩니다. 이 overlay-vpa-cert-webhook-check 작업은 인증서를 만들고 갱신하며 VPA 허용 컨트롤러를 MutatingWebhookConfiguration로 등록합니다.

VPA 개체 작업 모드

Vertical Pod Autoscaler 리소스(가장 일반적으로 배포)는 리소스 요구 사항을 자동으로 계산하려는 각 컨트롤러에 대해 삽입됩니다.

VPA가 작동하는 네 가지 모드가 있습니다.

  • Auto: VPA는 Pod를 만드는 동안 리소스 요청을 할당하고 기본 업데이트 메커니즘을 사용하여 기존 Pod를 업데이트합니다. Recreate에 해당하는 Auto은(는) 기본 모드입니다. 재시작이 없거나 현재 위치에서 Pod 요청의 업데이트를 사용할 수 있게 되면 Auto 모드에서 기본 업데이트 메커니즘으로 사용할 수 있습니다. Auto 모드를 사용하면 VPA는 리소스 요청을 변경해야 하는 경우 Pod를 제거합니다. 이로 인해 Pod가 한 번에 다시 시작되어 애플리케이션 불일치가 발생할 수 있습니다. PodDisruptionBudget을 사용하여 이 상황에서 다시 시작을 제한하고 일관성을 유지할 수 있습니다.
  • Recreate: VPA는 Pod를 생성하는 동안 리소스 요청을 할당하고, 요청된 리소스가 새 권장 사항과 크게 다를 때 제거하여 기존 Pod를 업데이트합니다(정의된 경우 Pod 중단 예산 준수). 리소스 요청이 변경될 때마다 Pod가 다시 시작되도록 해야 하는 경우에만 이 모드를 사용해야 합니다. 그렇지 않으면 사용 가능한 경우 다시 시작 없는 업데이트를 활용하는 Auto 모드를 사용하는 것이 좋습니다.
  • Initial: VPA는 Pod를 만드는 동안에만 리소스 요청을 할당합니다. 기존 Pod는 업데이트하지 않습니다. 이 모드는 실행 중인 Pod에 영향을 주지 않고 VPA 동작을 테스트하고 이해하는 데 유용합니다.
  • Off: VPA는 Pod의 리소스 요구 사항을 자동으로 변경하지 않습니다. 권장 사항은 계산되며 VPA 개체에서 검사할 수 있습니다.

애플리케이션 개발을 위한 배포 패턴

VPA에 익숙하지 않은 경우 애플리케이션 개발 중에 다음 배포 패턴을 사용하여 고유한 리소스 사용률 특성을 식별하고, VPA를 테스트하여 제대로 작동하는지 확인하고, 다른 Kubernetes 구성 요소와 함께 테스트하여 클러스터의 리소스 사용률을 최적화하는 것이 좋습니다.

  1. 프로덕션 클러스터에서 UpdateMode = "Off"을(를) 설정하고 권장 모드에서 VPA를 실행하여 VPA를 테스트하고 익숙해질 수 있습니다. UpdateMode = "Off"은(는) 중단을 일으킬 수 있는 잘못된 구성을 도입하는 것을 방지할 수 있습니다.
  2. 지정된 기간 동안 실제 리소스 사용률 원격 분석을 수집하여 먼저 관찰 가능성을 설정합니다. 이를 통해 실행 중인 워크로드의 영향을 받는 컨테이너 및 Pod 리소스의 동작 및 문제의 징후를 파악할 수 있습니다.
  3. 모니터링 데이터를 숙지하여 성능 특성을 이해합니다. 이 인사이트를 기반으로 원하는 요청/한도를 적절하게 설정한 다음, 다음 배포 또는 업그레이드에서 설정합니다.
  4. 요구 사항에 따라 updateMode 값을 Auto, Recreate 또는 Initial(으)로 설정합니다.

다음 단계

AKS 클러스터에서 Vertical Pod Autoscaler를 설정하는 방법을 알아보려면 AKS에서 Vertical Pod Autoscaler 사용을 참조하세요.