1. EKS 노드 오토 스케일링
: EKS 노드 오토 스케일링은 쿠버네티스 클러스터의 워크로드 변화에 따라 워커 노드(EC2 인스턴스)의 수를 자동으로 확장하거나 축소하는 기능입니다.
앞서 정리한 파드 오토 스케일링과 함께 사용하여 클러스터의 리소스를 효율적으로 관리할 수 있습니다.
이번 포스팅에는 CA(Cluster Autoscaler)와 Karpenter에 대해 알아 봅니다.
2. CA (Cluster Autoscaler)
: CA(Cluster Autoscaler)는 쿠버네티스 네이티브 도구로 클러스터에 실행되는 파드 스케쥴링의 요구 사항을 기반으로 노드를 자동으로 추가하거나 삭제하는 동작을 수행합니다.
CA는 AWS의 Auto Scaling Group(ASG)과 통합되어 작동하고 의존적으로 동작합니다.
CA 아키텍처
[Caption] CA 아키텍처
CA 주요 기능
1.
노드 확장(Scale-Out)
•
스케쥴링되지 못한 대기 상태의 파드를 감지하고 대상 파드를 수용할 수 있는 노드를 추가
•
노드를 추가하는 작업은 AWS ASG를 통해 EC2 인스턴스를 프로비저닝
•
신규 노드에 대기 상태의 파드를 스케쥴링하여 배포
2.
노드 축소(Scale-In)
•
특정 노드에 실행 중인 파드가 없거나 다른 노드로 이동 가능한 경우 해당 노드를 종료
3.
다중 ASG 지원
•
여러 Auto Scaling Group을 관리하며 가장 적합한 ASG를 선택하여 동작
4.
리소스 기반 스케일링
•
CPU, 메모리 요청량 등을 기반으로 스케일링 결정
CA 단점
•
ASG에 종속적으로 동작하여 유연성이 제한됩니다.
•
쿠버네티스 환경과 ASG는 관리 주체가 달라 동기화 문제가 발생할 수 있습니다.
•
ASG에 의해 EC2 인스턴스를 프로비저닝하여 스케일링 속도가 매우 느립니다.
전반적으로 ASG에 의존적인 문제와 느린 프로비저닝 동작에 따라 사용을 권장하지 않습니다.
3. Karpenter
: Karpenter는 쿠버네티스 클러스터에 노드 수명 주기 관리를 제공하는 오픈 소스 프로젝트입니다. 이를 통해 클러스터 내에 워커 노드를 동적으로 프로비저닝하고 관리하는 고성능 노드 오토 스케일링 기능을 제공합니다.
Karpenter는 CA와 다르게 ASG에 의존하지 않고 직접 EC2 인스턴스를 프로비저닝하고 관리하여 더 빠르고 유연한 스케일링을 제공합니다.
Karpenter 아키텍처
[Caption] Karpenter 아키텍처
Karpenter 주요 기능
1.
노드 확장(Scale-Out)
•
스케쥴링되지 못한 대기 상태의 파드를 감지하고 대상 파드를 수용할 수 있는 EC2 인스턴스를 직접 생성
•
특정 인스턴스 유형이나 Capacity(Spot/On-demand)를 혼합하여 사용 가능
2.
노드 축소(Scale-In)
•
리소스를 더 이상 사용하지 않을 경우 노드를 종료하여 비용 절감
•
노드 축소 시에도 파드가 안전하게 종료되도록 고려
3.
유연한 스케일링
•
ASG에 종속되지 않고 동작하여 다양한 인스턴스 유형과 Capacity를 자동으로 선택
•
스팟 인스턴스를 우선적으로 선택하여 비용 최적화 가능
4.
빠른 스케일링 속도
•
파드를 즉각 감지하고 필요한 리소스를 빠르게 프로비저닝
Karpenter 장점
•
ASG 의존성을 제거하여 스케일링에 대해 유연성과 속도 향상
•
파드 요구사항에 따라 가장 적합한 스펙의 인스턴스를 증설하는 동작(Just-In-Time)
•
다양한 인스턴스 유형을 혼용하여 비용 효율성 극대화
•
현재 환경에 따라 노드 롤링, 노드 자동 정리
4. 결론
EKS에서 노드 오토스케일링은 클러스터 리소스를 효율적으로 관리하고 비용을 최적화하는 데 중요한 역할을 합니다.
•
더 빠르고 유연한 스케일링이 필요에 따라 Karpenter를 구성하는 것을 권장합니다.
구분 | Cluster Autoscaler (CA) | Karpenter |
작동 방식 | ASG 기반 | 직접 EC2 인스턴스 프로비저닝 |
유연성 | 제한적 | 높은 유연성 |
스케일링 속도 | 느림 | 빠름 |
구성 복잡도 | 간단 | 다소 복잡 |
비용 최적화 | 제한적 | 높은 비용 최적화 가능 |