클라우드/AWS

[AWS] EKS Autoscaling - 5주차

Cloud_Park 2023. 5. 23. 21:49

 

 이번 주차를 통해 기존 알고 있던 오토스케일에 in/out ( 인스턴스 수의 증가/감소)를 알고 있었는데  K8S에서도 동일하게 있지만 스케일 업이 있다는 것을 알게 되었고 가용성 측면에서 퍼블릭클라우드를 사용하면 이점 이 있을 것이라는 것을  학습하게 되었다.

실습환경도 편리하게 구축되어 있어 이전 블로그를 보지 않더라도 따라할 수 있으니 5주차는 꼭 실습 해보셨으면 좋겠습니다.

 

 

이론적인 내용은 리소스 /부하가 있으면 증량해준다는거라  동장 방식을 이해하고 늘어나는지 확인해보자

 

우선 실습 환경 구축 

2023.05.23 - [클라우드/AWS] - [AWS] EKS Autoscaling - 5주차 -실습환경 배포

 

Kubernetes autoscaling overview

 3가지 유형이 있다.

1. Horizontal Pod  Autoscaling(HPA) :  스케일 인/아웃으로 수를 늘리는 방법

2. Vertical Pod Autoscaling (VPA) : 스케일 업 수는 유지되고  리소스를 늘리는 방법

CON324_Optimizing-Amazon-EKS-for-performance-and-cost-on-AWS.pdf

3. Cluster Autoscaling (CAS) : pending 인 pod가 있으면 워커노드를 늘려  running으로 변경하는 방법

 

CON324_Optimizing-Amazon-EKS-for-performance-and-cost-on-AWS.pdf

- 3번의 기술로는 Karpenter 이라는 서비스로 사용하게 된다. 

https://github.com/kubernetes/autoscaler

 

한번 더 설명하자면 아래 그림으로 쉽게 알아볼 수 있다.

 

 

워크로드 오토스케일

출처 : https://www.oreilly.com/library/view/production-kubernetes/9781492092292/ch01.html

 

Production Kubernetes

Chapter 1. A Path to Production Over the years, the world has experienced wide adoption of Kubernetes within organizations. Its popularity has unquestionably been accelerated by the proliferation of containerized … - Selection from Production Kubernetes

www.oreilly.com

 

 

 

 

Kubernetes autoscaling overview 를  구체적으로 설명

HPA 아키텍처 : cAdvisor 이 컨테이너의 메모리/CPU 수집 → metrics-server 는 kubelet 를 통해서 수집 후 apiserver 에 등록 → HPA는 apiserver(Resource API)를 통해서 15분 마다 메모리/CPU 수집하여 정책에 따라 동작

K8S의 기본으로 제공하는 객체로 파드 수를 늘려 각 파드의 부하를 줄 일 수 있게 오토스케일한다.

실습은  맨 아래

 

 

KEDA AutoScaler 소개 (이벤트 기반 )

HPA와 차이점  :기존의 HPA(Horizontal Pod Autoscaler)는 리소스(CPU, Memory) 메트릭을 기반으로 스케일 여부를 결정하게 됩니다. 반면에 KEDA는 특정 이벤트를 기반으로 스케일 여부를 결정할 수 있습니다.  > 더 빠르게 확장 가능

https://keda.sh/docs/2.10/concepts/

예제  카프카

더보기
triggers:
- type: kafka
  metadata:
    bootstrapServers: kafka.svc:9092 # Comma separated list of Kafka brokers “hostname:port” to connect to for bootstrap.
    consumerGroup: my-group          # Name of the consumer group used for checking the offset on the topic and processing the related lag.
    topic: test-topic                # Name of the topic on which processing the offset lag. (Optional, see note below)
    lagThreshold: '5'                # Average target value to trigger scaling actions. (Default: 5, Optional)
    offsetResetPolicy: latest        # The offset reset policy for the consumer. (Values: latest, earliest, Default: latest, Optional)
    allowIdleConsumers: false        # When set to true, the number of replicas can exceed the number of partitions on a topic, allowing for idle consumers. (Default: false, Optional)
    scaleToZeroOnInvalidOffset: false 
    version: 1.0.0                   # Version of your Kafka brokers. See samara version (Default: 1.0.0, Optional)

실습 예제는  아래

 

 VPA : Vertical Pod Autoscaler(스케일 업)

파드에  resource.limit ,request 값을 수정하여  최적의 값을 찾는데 도움

제약 조건으론 hpa와 같이 사용 불가/ 파드 수정이 필요하여 파드가 재기동 된다.

관련자료 - 링크

흐름도 : 메트릭 서버가 용량 수집 > 파드 최적값을 계산 >파드 삭제 > 파드 생성 > 리소스 조정

흐름도에서 각각 recommander , updater , admission controller 가  수행하여 동작함 

 

실습은  맨 아래

 

 

CA - Cluster Autoscaler

AWS 의 서비스를 활용하여 클러스터를 늘려 오토스케일을 하는 방식으로  오토스케일 그룹의 수를 변경한다.

