SK플래닛 ai활용 데이터엔지니어 과정 2기/쿠버네티스

쿠버네티스 - 7

dev-lee 2026. 3. 25. 21:08

Karpenter (카펜터) 요약

1. 카펜터란?

개요

  • AWS 개발 오픈소스 기반 쿠버네티스 노드 오토스케일러
  • 기존 Cluster Autoscaler(CA)의 한계를 극복한 차세대 오토스케일러

핵심 특징

  • Group-less: ASG 없이 EC2 API 직접 호출로 즉시 프로비저닝
  • 포드 중심 지능형 선택: CPU, 메모리, GPU 등 요구사항 분석 후 최적 인스턴스 결정
  • 빠른 속도: 노드 준비까지 수 초 이내
  • 비용 최적화(Consolidation): 포드 재배치 및 불필요 노드 즉시 반납

작동 원리

  1. Pending Pod 감시
  2. 최적 인스턴스 계산 및 결정
  3. EC2 인스턴스 즉시 생성 및 클러스터 조인
  4. 불필요 노드 자동 삭제

CA vs Karpenter 비교

비교 항목Cluster AutoscalerKarpenter
관리 단위 노드 그룹(ASG) 기반 개별 인스턴스 직접 관리
유연성 정해진 사양 내에서만 확장 모든 EC2 타입 중 자유 선택
속도 상대적으로 느림 매우 빠름 (Direct API 호출)
비용 절감 소극적 (노드가 비어야 삭제) 공격적 (포드 재배치 통합)

2. 카펜터 설정법

1단계: 환경 변수 설정

 
 
bash
export CLUSTER_NAME="free-vpc-cluster"
export AWS_REGION="ap-northeast-2"
export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
export CLUSTER_ENDPOINT=$(aws eks describe-cluster --name ${CLUSTER_NAME} --query "cluster.endpoint" --output text)

2단계: IAM 역할 및 인스턴스 프로파일 생성

  • 컨트롤러용 IAM 역할에 EC2 관련 권한 직접 주입
  • 노드용 IAM 역할 생성 후 필수 정책 연결
    • AmazonEKSWorkerNodePolicy
    • AmazonEKS_CNI_Policy
    • AmazonEC2ContainerRegistryReadOnly
    • AmazonSSMManagedInstanceCore
  • 인스턴스 프로파일 생성 및 역할 연결

3단계: AWS 리소스 태깅 (Discovery용)

 
 
bash
# 서브넷 및 보안 그룹에 karpenter.sh/discovery 태그 부착
aws ec2 create-tags --resources $SUBNET_IDS --tags Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}
aws ec2 create-tags --resources $SG_IDS --tags Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}

4단계: Helm으로 Karpenter 설치 (v1.0.6)

 
 
bash
helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter \
  --version 1.0.6 \
  --namespace karpenter --create-namespace \
  --set settings.clusterName=${CLUSTER_NAME} \
  --set settings.clusterEndpoint=${CLUSTER_ENDPOINT} \
  --set settings.interruptionQueueName=${CLUSTER_NAME} \
  --wait

5단계: NodePool & EC2NodeClass 배포

  • 인스턴스 타입: t3.micro, t2.micro (프리티어 최적화)
  • 용량 타입: on-demand
  • Consolidation 정책: WhenEmpty, 30초 후 통합
  • AMI: AL2023 (al2023@latest)

6단계: EKS 노드 인증(Access Entry) 등록

 
 
bash
eksctl create iamidentitymapping \
  --cluster ${CLUSTER_NAME} \
  --region ${AWS_REGION} \
  --arn arn:aws:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME} \
  --group system:bootstrappers \
  --group system:nodes \
  --username system:node:{{EC2PrivateDNSName}}

7단계: 테스트

 
 
bash
kubectl create deployment karpenter-test --image=registry.k8s.io/pause:3.9
kubectl scale deployment karpenter-test --replicas=5
kubectl get nodes -w

3. 삭제

 
 
bash
# Helm 삭제
helm uninstall karpenter -n karpenter

# 관련 리소스 삭제
kubectl patch ec2nodeclass default --type merge -p '{"metadata":{"finalizers":null}}'
kubectl delete nodepool default --ignore-not-found
kubectl delete ec2nodeclass default --ignore-not-found
kubectl delete namespace karpenter

# 테스트 부하 삭제
kubectl delete deployment karpenter-test

'SK플래닛 ai활용 데이터엔지니어 과정 2기 > 쿠버네티스' 카테고리의 다른 글

쿠버네티스 - 6  (0) 2026.03.25
쿠버네티스 - 5  (0) 2026.03.25
쿠버네티스 - 4  (0) 2026.03.25
쿠버네티스 - 3  (0) 2026.03.25
쿠버네티스 - 2  (0) 2026.03.23