[AWS] EKS Autoscaling - 5주차
이번 주차를 통해 기존 알고 있던 오토스케일에 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) : 스케일 업 수는 유지되고 리소스를 늘리는 방법
3. Cluster Autoscaling (CAS) : pending 인 pod가 있으면 워커노드를 늘려 running으로 변경하는 방법
- 3번의 기술로는 Karpenter 이라는 서비스로 사용하게 된다.
한번 더 설명하자면 아래 그림으로 쉽게 알아볼 수 있다.
워크로드 오토스케일
출처 : https://www.oreilly.com/library/view/production-kubernetes/9781492092292/ch01.html
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는 특정 이벤트를 기반으로 스케일 여부를 결정할 수 있습니다. > 더 빠르게 확장 가능
예제 카프카
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 의 서비스를 활용하여 클러스터를 늘려 오토스케일을 하는 방식으로 오토스케일 그룹의 수를 변경한다.
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