수평형 포드 자동 확장


이 페이지에서는 수평형 포드 자동 확장을 간략히 설명하고 Google Kubernetes Engine(GKE)에서 작동하는 방식을 설명합니다. 또한 클러스터에서 수평형 포드 자동 확장을 구성하고 사용하는 방법을 알아볼 수 있습니다.

수평형 포드 자동 확장 처리는 워크로드의 CPU 또는 메모리 소비에 따라 또는 Kubernetes 내부에서 보고된 커스텀 측정항목 또는 클러스터 외부 소스의 외부 측정항목에 따라 포드 수를 자동으로 늘리거나 줄임으로써 Kubernetes 워크로드 형태를 변경합니다.

노드 자동 프로비저닝이 포함된 GKE 클러스터는 포드 수 변경에 따라 클러스터의 노드 수를 자동으로 확장합니다. 따라서 모든 클러스터에 수평형 포드 자동 확장을 사용하는 것이 좋습니다.

수평형 포드 자동 확장을 사용하는 이유

Kubernetes 클러스터에 처음 워크로드를 배포하는 경우 리소스 요구사항이 무엇이며 사용 패턴, 외부 종속 항목 또는 기타 요인에 따라 이러한 요구사항이 어떻게 변경될지 확실히 모를 수 있습니다. 수평형 포드 자동 확장은 워크로드가 서로 다른 상황에서 일관적으로 작동하도록 보장하고 필요할 때 추가 용량에 대한 비용만 지불하여 비용을 제어할 수 있도록 도와줍니다.

워크로드의 리소스 부족이나 사용량 미달 여부를 보여주는 지표를 예측하기가 쉽지 않을 때도 있습니다. 수평형 포드 자동 확장 처리는 다음 유형의 측정항목 하나 이상을 기준으로 워크로드에서 포드 수를 자동으로 확장할 수 있습니다.

  • 실제 리소스 사용량: 지정된 Pod의 CPU 또는 메모리 사용량이 임계값을 초과하는 경우 이를 기반으로 합니다. 이 수치는 원시 값 또는 해당 리소스에 대한 포드 요청의 양을 나타내는 백분율로 표시될 수 있습니다.

  • 커스텀 측정항목: 초당 클라이언트 요청 속도 또는 초당 I/O 쓰기와 같은 클러스터의 Kubernetes 객체가 보고한 측정항목을 기반으로 합니다.

    애플리케이션에서 CPU나 메모리가 아닌 네트워크 병목 현상이 발생하는 경우 유용합니다.

  • 외부 측정항목: 클러스터 외부의 애플리케이션 또는 서비스 측정항목을 기반으로 합니다.

    예를 들어 Pub/Sub와 같은 파이프라인에서 많은 요청을 수집할 때 워크로드에 CPU가 더 필요할 수 있습니다. 큐 크기에 대해 외부 측정항목을 만들고 큐 크기가 지정된 임곗값에 도달할 때 포드 수를 자동으로 늘리고 큐 크기가 축소될 때 포드 수를 줄이도록 수평형 포드 자동 확장 처리를 구성할 수 있습니다.

약간의 제한사항이 있지만, 수평형 포드 자동 확장 처리와 수직형 포드 자동 확장 처리를 결합할 수 있습니다.

수평형 포드 자동 확장 작동 방법

구성된 각 수평형 포드 자동 확장 처리는 제어 루프를 사용하여 작동합니다. 각 워크플로마다 별도의 수평형 포드 자동 확장 처리가 존재합니다. 각 수평형 포드 자동 확장 처리는 지정된 워크로드의 측정항목을 대상 임계값과 주기적으로 대조하여 확인하고 자동으로 워크로드의 형태를 변경합니다.

포드별 리소스

CPU와 같이 포드별로 할당되는 리소스의 경우 컨트롤러는 포드에서 실행되는 각 컨테이너에 대해 리소스 측정항목 API를 쿼리합니다.

  • CPU 또는 메모리의 원시 값을 지정하면 이 값이 사용됩니다.
  • CPU 또는 메모리의 백분율 값을 지정하면 수평형 포드 자동 확장 처리는 평균 사용률 값을 포드의 CPU 또는 메모리 요청의 백분율로 계산합니다.
  • 커스텀 측정항목 및 외부 측정항목은 원시 값 또는 평균 값으로 표시됩니다.

