AWS EKS로 쿠버네티스 클러스터 만들기 실전편

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는 매우 강력한 도구입니다. 실무에서 자주 쓰는 자동화 및 보안 기능까지 함께 익히면 더욱 유용하게 활용할 수 있습니다.