☁️ 클라우드

AWS EKS

AWS의 관리형 Kubernetes 서비스

📖 상세 설명

AWS EKS(Elastic Kubernetes Service)는 Amazon Web Services에서 제공하는 완전 관리형 Kubernetes 서비스입니다. Control Plane(API 서버, etcd, 스케줄러, Controller Manager)을 AWS가 운영하며 99.95% SLA를 보장합니다. 사용자는 Worker Node만 관리하면 되고, Control Plane 비용은 클러스터당 월 $0.10/시간(약 $72/월)입니다.

2018년 GA(정식 출시) 이후 가장 널리 사용되는 관리형 Kubernetes가 되었습니다. AWS의 다른 서비스들(ALB, RDS, S3, IAM 등)과 네이티브 통합되어 있어, AWS 생태계를 이미 사용 중인 기업에서 컨테이너 오케스트레이션을 도입할 때 가장 자연스러운 선택지입니다.

EKS는 VPC CNI 플러그인을 통해 Pod에 VPC 내 실제 IP를 할당합니다. 이를 통해 Pod가 VPC 내 다른 리소스(RDS, ElastiCache 등)와 직접 통신할 수 있고, Security Group을 Pod 레벨에서 적용할 수 있습니다. 또한 Fargate 프로파일을 설정하면 서버리스로 Pod를 실행할 수도 있습니다.

실무에서 EKS는 마이크로서비스 아키텍처, CI/CD 파이프라인, ML 워크로드 등 다양한 용도로 활용됩니다. eksctl CLI를 사용하면 10분 이내에 프로덕션 수준의 클러스터를 구축할 수 있고, AWS CDK나 Terraform으로 IaC 관리도 수월합니다.

💻 코드 예제

# eksctl로 EKS 클러스터 생성 (가장 간단한 방법)
eksctl create cluster \
  --name my-eks-cluster \
  --region ap-northeast-2 \
  --nodegroup-name standard-workers \
  --node-type t3.medium \
  --nodes 3 \
  --nodes-min 2 \
  --nodes-max 5 \
  --managed

# kubeconfig 자동 설정됨, 바로 사용 가능
kubectl get nodes

# Fargate 프로파일 추가 (서버리스 Pod 실행)
eksctl create fargateprofile \
  --cluster my-eks-cluster \
  --name fp-default \
  --namespace default

# OIDC Provider 생성 (IAM Roles for Service Accounts용)
eksctl utils associate-iam-oidc-provider \
  --cluster my-eks-cluster \
  --approve

# AWS Load Balancer Controller용 IAM 서비스 어카운트 생성
eksctl create iamserviceaccount \
  --cluster my-eks-cluster \
  --namespace kube-system \
  --name aws-load-balancer-controller \
  --attach-policy-arn arn:aws:iam::aws:policy/AmazonEKS_LB_Controller \
  --approve

🗣️ 실무에서 이렇게 말하세요

💬 아키텍처 회의에서
"EKS에서 IRSA(IAM Roles for Service Accounts)를 사용하면 Pod마다 최소 권한 IAM Role을 부여할 수 있어요. EC2 Instance Profile처럼 노드 전체에 권한을 주는 것보다 보안적으로 훨씬 안전합니다. S3 접근이 필요한 서비스만 해당 Role을 가지게 할 수 있거든요."
💬 면접에서
"EKS 운영 경험이 있습니다. eksctl로 클러스터를 구축하고, aws-load-balancer-controller로 ALB Ingress를 구성했어요. Karpenter를 도입해서 노드 오토스케일링을 최적화했는데, Cluster Autoscaler 대비 노드 프로비저닝 시간이 평균 90초에서 30초로 단축됐습니다."
💬 비용 최적화 논의에서
"Spot 인스턴스 노드 그룹을 추가하고 stateless 워크로드는 거기로 스케줄링하면 최대 70% 비용 절감이 가능해요. Karpenter 쓰면 Spot 중단 시 자동으로 On-Demand로 폴백되니까 가용성도 괜찮습니다."

⚠️ 흔한 실수 & 주의사항

VPC CNI IP 고갈 문제 무시

EKS의 VPC CNI는 Pod마다 VPC IP를 할당합니다. 서브넷 CIDR이 작으면 Pod 수가 늘어날 때 IP가 부족해집니다. /24 서브넷은 약 250개 IP만 제공하므로, 대규모 클러스터는 /20 이상의 서브넷이나 Secondary CIDR 사용을 계획하세요.

업그레이드 계획 없이 운영

EKS는 14개월 지원 정책으로 구버전을 강제 업그레이드합니다. 1.27에서 1.28로 업그레이드할 때 API 변경사항(예: deprecated API 제거)을 미리 확인하지 않으면 배포가 깨질 수 있습니다. Pluto 같은 도구로 deprecated API를 사전 점검하세요.

올바른 접근법

프로덕션에서는 Managed Node Group과 Karpenter를 조합해서 사용하세요. System Pod(CoreDNS, kube-proxy)는 Managed Node Group에, 일반 워크로드는 Karpenter가 관리하는 노드에 배치하면 비용과 안정성을 모두 잡을 수 있습니다.

🔗 관련 용어

📚 더 배우기