5주차 - EKS Autoscaling - HPA/KEDA, VPA, CA, CPA, Karpenter

0. 도입

  • HPA 를 사용해 AutoScaling을 진행합니다.

  • Keda 를 이용해서 AutoScaling을 진행합니다.

  • VPC, CA, CPA 에 대한 내용을 확인하고 AutoScaling을 진행합니다.

  • Karpenter의 autoscaling에 대해 알아보고 autoscaling을 진행합니다.

  • 다시 한번 가르침을 주시는 @CloudNet 팀에 감사함을 표합니다!

1. 선수지식

  • grafana

  • prometheus

  • metrics server

2. 실습 환경 배포

  • 이번 환경은 vertical scaling 을 고려해 노드를 t3.medium로 설정되었다.

  • 이외에도

    • DNS 설정

    • LB 설정

    • GP3 스토리지 클래스 생성

    • eksctl 설치 및 addon들의 정책을 설정

    • Grafana

    • Prometheus 설치

    • Node Viewer 설치

  • Node Viewer 설치 확인

  • grafana도 설치 확인

3. HPA - Horizontal Pod Autoscaler

A. [이론] Horizontal Pod AutoScaling이란?

CON324_Optimizing-Amazon-EKS-for-performance-and-cost-on-AWS.pdf 발췌
  • Stateless 한 애플리케이션에 주로 사용됨

  • CPU나 메모리 사용률 같은 메트릭을 감시하다가 일정 비율이 넘어가면 Scale in or out을 하게 됩니다.

B. [실습] kube-ops-view 와 그라파나(17125)에서 모니터링 하면서 load 늘리기

목적: 로드가 늘면 pod가 생성되는것을 확인

실험 설정:

  • kube-ops-view

  • grafana 에서 확인

  • php docker 애플리케이션으로 부하 생성

실험 결과:

  • scaling max 까지 되는것을 확인

  • HPA 정책 이 MAX값이 10으로 되어있었고

  • 사이즈가 점점 늘어나는것을 확인 가능

4. KEDA - Kubernetes Based Event Driven Autoscaler

A. [이론] KEDA AutoScaler

  • 인프라 컴포넌트들(kafka, queue) 에서 생기는 지표를 가지고 event를 생성해서 자동 스케일링을 하게 됩니다.

B. [실습] KEDA with Helm : 특정 이벤트(cron 등) 기반의 파드 오토 스케일링

목적: 이벤트 기반으로 해당 파드가 오토 스케일링 되는지 확인

실험 설정:

  • keda 설치

  • grafana 에서 확인

  • ScaledObject 정책 생성: 크론으로 이벤트 생성

크론

실험 결과:

  • 45분까지 대기하고 grafana에서 해당 값 올라오는 것을 확인

5. VPA - Vertical Pod Autoscaler

A. [이론] VPA

CON324_Optimizing-Amazon-EKS-for-performance-and-cost-on-AWS.pdf 발췌
  • 최근 사용량을 기준으로 여유값을 추가해서 pod의 최적값을 계산합니다.

  • Scale up/down을 하게됩니다.

  • pod resources.request 값을 수정합니다.

  • Stateful 한 애플리케이션에 주로 사용됩니다.

  • HPA와 같이 사용되지 않음

B. [실습]

목적: VPA 로 신규 파드 Autoscaling 확인

실험 설정:

  • VPA 웹훅배포 확인

  • VPA 배포

실험 결과:

  • REQUEST 값이 변경되기전 확인

  • Request 값이 변경되기 이후 확인

  • grafana 값은 수집이 늦어져서 진행하지 못했다.

6. CA - Cluster Autoscaler

A. Cluster AutoScaler

  • Deployment 배치

  • CA 가 pending 상태인 파드 있을 시에 워커 노드를 스케일 아웃

  • 사용률을 이용한 스케줄 스케일 인/아웃

  • AWS ASG 사용해서 Autoscaling

문제점:

  • ASG에만 의존

  • EKS 노드 삭제 시 인스턴스 삭제 안됨

  • 스케일링 속도 낮음

  • Request 와 Limit에 맞춰서 스케일 아웃 인이 되지 않는다.

B. [실습] Scale cluster with cluster autoscaler

목적: cluster autoscaler로 클러스터 스케일링 확인

실험 설정:

  • 현재 ASG 정보 확인 및 값 MAX 값6으로 변경

  • CA 설정

  • Nginx 배포 및 스케일

CA 설정 확인

실험 결과:

  • nginx replicas 15 설정

  • scaling 되는 부분 확인

노드 개수는 줄어들지 않는것을 확인 시간이 더 필요해보인다.

7. CPA - Cluster Proportional Autoscaler

A. Cluster Proportional AutoScaler

  • 노드수에 따른 파드갯수 추가 배포 (비례 배포)

B. [실습] Proportional AutoScaler 확인하기

목적: 설정값대로 node 값에 비례해 pod 배포되는지 확인

실험 설정:

  • CPA 규칙 설정

실험 결과:

  • 노드 5개 증가시에 파드 갯수 증가 5개로확인

8. Karpenter - K8S Native AutoScaler

A. Karpenter

  • ASG를 거치거나 Cluster Autoscaler를 거치지 않고 바로 EC2를 생성해주는 AWS 솔루션이다.

  • 23년 10월에 베타가 완료됨

  • 빠르다!

B. [실습] Karpenter 이용해서 scale 설정하기

목적: CSI 드라이버를 설치하고 실제 스토리지 클래스를 생성하는것을 확인

중요한점:

  • NodePool yaml의 일부분이다.

  • 관리 리소스는 securityGroupSelector and subnetSelector로 찾음을 알아둬야한다.

실험 설정:

  • karpenter 설치

  • NodePool 설정 완료

  • 그라파나 설치

실험 결과:

  • 해당 replica의 증가에 따라 pod 증가 확인 node 증가확인

  • 해당 replica 감소에 따라 pod 감소 확인

  • 흠.. role 설정이 잘못되어있는것으로 보인다.\

  • 확인 결과 karpenter 관련 add on 의 설정이 완료되지 않았었다.

  • 예상되는 결과는 노드가 줄어드는것이다.

Last updated