Amazon EKS를 사용한 Kubernetes에 2048 게임 배포 — 엔드투엔드 DevOps 프로젝트

발행: (2026년 3월 7일 PM 01:30 GMT+9)
10 분 소요
원문: Dev.to

Source: Dev.to

프로젝트 목표

  • 애플리케이션을 컨테이너화하기
  • 쿠버네티스 클러스터에 배포하기
  • 인터넷에 노출하기
  • 실제 클라우드 환경에서 쿠버네티스 워크로드가 어떻게 실행되는지 이해하기

GitHub 저장소:
👉

프로젝트 아키텍처 개요

워크플로는 전형적인 Kubernetes 배포 수명 주기를 따릅니다:

  1. Containerize the application with Docker → Docker 로 애플리케이션을 컨테이너화
  2. Create an Amazon EKS cluster → Amazon EKS 클러스터 생성
  3. Configure IAM roles and worker nodes → IAM 역할 및 워커 노드 구성
  4. Deploy the application using Kubernetes manifests → Kubernetes 매니페스트를 사용해 애플리케이션 배포
  5. Expose the application with a LoadBalancer service → LoadBalancer 서비스로 애플리케이션 노출
  6. Access the application from the Internet → 인터넷에서 애플리케이션 접근

전제 조건

다음 도구들을 설치하고 구성하십시오:

ToolPurpose
kubectlKubernetes 클러스터와 상호 작용하기 위한 CLI(앱 배포, 리소스 검사, 클러스터 관리).
eksctlAmazon EKS 클러스터의 생성 및 관리를 간소화(많은 AWS 리소스를 자동화).
AWS CLIAWS 서비스와 직접 상호 작용할 수 있게 해 주며, EKS 인증 및 kubeconfig 파일 업데이트에 사용됩니다.

이 도구들을 준비하면 Kubernetes 환경을 구축할 수 있습니다.

단계 1 – Amazon EKS 클러스터 생성

EKS 클러스터는 두 가지 주요 구성 요소로 이루어져 있습니다:

  • Control Plane – AWS에서 관리
  • Worker Nodes – 파드가 실행되는 EC2 인스턴스

클러스터를 생성할 때 다음을 구성합니다:

  • 기본 VPC
  • 2–3개의 서브넷
  • 보안 그룹
  • 퍼블릭 클러스터 엔드포인트 액세스

클러스터 생성은 일반적으로 10–12 분 정도 소요됩니다. 상태가 Active가 되면 다음 단계로 진행하십시오.

단계 2 – IAM 역할 생성

AWS 서비스는 IAM 역할 및 권한에 크게 의존합니다. 두 가지 역할이 필요합니다:

1. EKS 클러스터 역할

Kubernetes 컨트롤 플레인이 다른 AWS 서비스와 상호 작용할 수 있도록 합니다.

연결된 정책: AmazonEKSClusterPolicy

2. 노드 그룹 역할

워커 노드가 AWS 서비스와 통신할 수 있는 권한을 제공합니다.

연결된 정책:

AmazonEKSWorkerNodePolicy
AmazonEC2ContainerRegistryReadOnly
AmazonEKS_CNI_Policy

이러한 권한을 통해 노드는 다음을 수행할 수 있습니다:

  • ECR에서 컨테이너 이미지 가져오기
  • 컨트롤 플레인과 통신
  • CNI 플러그인을 통한 네트워킹 관리

단계 3 – 워커 노드 추가

포드를 호스팅하기 위해 Node Group을 생성합니다.

SettingValue
AMIAmazon Linux 2
Desired nodes1 (나중에 확장 가능)
Security group ports22, 80, 8080
SSH access활성화됨

몇 분 후에 Node Group이 Active 상태가 되어 워크로드를 받을 준비가 됩니다.

단계 4 – 클러스터 인증

로컬 kubeconfig를 업데이트하여 kubectl이 클러스터와 통신할 수 있도록 합니다:

aws eks update-kubeconfig --region us-east-1 --name my-cluster

이 명령은 클러스터 자격 증명을 로컬에 저장합니다.

연결 확인

kubectl get nodes

노드가 나열되면 클러스터가 올바르게 구성된 것입니다.

Step 5 – 2048 게임 Pod 배포

2048 게임에 대한 pod 정의를 생성합니다:

apiVersion: v1
kind: Pod
metadata:
  name: 2048-pod
  labels:
    app: 2048-ws
