Skip to content

EKS 클러스터 생성 실습 가이드

난이도: 중급 예상 소요 시간: 60분 마지막 업데이트: 2026년 2월 11일

학습 목표

  • eksctl을 사용하여 EKS 클러스터를 생성합니다
  • kubectl로 클러스터에 접근하고 상태를 확인합니다
  • 샘플 애플리케이션을 배포합니다
  • 클러스터를 안전하게 삭제합니다

사전 요구 사항

  • [ ] AWS 계정 및 AWS CLI 설정 (aws sts get-caller-identity로 확인)
  • [ ] eksctl 설치 (eksctl version으로 확인)
  • [ ] kubectl 설치
  • [ ] EKS 클러스터 생성 학습 완료

비용 주의: EKS 클러스터 운영에는 AWS 비용이 발생합니다. 실습 후 반드시 클러스터를 삭제하세요.


실습 1: eksctl 설정 확인

단계

Step 1.1: 도구 버전 확인

bash
aws --version
eksctl version
kubectl version --client

Step 1.2: AWS 자격 증명 확인

bash
aws sts get-caller-identity

예상 결과:

json
{
    "UserId": "AIDACKCEVSQ6C2EXAMPLE",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/your-user"
}

Step 1.3: 기본 리전 설정

bash
export AWS_DEFAULT_REGION=ap-northeast-2
echo "Region: $AWS_DEFAULT_REGION"
힌트가 필요하신가요?
  • aws configure list로 현재 설정을 확인할 수 있습니다
  • eksctl은 내부적으로 CloudFormation을 사용합니다
  • IAM 사용자에게 EKS, EC2, CloudFormation, IAM 권한이 필요합니다

실습 2: EKS 클러스터 생성

단계

Step 2.1: 클러스터 구성 파일 작성

bash
cat > /tmp/eks-cluster.yaml << 'EOF'
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: lab-cluster
  region: ap-northeast-2
  version: "1.31"
managedNodeGroups:
  - name: workers
    instanceType: t3.medium
    desiredCapacity: 2
    minSize: 1
    maxSize: 3
    volumeSize: 20
EOF

Step 2.2: 클러스터 생성

bash
eksctl create cluster -f /tmp/eks-cluster.yaml

클러스터 생성에는 15-20분이 소요됩니다.

Step 2.3: kubeconfig 확인

bash
kubectl config current-context
kubectl cluster-info

검증

bash
kubectl get nodes
# 2개의 Ready 노드가 표시되어야 합니다

실습 3: 클러스터 탐색

단계

Step 3.1: 노드 정보 확인

bash
kubectl get nodes -o wide
kubectl describe node $(kubectl get nodes -o jsonpath='{.items[0].metadata.name}')

Step 3.2: 시스템 컴포넌트 확인

bash
kubectl get pods -n kube-system
kubectl get svc -n kube-system

Step 3.3: 리소스 사용량 확인

bash
kubectl top nodes 2>/dev/null || echo "Metrics Server가 설치되지 않았습니다"

실습 4: 샘플 앱 배포

단계

Step 4.1: Nginx 배포

bash
kubectl create deployment nginx --image=nginx:1.25 --replicas=2
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl wait --for=condition=available deployment/nginx --timeout=120s

Step 4.2: 접근 확인

bash
# LoadBalancer External IP 확인 (ELB 생성에 몇 분 소요)
kubectl get svc nginx -w
# EXTERNAL-IP가 할당되면 Ctrl+C

# 접근 테스트
ELB_URL=$(kubectl get svc nginx -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
echo "ELB URL: $ELB_URL"
curl -s "$ELB_URL" | head -5

Step 4.3: 스케일링 테스트

bash
kubectl scale deployment nginx --replicas=4
kubectl get pods -l app=nginx -o wide
힌트가 필요하신가요?
  • ELB URL이 DNS에 전파되기까지 몇 분이 걸릴 수 있습니다
  • kubectl get svc -w로 EXTERNAL-IP 할당을 실시간 모니터링합니다
  • AWS 콘솔의 EC2 > Load Balancers에서도 확인 가능합니다

검증

bash
kubectl get deployment nginx -o jsonpath='{.status.readyReplicas}'
# 출력: 4

정리

중요: 비용 발생을 방지하려면 반드시 클러스터를 삭제하세요.

bash
# 1. 애플리케이션 정리 (LoadBalancer가 ELB를 삭제하도록)
kubectl delete svc nginx
kubectl delete deployment nginx

# 2. ELB 삭제 대기 (약 1분)
sleep 60

# 3. 클러스터 삭제
eksctl delete cluster -f /tmp/eks-cluster.yaml --wait

# 4. 설정 파일 정리
rm -f /tmp/eks-cluster.yaml

문제 해결

클러스터 생성이 실패합니다
  • IAM 권한을 확인하세요 (AdministratorAccess 또는 EKS 관련 정책 필요)
  • VPC/서브넷 제한을 확인하세요 (리전별 기본 VPC 개수 제한)
  • eksctl utils describe-stacks --region=ap-northeast-2 --cluster=lab-cluster로 상세 확인
kubectl이 클러스터에 연결되지 않습니다

kubeconfig를 수동으로 업데이트하세요:

bash
aws eks update-kubeconfig --name lab-cluster --region ap-northeast-2

다음 단계