Karpenter로 EKS 클러스터 자동 확장 쉽게 시작하기

Kubernetes 확장의 어려움과 기존 방식의 한계
Kubernetes를 운영하면서 트래픽이 증가하면 자동으로 노드를 늘려야 하는데, 기존 Cluster Autoscaler 방식은 미리 정해둔 노드 그룹이 필요하고, 설정이 복잡하며 확장 속도가 느립니다(수 분 소요). 특히 다양한 EC2 인스턴스 유형이 필요할 때마다 직접 노드 그룹을 만들어야 해서 관리가 번거롭고 자원 활용도가 떨어집니다.
Karpenter란 무엇인가?
Karpenter는 AWS가 개발하고 CNCF에 기증한 오픈소스 자동 노드 프로비저닝 컨트롤러입니다. 기존 방식과 다르게, Karpenter는 Kubernetes에서 필요할 때 EC2 인스턴스를 직접 생성해주어, 노드 그룹 없이도 다양한 인스턴스 유형을 자동 선택하고 빠르게 노드를 늘릴 수 있습니다. 비용 최적화, 다양한 워크로드 지원, Kubernetes와 깊은 통합 등이 특징입니다.
Karpenter의 주요 동작 방식
Karpenter는 파드가 부족한 리소스 때문에 Pending 상태일 때 바로 EC2 API를 이용해 필요한 인스턴스를 생성합니다. 파드의 요구 사항에 맞는 CPU 아키텍처, 인스턴스 유형, 온디맨드/스팟 등 조건을 적용할 수 있습니다. 기존 방식에 비해 확장 속도와 유연성이 높고, 관리 오버헤드가 크게 줄어듭니다.
NodePool과 EC2NodeClass로 워크로드 맞춤 구성하기
Karpenter에는 두 가지 리소스를 활용합니다.
NodePool: 어떤 노드를 생성(예: 인스턴스 유형, CPU 아키텍처, 온디맨드/스팟 등)할지 정책을 정의합니다.
EC2NodeClass: AWS에서 노드에 필요한 세부 설정(AMI, 서브넷, 보안 그룹 등)을 지정합니다.
이를 활용해 다양한 워크로드에 맞춰 NodePool을 분리운영하면, 예를 들어 데이터 처리에는 스팟 인스턴스, 중요한 서비스에는 온디맨드 인스턴스를 쓸 수 있습니다.
Kubernetes 스케줄링과의 통합 활용법
Karpenter는 Kubernetes의 nodeSelector, nodeAffinity, taints/tolerations 등 스케줄링 정책을 그대로 지원합니다. 예를 들어 x86 아키텍처가 필요한 경우 nodeSelector로 지정하면 해당 조건의 노드가 없으면 Karpenter가 자동으로 프로비저닝합니다. 복잡한 스케줄 정책도 쉽게 구현 가능하며 관리가 단순해집니다.
인프라 코드로 빠르고 일관되게 설치하기
Terraform이나 Helm을 사용해 Karpenter를 설치하면 몇 줄의 코드만으로 필요한 IAM 역할과 설정을 자동화할 수 있습니다.
module karpenter {
source = terraform-aws-modules/eks/aws//modules/karpenter
version = ~> 20.34.0
cluster_name = module.eks.cluster_name
...
}
수동 설치도 Helm으로 간단히 가능합니다.
helm repo add karpenter https://charts.karpenter.sh
helm repo update
helm upgrade --install karpenter karpenter/karpenter --namespace karpenter --set ...
확장 속도 및 비용 최적화 이점
Karpenter 적용 후, 노드 생성 시간은 기존 방식(3-5분)에서 약 30-60초로 단축됩니다. 리소스 활용율도 30~40% 증가, 비용은 25~40%까지 줄었습니다. 이유는 Karpenter가 자동으로 인스턴스 유형을 선택하고, 필요 없는 노드는 자동 종료(컨솔리데이션)해 클러스터를 최적화하기 때문입니다.
다양한 사례와 실전 활용 팁
트래픽 변화가 뚜렷한 서비스: HPA(수평 파드 자동증설)와 연동해, 트래픽에 따라 노드가 자동으로 늘고 줄어듦
배치 처리: 야간 대규모 작업에도 스팟 인스턴스 활용으로 비용 절감
Cost optimization: 여러 인스턴스 유형을 NodePool에 등록해 스팟 가용성을 높이고, 파드 자원 요청을 정확히 설정해 과다할당 방지
운영에 필요한 모니터링 및 문제 해결
모니터링: Prometheus, Grafana 등으로 Karpenter 노드 생성/종료, 파드 대기 수, 스케줄링 시간 등 핵심 지표 추적
문제 처리: 파드 Pending 시 NodePool 조건/EC2NodeClass 설정/서비스 쿼터 등을 점검, 노드가 안 줄어들면 컨솔리데이션 정책과 PodDisruptionBudget 확인
정리 및 시작 가이드
Karpenter는 EKS에서 노드 확장/축소를 훨씬 빠르고 효율적으로 만들어주며, 비용 절감과 운영 편의성을 동시에 제공합니다. 실 서비스, 배치 작업, 머신러닝 등 다양한 상황에서 써볼 수 있으며, 공식 문서와 예제 저장소(https://github.com/altinukshini/eks-karpenter-example)를 참고해 바로 시작해보세요.
출처 : Mastering EKS scaling with Karpenter: A practical guide | by Altin Ukshini | Diatom Labs