spec:
  containers:
  - name: 2048-container
    image: blackicebird/2048
    ports:
    - containerPort: 80

매니페스트를 적용합니다:

kubectl apply -f 2048-pod.yaml

Pod 상태를 확인합니다:

kubectl get pods

Pod가 Running 상태를 표시하면, 애플리케이션이 클러스터 내에 성공적으로 배포된 것입니다.

Step 6 – 애플리케이션 노출하기

Internet에서 게임에 접근할 수 있도록 LoadBalancer 서비스를 생성합니다:

apiVersion: v1
kind: Service
metadata:
  name: 2048-service
spec:
  type: LoadBalancer
  selector:
    app: 2048-ws
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

서비스를 적용합니다:

kubectl apply -f 2048-service.yaml

잠시 후 AWS가 ELB를 프로비저닝합니다. DNS 이름을 가져옵니다:

kubectl get svc 2048-service

브라우저에서 해당 DNS 이름을 열면 2048 게임이 정상적으로 동작합니다.

애플리케이션 노출을 위한 추가 세부 사항

Step 6 diagram

파드가 실행 중이지만 아직 클러스터 외부에서 접근할 수 없습니다. 이를 해결하기 위해 Kubernetes Service를 생성합니다:

apiVersion: v1
kind: Service
metadata:
  name: mygame-svc
spec:
  selector:
    app: 2048-ws
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

서비스를 배포합니다:

kubectl apply -f mygame-svc.yaml

서비스 상세 정보를 확인합니다:

kubectl describe svc mygame-svc

Kubernetes가 자동으로 공용 LoadBalancer를 프로비저닝합니다.

7단계 — 애플리케이션에 접근하기

로드밸런서가 생성되면 AWS가 퍼블릭 DNS 엔드포인트를 생성합니다. 해당 DNS 이름을 브라우저에서 열면 2048 게임 인터페이스가 표시되고 애플리케이션에 공개적으로 접근할 수 있게 됩니다.

2048 game UI

애플리케이션 스케일링

Kubernetes의 가장 큰 장점 중 하나는 수평 스케일링입니다. 트래픽이 증가하면 추가 복제본을 생성할 수 있습니다:

kubectl scale deployment my-app --replicas=3

Kubernetes는 자동으로 트래픽을 파드에 분산시켜 고가용성과 향상된 성능을 보장합니다.

이 프로젝트에서 배운 점

  • Kubernetes 워크로드 – 파드가 클러스터 내에서 컨테이너화된 애플리케이션을 실행하는 방식.
  • 관리형 Kubernetes – Amazon EKS가 제어 플레인을 관리하여 클러스터 관리를 단순화하는 방법.
  • Kubernetes 네트워킹 – 서비스와 로드밸런서가 애플리케이션을 외부에 노출하는 방식.
  • 클라우드 인프라스트럭처 – AWS가 네트워킹, 컴퓨팅, 컨테이너 오케스트레이션을 함께 통합하는 방법.

가능한 개선 사항

  • Deployments 대신 독립형 파드 사용.
  • Ingress controllers 구현.
  • CI/CD pipelines 추가.
  • Prometheus와 Grafana를 사용한 모니터링.
  • Terraform을 사용한 인프라 자동화.

이러한 추가 사항은 프로젝트를 production‑grade Kubernetes deployment에 더 가깝게 만들 것입니다.

최종 생각

Kubernetes는 처음에 압도적으로 느껴질 수 있지만, 이와 같은 프로젝트를 통해 모든 것이 어떻게 맞물리는지 훨씬 쉽게 이해할 수 있습니다. 2048 게임과 같은 간단한 애플리케이션을 배포함으로써 다음과 같은 점을 명확히 확인할 수 있습니다:

  • 컨테이너는 파드(pod) 내부에서 실행됩니다.
  • 파드는 워커 노드(worker node)에서 실행됩니다.
  • 서비스는 애플리케이션을 외부에 노출합니다.
  • 로드 밸런서는 외부 접근을 제공합니다.

DevOps, Kubernetes, 혹은 Cloud Engineering을 배우고 있다면, 이러한 프로젝트를 구축하는 것이 실무 경험을 쌓는 가장 좋은 방법 중 하나입니다.

프로젝트 저장소

전체 프로젝트 저장소에서 코드, YAML 매니페스트 및 설정 단계를 탐색하세요:

프로젝트 스크린샷

👉 https://shorturl.at/LxtaW

0 조회
Back to Blog

관련 글

더 보기 »