Ssoon

AWS EKS - Autoscaling - Workloads 본문

AWS EKS Workshop Study 2기

AWS EKS - Autoscaling - Workloads

구구달스 2024. 3. 31. 19:19
CloudNet@ 팀의 AWS EKS Workshop Study 2기 - 5주차
# EKS Workshop 참고
  • 클러스터에서 리소스를 확장하고 워크로드를 관리하는 방법
  • Horizontal Pod Autoscaler (HPA)
    • Kubernetes에서 애플리케이션의 수평적인 스케일링을 자동화하는 기능
    • 애플리케이션의 부하나 트래픽 변화에 따라 Pod의 개수를 조정하여 성능을 최적화
    • 애플리케이션이나 워크로드의 현재 상태를 모니터링하고, 설정된 지표(예: CPU 사용률, 메모리 사용률 등)를 기준으로 Pod의 수를 조절
      1. Metrics Server: 클러스터 내에서 리소스 사용량 및 지표를 수집하는 컴포넌트, HPA는 Metrics Server를 통해 애플리케이션의 상태를 모니터링합니다.
      2. Metrics: HPA가 사용할 지표를 정의합니다. 일반적으로 CPU 사용률, 메모리 사용률 등의 지표를 활용합니다.
      3. Target Value: 설정된 지표의 목표 값을 정의합니다. 예를 들어, CPU 사용률이 50%를 넘으면 Pod를 추가하도록 설정할 수 있습니다.
    • HPA는 설정된 지표를 기반으로 현재 Pod의 수와 목표 값을 비교하여 Pod의 스케일링을 결정
    • 현재 Pod의 수가 목표 값을 넘지 않으면 HPA는 새로운 Pod를 추가하고, 목표 값을 넘으면 Pod를 줄입니다.
  • Cluster Proportional Autoscaler (CPA)
    • Kubernetes 클러스터 내의 노드 수를 자동으로 조절하여 애플리케이션의 요구 사항에 맞게 리소스를 효율적으로 사용
    • 클러스터의 크기를 동적으로 조정하여 클러스터 내에서 실행되는 애플리케이션의 수요에 맞게 리소스를 할당
      1. Proportional Scaling: CPA는 클러스터의 크기를 애플리케이션의 리소스 요구에 비례하여 조정합니다. 즉, 애플리케이션의 부하가 증가하면 클러스터도 확장되고, 부하가 감소하면 클러스터가 축소됩니다.
      2. Efficient Resource Utilization: CPA는 클러스터 내의 노드 수를 최적화하여 리소스의 낭비를 방지합니다. 이를 통해 클러스터는 항상 필요한 만큼의 리소스만을 사용하게 됩니다.
      3. Integration with Kubernetes API: CPA는 Kubernetes API와 통합되어 클러스터의 상태를 모니터링하고 애플리케이션의 요구 사항에 따라 클러스터를 자동으로 조절합니다.

 Horizontal Pod Autoscaler


  • Workshop 실습 환경 준비
더보기
  • EKS 클러스터에 Kubernetes Metrics 서버를 설치

  • 실습에서는 배포 또는 레플리카 세트에서 파드를 확장하기 위한 수평 파드 오토스케일러(HPA)를 확인
    • 이것은 K8s API 리소스와 컨트롤러로 구현
    • 리소스는 컨트롤러의 동작을 결정
    • 컨트롤러 관리자는 각 HorizontalPodAutoscaler 정의에 지정된 메트릭에 대해 리소스 사용률을 쿼리
    • 컨트롤러는 평균 CPU 사용률, 평균 메모리 사용률 또는 기타 사용자 지정 메트릭과 같은 메트릭을 관찰하여 복제 컨트롤러 또는 배포의 복제본 수를 사용자가 지정한 목표에 따라 주기적으로 조정
    • 이 컨트롤러는 리소스 메트릭 API(포드별 리소스 메트릭의 경우) 또는 사용자 정의 메트릭 API(기타 모든 메트릭의 경우)에서 메트릭을 가져옴
  • 쿠버네티스 메트릭 서버는 클러스터의 리소스 사용량 데이터를 확장 가능하고 효율적으로 수집하는 애그리게이터
    • 이것은 수평 파드 오토스케일러에 필요한 컨테이너 메트릭을 제공
    • 메트릭 서버는 Amazon EKS 클러스터에 기본적으로 배포되지 않음