컨트롤러는 보고된 측정항목의 평균 또는 원시 값을 사용하여 비율을 생성하고 이 비율을 사용하여 워크로드를 자동 확장합니다. Kubernetes 프로젝트 문서에서 수평형 포드 자동 확장 처리 알고리즘에 대한 설명을 볼 수 있습니다.

여러 측정항목에 응답

여러 측정항목을 기반으로 워크플로가 자동 확장되도록 구성하면 수평형 포드 자동 확장 처리는 각 측정항목을 개별적으로 평가하고 확장 알고리즘을 사용하여 각 측정항목을 기반으로 새로운 워크로드 규모를 결정합니다. 가장 큰 규모가 자동 확장 작업에 선택됩니다.

특정 이유로 인해 측정항목 하나 이상을 사용할 수 없게 되면 수평형 포드 자동 확장 처리가 계산된 가장 큰 크기를 기준으로 확장될 수 있지만 축소되지는 않습니다.

스래싱 방지

스래싱은 워크로드가 이전 자동 확장 작업에 대한 응답을 완료하기 전에 수평형 포드 자동 확장 처리가 후속 자동 확장 작업을 수행하려고 시도하는 상황을 나타냅니다. 스래싱을 방지하기 위해 수평형 포드 자동 확장 처리는 이전 5분을 기준으로 최대 권장사항을 선택합니다.

제한사항

  • CPU 또는 메모리에서는 수직형 포드 자동 확장 처리와 함께 수평형 포드 자동 확장 처리를 사용하지 마세요. 다른 측정항목의 수직형 포드 자동 확장 처리와 함께 수평형 포드 자동 확장 처리를 사용할 수 있습니다.
  • 배포가 있으면 이를 지원하는 ReplicaSet 또는 복제 컨트롤러에서 수평형 포드 자동 확장을 구성하지 마세요. 배포 또는 복제 컨트롤러에서 순차적 업데이트를 수행하면 새 복제 컨트롤러로 대체됩니다. 대신 배포 자체에서 수평형 포드 자동 확장을 구성합니다.
  • DaemonSets와 같은 확장 불가능한 워크로드에는 수평형 포드 자동 확장을 사용할 수 없습니다.
  • 커스텀 측정항목 또는 외부 측정항목을 수평형 포드 자동 확장과 함께 사용하여 포드 0개로 축소한 후 다시 확장할 수 없습니다.
  • 수평형 포드 자동 확장은 측정항목을 Kubernetes 리소스로 노출하므로 대문자 또는 '/' 문자 없음과 같은 측정항목 이름에 제한이 적용됩니다. 측정항목 어댑터에서 이름 바꾸기가 허용될 수 있습니다. 예를 들어 prometheus-adapter as 연산자를 참조하세요.

확장성

수평형 포드 자동 확장 처리에서는 지원되는 HPA 객체 수를 엄격하게 제한하지 않습니다. 하지만 HPA 객체가 특정 수를 초과하면 HPA 다시 계산 사이의 기간이 표준 15초보다 길어질 수 있습니다.

  • GKE 부 버전 1.21 이하: 재계산 기간은 HPA 객체를 최대 100개에서 15초 이내여야 합니다.
  • GKE 부 버전 1.22 이상: 재계산 기간은 HPA 객체를 최대 300개에서 15초 이내여야 합니다.

성능에도 영향을 줄 수 있는 요소는 다음과 같습니다.

  • 여러 측정항목에 따라 확장: 모든 측정항목은 추천 계산의 가져오기 호출을 추가하므로 재계산 기간이 영향을 받습니다.
  • 커스텀 측정항목 스택 지연 시간: 약 50밀리초를 초과하는 응답 시간은 표준 Kubernetes 측정항목에서 일반적으로 관찰되는 시간보다 길기 때문에 재계산 기간이 영향을 받습니다.

HorizontalPodAutoscaler 객체와 상호작용

워크로드에 대해 수평형 포드 자동 확장 처리를 구성하고 Google Cloud Console의 워크로드 페이지에서 자동 확장 처리 이벤트 및 원인에 대한 정보를 얻을 수 있습니다.

각 수평형 포드 자동 확장 처리는 클러스터에 HorizontalPodAutoscaler 객체로 존재합니다. kubectl get hpa 또는 kubectl describe hpa HPA_NAME과 같은 명령어를 사용하여 이러한 객체와 상호작용할 수 있습니다.

또한 kubectl autoscale 명령어를 사용하여 HorizontalPodAutoscaler 객체를 만들 수 있습니다.

다음 단계