https://catalog.us-east-1.prod.workshops.aws/workshops/9c0aa9ab-90a9-44a6-abe1-8dff360ae428/ko-KR/100-scaling/200-cluster-scaling

Cluster Autoscale 동작을 하기 위한 cluster-autoscaler 파드(디플로이먼트)를 배치합니다.

**Cluster Autoscaler(CA)**는 pending 상태인 파드가 존재할 경우, 워커 노드스케일 아웃합니다.

특정 시간을 간격으로 사용률을 확인하여 스케일 인/아웃을 수행합니다. 그리고 AWS에서는 Auto Scaling Group(ASG)을 사용하여 Cluster Autoscaler를 적용합니다.

 

실습은  맨 아래

 

 

CPA - Cluster Proportional Autoscaler

노드 수 증가에 비례하여 성능 처리가 필요한 애플리케이션(컨테이너/파드)를 수평으로 자동 확장 -> Daemonset 과 비슷해보이지만 다름

예를 들어 노드가 추가될 때마다 coredns pod개수 증가시켜, coredns부하를 줄일  있습니다. CPA 사용하면 node개수가 2개일  coredns 1개를, node개수가 5개일 때 coredns를 3 등을 설정할 수있습니다.

 

실습은  맨 아래

 

 

Karpenter : K8S Native AutoScaler & Fargate

오픈소스 노드 수명 주기 관리 솔루션, 몇 초 만에 컴퓨팅 리소스 제공 > 장점 빠르게 증량이 가능하다.

참고- 링크

관련 영상보기 / 상세 설명

더보기

 

  • 작동 방식
    • 모니터링 → (스케줄링 안된 Pod 발견) → 스펙 평가 → 생성 ⇒ Provisioning
    • 모니터링 → (비어있는 노드 발견) → 제거 ⇒ Deprovisioning
  • Provisioner CRD : 시작 템플릿이 필요 없습니다! ← 시작 템플릿의 대부분의 설정 부분을 대신함
    • 필수 : 보안그룹, 서브넷
    • 리소스 찾는 방식 : 태그 기반 자동, 리소스 ID 직접 명시
    • 인스턴스 타입은 가드레일 방식으로 선언 가능! : 스팟(우선) vs 온디멘드, 다양한 인스턴스 type 가능
  • Pod에 적합한 인스턴스 중 가장 저렴한 인스턴스증설 됩니다
  • PV를 위해 단일 서브넷에 노드 그룹을 만들 필요가 없습니다 → 자동으로 PV가 존재하는 서브넷노드를 만듭니다
  • 사용 안하는 노드를 자동으로 정리, 일정 기간이 지나면 노드를 자동으로 만료 시킬 수 있음
    • ttlSecondsAfterEmpty : 노드에 데몬셋을 제외한 모든 Pod이 존재하지 않을 경우 해당 값 이후에 자동으로 정리됨
    • ttlSecondsUntilExpired : 설정한 기간이 지난 노드는 자동으로 cordon, drain 처리가 되어 노드를 정리함
      • 이때 노드가 주기적으로 정리되면 자연스럽게 기존에 여유가 있는 노드에 재배치 되기 때문에 좀 더 효율적으로 리소스 사용 가능 + 최신 AMI 사용 환경에 도움
    • 노드가 제때 drain 되지 않는다면 비효율적으로 운영 될 수 있습니다
  • 노드를 줄여도 다른 노드에 충분한 여유가 있다면 자동으로 정리해줌!
  • 큰 노드 하나가 작은 노드 여러개 보다 비용이 저렴하다면 자동으로 합쳐줌!
  • → 기존에 확장 속도가 느려서 보수적으로 운영 하던 부분을 해소
  • 오버 프로비저닝 필요 : 카펜터를 쓰더라도 EC2가 뜨고 데몬셋이 모두 설치되는데 최소 1~2분이 소요 → 깡통 증설용 Pod를 만들어서 여유 공간을 강제로 확보!
  • 오버 프로비저닝 Pod x KEDA : 대규모 증설이 예상 되는 경우 미리 준비

 

실습은  맨 아래

 

 


실습 리스트

2023.05.23 - [클라우드/AWS] - [AWS] EKS Autoscaling - 5주차 -HPA - Horizontal Pod Autoscaler 실습

2023.05.23 - [클라우드/AWS] - [AWS] EKS Autoscaling - 5주차 -Kubernetes based Event Driven Autoscaler 실습

2023.05.23 - [클라우드/AWS] - [AWS] EKS Autoscaling - 5주차 -Vertical Pod Autoscaler

2023.05.23 - [클라우드/AWS] - [AWS] EKS Autoscaling - 5주차 - Cluster Autoscaler

2023.05.23 - [클라우드/AWS] - [AWS] EKS Autoscaling - 5주차 - CPA - Cluster Proportional Autoscaler

---------------------

새로운 환경 구축이 필요한 실습  구축 내용과 실습이 모두 포함되어 있음

2023.05.23 - [클라우드/AWS] - [AWS] EKS Autoscaling - 5주차 - Karpenter : K8S Native AutoScaler & Fargate