💠 Metric server

  • 쿠버네티스 메트릭 서버는 클러스터의 리소스 사용량 데이터 집계기이며, Amazon EKS 클러스터에는 기본적으로 배포되지 않음
  • 메트릭 서버는 일반적으로 수평 파드 오토스케일러 또는 쿠버네티스 대시보드와 같은 다른 쿠버네티스 애드온에서 사용
  • Amazon EKS 클러스터에 Kubernetes 메트릭 서버를 배포
  • 워크샵을 위해 클러스터에 메트릭 서버가 미리 설정

  • HPA가 스케일링 동작을 구동하는 데 사용할 메트릭을 보려면, kubectl top 명령을 사용한다. 예를 들어, 이 명령은 클러스터에 있는 노드의 리소스 사용률을 표시

 

  • 파드의 리소스 활용도
  • HPA 스케일 포드를 확인하면서 이러한 쿼리를 계속 사용하여 무슨 일이 일어나고 있는지 파악

💠 HPA 구성

  • 현재 클러스터에 수평 파드 자동 확장을 지원하는 리소스가 없으며, 다음 명령어로 확인

  • ui 서비스를 사용하여 CPU 사용량에 따라 스케일링
  • CPU 요청 및 제한 값을 지정하도록 ui 파드 사양을 업데이트

  • 다음으로, HPA가 워크로드 확장 방법을 결정하는 데 사용할 매개 변수를 정의하는 HorizontalPodAutoscaler 리소스를 생성

 

  • 구성 적용

💠 로드 생성

  • 구성한 정책에 따라 HPA가 스케일 아웃되는 것을 관찰하려면 애플리케이션에 약간의 부하를 발생
  • 워크로드의 홈 페이지를 호출하여 이를 수행
  • 로드 생성기를 실행
    • 10명의 작업자가 동시에 실행 중
    • 각각 초당 5개의 쿼리 전송
    • 최대 60분 동안 실행

 

  • 애플리케이션에 요청이 들어왔으므로 HPA 리소스를 보고 진행 상황을 추적

  • Ctrl+C로 시계를 종료하고 다음과 같이 로드 생성기를 중지

Cluster Proportional Autoscaler


  • Workshop 실습 환경 준비

  • CPA(클러스터 비례 자동 스케일러)는 클러스터의 노드 수에 따라 복제본을 확장하는 수평적 포드 자동 스케일러
  • 비례 자동 스케일러 컨테이너는 클러스터의 스케줄링 가능한 노드와 코어 수를 감시하고 레플리카의 크기를 조정
  • 이 기능은 클러스터의 노드/포드 수에 따라 확장되는 CoreDNS 및 기타 서비스와 같이 클러스터의 크기에 따라 자동 확장되어야 하는 애플리케이션에 적합
  • CPA는 API 서버에 연결하고 클러스터의 노드 및 코어 수를 폴링하는 포드 내부에서 실행되는 Golang API 클라이언트를 가지고 있습니다.
  • 스케일링 매개변수와 데이터 포인트는 컨피그맵을 통해 오토스케일러에 제공되며, 오토스케일러는 원하는 최신 스케일링 매개변수로 최신 상태가 되도록 매 폴링 간격마다 매개변수 테이블을 새로 고칩니다.
  • 다른 오토스케일러와 달리 CPA는 메트릭 API에 의존하지 않으며 메트릭 서버가 필요하지 않습니다.
  • CPA의 주요 사용 사례는 다음과 같습니다:
    • 오버프로비저닝
    • 핵심 플랫폼 서비스 스케일 아웃
    • 메트릭 서버나 Prometheus 어댑터가 필요하지 않으므로 워크로드를 스케일아웃하는 간단하고 쉬운 메커니즘

