AWS EKS
AWS의 관리형 Kubernetes 서비스
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로 폴백되니까 가용성도 괜찮습니다."
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가 관리하는 노드에 배치하면 비용과 안정성을 모두 잡을 수 있습니다.