AWS EKS로 쿠버네티스 클러스터 만들기 실전편
쿠버네티스(Kubernetes)는 컨테이너 오케스트레이션의 사실상 표준이며, AWS에서는 이를 손쉽게 운영할 수 있도록 EKS(Amazon Elastic Kubernetes Service)를 제공합니다. EKS는 AWS에서 제공하는 완전관리형 Kubernetes 서비스로, 제어 플레인(Control Plane)을 자동으로 구성하고 유지관리하며, 보안과 가용성을 AWS 수준으로 보장합니다. 이번 포스팅에서는 실무에서 바로 활용할 수 있도록 AWS EKS로 쿠버네티스 클러스터 만들기 실전편을 단계별로 소개합니다.
✅ EKS의 기본 구조 이해
EKS는 크게 두 가지 요소로 구성됩니다:
- Control Plane (제어 플레인)
- AWS가 관리 (Kubernetes API 서버, etcd 등)
- 고가용성, 자동 패치, 모니터링 포함
- Worker Nodes (작업 노드)
- EC2 인스턴스 또는 Fargate 기반
- 실제 컨테이너가 실행되는 곳
✅ 준비 사항
- AWS 계정 및 관리자 권한
- AWS CLI 설치 및 인증 완료
kubectl
,eksctl
설치- VPC, 서브넷 구성 (eksctl이 자동 생성 가능)
✅ 1단계: eksctl
로 클러스터 생성하기 (가장 쉬운 방법)
**eksctl
**은 EKS 클러스터를 코드 한 줄로 생성할 수 있는 CLI 도구입니다.
eksctl create cluster \
--name my-eks-cluster \
--region ap-northeast-2 \
--nodegroup-name standard-workers \
--node-type t3.medium \
--nodes 2 \
--nodes-min 2 \
--nodes-max 4 \
--managed
--managed
: AWS 관리형 노드 그룹 사용- 실행 시간: 약 15분
- 자동으로 VPC, IAM 역할, 노드 그룹까지 구성
성공 시 출력: kubectl
을 통해 클러스터와 연결된 상태가 됨
✅ 2단계: kubectl
로 클러스터 확인
kubectl get nodes
kubectl get all --all-namespaces
- 노드 정보가 출력되면 클러스터가 정상적으로 구성된 것
kube-system
네임스페이스에 AWS 관련 파드(CoreDNS, VPC CNI 등) 확인 가능
✅ 3단계: IAM OIDC 및 서비스 계정 연결 (IRSA 설정)
EKS에서 Pod에 IAM 권한을 부여하려면, OIDC 공급자 설정 + IAM 역할과 서비스계정 연결이 필요합니다.
1. OIDC 공급자 연결
eksctl utils associate-iam-oidc-provider \
--region ap-northeast-2 \
--cluster my-eks-cluster \
--approve
2. IAM 역할 생성 + 정책 연결
eksctl create iamserviceaccount \
--name s3-reader \
--namespace default \
--cluster my-eks-cluster \
--attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \
--approve \
--override-existing-serviceaccounts
- 이제
s3-reader
서비스계정을 사용하는 Pod는 S3에 접근 가능
✅ 4단계: 애플리케이션 배포 (nginx 예제)
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --type=LoadBalancer --port=80
kubectl get svc
EXTERNAL-IP
항목에 퍼블릭 주소 확인 가능- 웹 브라우저에서 IP 접속 시 nginx 페이지 출력
✅ 5단계: Helm으로 애플리케이션 설치
Helm은 Kubernetes의 패키지 관리자 역할을 합니다.
Helm 설치 후 repo 추가
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
WordPress 설치 예시
helm install my-blog bitnami/wordpress
kubectl get svc
my-blog
서비스의 EXTERNAL-IP 확인 → 브라우저 접속
✅ 6단계: 클러스터 삭제
eksctl delete cluster --name my-eks-cluster --region ap-northeast-2
- 관련 자원(VPC, 노드, IAM 등) 모두 자동 삭제
✅ Q&A
Q. EC2 대신 Fargate로 노드 없이 배포도 가능한가요?
네, 가능합니다. EKS는 Fargate 프로필을 설정하면 Pod 단위로만 배포할 수 있습니다. 이 경우 노드를 직접 관리할 필요 없이 서버리스 방식으로 사용량에 따라 과금됩니다.
eksctl create fargateprofile \
--cluster my-eks-cluster \
--name fp-default \
--namespace default
Q. 왜 EC2 대신 EKS를 사용하나요?
- 쿠버네티스 클러스터 설치 및 운영 자동화
- 자동 스케일링, 롤링 업데이트, 노드 교체 용이
- IAM, VPC, CloudWatch 등 AWS 생태계 통합 가능
- 보안 관리(컨트롤 플레인 암호화, 인증서, OIDC 등) 강화
Q. 비용은 어떻게 계산되나요?
- 제어 플레인: EKS 클러스터당 $0.10/시간 과금
- 노드 EC2 인스턴스: 인스턴스 사용 시간 기준 별도 과금
- Fargate 사용 시 CPU/메모리 단위로 과금
비용 절감을 위한 팁:
- 예약 인스턴스 또는 Savings Plan 활용
- Auto Scaling으로 유휴 인스턴스 최소화
- 클러스터 수명 주기 관리
✅ 요약 정리
항목 | 내용 |
---|---|
서비스 | AWS EKS (Elastic Kubernetes Service) |
클러스터 구성 | eksctl 또는 AWS 콘솔 |
워커 노드 | EC2 또는 Fargate 선택 |
권한 제어 | IAM + OIDC (IRSA 방식) |
애플리케이션 배포 | kubectl, Helm 활용 |
삭제 | eksctl delete cluster 명령 |
결론
AWS EKS로 쿠버네티스 클러스터 만들기 실전편을 통해 인프라를 코드로 구성하고, 컨테이너 기반 서비스 배포까지 한 번에 진행할 수 있습니다. 복잡한 운영 부담을 줄이고, 클라우드 네이티브 아키텍처로 전환하고자 한다면 EKS는 매우 강력한 도구입니다. 실무에서 자주 쓰는 자동화 및 보안 기능까지 함께 익히면 더욱 유용하게 활용할 수 있습니다.