💠 Cluster Proportional Autoscaler 에서 사용하는 스케일링 방법

  • Linear
    • 이 스케일링 방법은 클러스터에서 사용 가능한 노드 또는 코어 수에 정비례하여 애플리케이션을 스케일링
    • coresPerReplica 또는 nodesPerReplica 중 하나를 생략할 수 있습니다.
    • preventSinglePointFailure가 true 로 설정된 경우, 컨트롤러는 노드가 두 개 이상인 경우 최소 2개의 복제본을 보장
    • includeUnschedulableNodes 를 true로 설정하면 총 노드 수에 따라 레플리카의 크기가 조정, 그렇지 않으면 레플리카는 스케줄링 가능한 노드 수에 따라서만 스케일링됩니다(즉, 코딩된 노드와 드레인 노드는 제외됨).
    • 최소, 최대, preventSinglePointFailure, includeUnschedulableNodes 는 모두 선택 사항입니다. 설정하지 않으면 min은 기본값이 1로 설정되고, preventSinglePointFailure 는 기본값이 false 로 설정되며, includeUnschedulableNodes 는 기본값이 false 로 설정됩니다.
    • 코어당 복제본과 노드당 복제본은 모두 float 입니다.
  • ConfigMap for Linear

  • The Equation of Linear Control Mode

  • Ladder
    • 단계 함수를 사용하여 노드:레플리카 및/또는 코어:레플리카의 비율을 결정
    • 스텝 래더 함수는 컨피그맵에서 코어 및 노드 스케일링에 데이터 포인트를 사용
    • 더 많은 수의 레플리카를 산출하는 룩업이 목표 스케일링 숫자로 사용
    • 코어당 레플리카 또는 노드당 레플리카 중 하나를 생략할 수 있습니다.
    • 리플리카를 0으로 설정할 수 있습니다(리니어 모드와 달리).
    • 클러스터가 성장함에 따라 선택적 기능을 활성화하기 위해 복제본을 0으로 확장할 수 있습니다
  • ConfigMap for Linear

 

  • Horizontal Pod Autoscaler 와 비교
    • Horizontal Pod Autoscaler 는 최상위 쿠버네티스 API 리소스
    • HPA는 폐쇄형 피드백 루프 오토스케일러로, 파드의 CPU/메모리 사용률을 모니터링하고 자동으로 레플리카 수를 확장
    • HPA는 메트릭 API에 의존하고 메트릭 서버가 필요한 반면, Cluster Proportional Autoscaler 는 메트릭 서버나 메트릭 API를 사용하지 않습니다.
    • Cluster Proportional Autoscaler 는 Kubernetes 리소스로 확장되지 않고 대신 플래그를 사용하여 대상 워크로드를 식별하고 구성 확장을 위해 컨피그맵을 사용
    • CPA는 클러스터 크기를 감시하고 대상 컨트롤러를 스케일링하는 간단한 제어 루프를 제공
    • CPA의 입력은 클러스터의 스케줄 가능한 코어와 노드 수입니다.

💠 CPA 설치

  • 실습에서는 아래 배포 리소스의 주요 부분인 Kustomize 매니페스트를 사용하여 CPA를 설치

  • 클러스터에 적용

  • Deployment 가 kube-시스템 네임스페이스에 생성

  • CPA가 시작되면 자동으로 컨피그맵을 생성하고 이를 수정하여 구성을 조정할 수 있습니다:

💠 자동 확장 CoreDNS

  • 코어DNS는 파드에서 실행되는 쿠버네티스의 기본 DNS 서비스로, 레이블이 k8s-app=kube-dns
  • 이 실습에서는 클러스터의 스케줄링 가능한 노드와 코어 수에 따라 코어DNS를 자동 확장
  • 클러스터 비례 자동 스케일러는 코어DNS 레플리카의 크기를 조정

  • 현재 3노드 클러스터를 실행 중

  • 컨피그맵에 정의된 자동 스케일링 파라미터에 따라 클러스터 비례 자동 스케일러가 CoreDNS를 2개의 레플리카로 확장하는 것을 확인

  • EKS 클러스터의 크기를 5노드로 늘리면 Cluster Proportional Autoscaler 가 이를 수용하기 위해 CoreDNS의 복제본 수를 확장

  • 쿠버네티스는 5개의 노드 준비 상태로 표시

  • CoreDNS 파드의 수가 증가했음을 확인

  • CPA 로그를 살펴보면 클러스터의 노드 수 변경에 따라 어떻게 반응했는지 확인

Comments