빠른 시작: 웹 앱 배포 및 데이터 저장 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

빠른 시작: 웹 앱 배포 및 데이터 저장

게임 애플리케이션을 배포하고 해당 데이터를 Amazon EKS에 유지

이 빠른 시작 자습서에서는 eksctl을 사용하여 2048 게임 샘플 애플리케이션을 배포하고 Amazon EKS Auto Mode 클러스터에 데이터를 유지하는 단계를 보여줍니다. Amazon EKS Auto Mode는 클러스터 블록 스토리지, 네트워킹, 로드 밸런싱, 컴퓨팅 오토 스케일링을 위한 일상적인 작업을 자동화합니다.

진행하면서 클러스터 설정 프로세스를 안내합니다. Amazon EKS Auto Mode는 EC2 관리형 인스턴스를 사용한 노드 생성, Application Load Balancer 생성, EBS 볼륨 생성 작업을 자동화합니다.

전반적으로 AWS 서비스와 완전히 통합하는 데 필요한 사용자 지정 주석이 포함된 샘플 워크로드를 배포합니다.

이 튜토리얼에서는

다음 eksctl 클러스터 템플릿을 사용하여 자동 노드 프로비저닝을 위해 EKS Auto Mode로 클러스터를 빌드합니다.

VPC 구성 다음 eksctl 클러스터 템플릿을 사용하면 eksctl은 클러스터에 대한 IPv4 가상 프라이빗 클라우드(VPC)를 자동으로 생성합니다. 기본적으로 eksctl은 퍼블릭 엔드포인트와 프라이빗 엔드포인트를 모두 생성할 뿐 아니라 모든 네트워킹 요구 사항에 대응하는 VPC를 구성합니다.

인스턴스 관리 EKS Auto Mode는 Kubernetes 애플리케이션의 요구 사항에 따라 EKS 클러스터의 노드를 동적으로 추가하거나 제거합니다.

데이터 지속성 EKS Auto Mode의 블록 스토리지 기능을 사용하여 포드 재시작 또는 실패와 관련된 시나리오에서도 애플리케이션 데이터의 지속성을 보장합니다.

외부 앱 액세스 EKS Auto Mode의 로드 밸런싱 기능을 사용하여 Application Load Balancer(ALB)를 동적으로 프로비저닝합니다.

사전 조건

시작하기 전에 Amazon EKS를 사용하도록 다음과 같은 사전 조건을 설정해야 합니다.

  • AWS CLI 설정 및 자격 증명 구성

  • eksctl 설치

  • kubectl 설치

자세한 내용은 Amazon EKS를 사용하도록 설정 단원을 참조하십시오.

클러스터 구성

이 섹션에서는 동적 노드 프로비저닝을 위해 EKS Auto Mode를 사용하여 클러스터를 생성합니다.

cluster-config.yaml 파일을 생성하고 다음 내용을 붙여넣습니다. region-code를 유효한 리전(예: us-east-1)으로 변경합니다.

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: web-quickstart region: <region-code> autoModeConfig: enabled: true

이제 클러스터를 생성할 준비가 되었습니다.

Amazon EKS 클러스터를 생성합니다.

eksctl create cluster -f cluster-config.yaml
중요

eksctl을 사용하여 클러스터를 생성하지 않는 경우 VPC 서브넷에 수동으로 태그를 지정해야 합니다.

IngressClass 생성

EKS Auto Mode용 Kubernetes IngressClass를 생성합니다. IngressClass는 EKS Auto Mode가 수신 리소스를 처리하는 방법을 정의합니다. 이 단계에서는 EKS Auto Mode의 로드 밸런싱 기능을 구성합니다. 애플리케이션에 대한 수신 리소스를 생성할 때 EKS Auto Mode는 이 IngressClass를 사용하여 로드 밸런서를 자동으로 프로비저닝 및 관리하고 Kubernetes 애플리케이션을 AWS 로드 밸런싱 서비스와 통합합니다.

다음 yaml 파일을 ingressclass.yaml로 저장합니다.

apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb annotations: ingressclass.kubernetes.io/is-default-class: "true" spec: controller: eks.amazonaws.com/alb

IngressClass를 클러스터에 적용합니다.

kubectl apply -f ingressclass.yaml

2048 게임 샘플 애플리케이션 배포

이 섹션에서는 인기 있는 ‘2048 게임’을 클러스터 내 샘플 애플리케이션으로 배포하는 단계를 설명합니다. 제공된 매니페스트에는 Application Load Balancer(ALB)에 대한 사용자 지정 주석이 포함됩니다. 이러한 주석은 통합되어 들어오는 HTTP 트래픽을 ‘인터넷 경계’로 처리하고 대상 유형 ‘ip’를 사용하여 ‘game-2048’ 네임스페이스의 적절한 서비스로 라우팅하도록 지시합니다.

  1. --save-config 플래그를 사용하여 game-2048이라는 Kubernetes 네임스페이스를 생성합니다.

    kubectl create namespace game-2048 --save-config

    다음과 같은 응답 출력이 표시되어야 합니다.

    namespace/game-2048 created
  2. 2048 게임 샘플 애플리케이션 배포

    kubectl apply -n game-2048 -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.8.0/docs/examples/2048/2048_full.yaml

    이 매니페스트는 game-2048 네임스페이스에 대한 Kubernetes 배포, 서비스, 수신을 설정하여 클러스터 내에서 game-2048 애플리케이션을 배포하고 노출하는 데 필요한 리소스를 생성합니다. 여기에는 포트 80의 배포를 노출하는 service-2048이라는 서비스 생성과 수신 HTTP 트래픽에 대한 라우팅 규칙과 인터넷 경계 Application Load Balancer(ALB)에 대한 주석을 정의하는 ingress-2048이라는 수신 리소스 생성이 포함되어 있습니다. 다음과 같은 응답 출력이 표시되어야 합니다.

    namespace/game-2048 configured deployment.apps/deployment-2048 created service/service-2048 created ingress.networking.k8s.io/ingress-2048 created
  3. 다음 명령을 실행하여 game-2048 네임스페이스에 수신 리소스를 생성합니다.

    kubectl get ingress -n game-2048

    다음과 같은 응답 출력이 표시되어야 합니다.

    NAME CLASS HOSTS ADDRESS PORTS AGE ingress-2048 alb * k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com 80 31s

    다음 단계를 시작하기 전에 Application Load Balancer(ALB)가 프로비저닝될 때까지 몇 분 정도 기다려야 합니다.

  4. 웹 브라우저를 열고 이전 단계의 ADDRESS를 입력하여 웹 애플리케이션에 액세스합니다. 예시:

    k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com

    브라우저에 2048 게임이 표시되어야 합니다. 게임을 하세요!

    2048 게임하기

Amazon EKS Auto Mode를 사용하여 데이터 유지

이제 Amazon EKS 클러스터에서 2048 게임이 실행되고 있으므로 Amazon EKS Auto Mode의 블록 스토리지 기능을 사용하여 게임 데이터가 안전하게 유지되는지 확인해야 합니다.

  1. storage-class.yaml라는 이름의 파일을 만듭니다.

    apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"
  2. StorageClass를 적용합니다.

    kubectl apply -f storage-class.yaml
  3. 게임 데이터에 대한 스토리지를 요청하려면 영구 볼륨 클레임(PVC)을 생성하세요. ebs-pvc.yaml이라는 파일을 생성하고 다음 내용을 추가합니다.

    apiVersion: v1 kind: PersistentVolumeClaim metadata: name: game-data-pvc namespace: game-2048 spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: auto-ebs-sc
  4. 클러스터에 PVC를 적용:

    kubectl apply -f ebs-pvc.yaml

    다음과 같은 응답 출력이 표시되어야 합니다.

    persistentvolumeclaim/game-data-pvc created
  5. 이제 이 PVC를 데이터를 저장하는 데 사용하려면 2048 게임 배포를 업데이트해야 합니다. 다음 배포는 게임 데이터를 저장하는 데 PVC를 사용하도록 구성됩니다. ebs-deployment.yaml이라는 파일을 생성하고 다음 내용을 추가합니다.

    apiVersion: apps/v1 kind: Deployment metadata: namespace: game-2048 name: deployment-2048 spec: replicas: 3 # Adjust the number of replicas as needed selector: matchLabels: app.kubernetes.io/name: app-2048 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - name: app-2048 image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: game-data mountPath: /var/lib/2048 volumes: - name: game-data persistentVolumeClaim: claimName: game-data-pvc
  6. 업데이트된 배포를 적용합니다.

    kubectl apply -f ebs-deployment.yaml

    다음과 같은 응답 출력이 표시되어야 합니다.

    deployment.apps/deployment-2048 configured

이러한 단계를 통해 이제 Amazon EKS Auto Mode의 블록 스토리지 기능을 사용하여 데이터를 유지하도록 클러스터의 2048 게임이 설정됩니다. 이렇게 하면 포드나 노드에 장애가 발생하더라도 게임 진행 상황과 데이터를 안전하게 보호할 수 있습니다.

이 자습서가 마음에 드셨다면 피드백을 통해 알려주세요. 이와 같은 사용 사례별 빠른 시작 자습서를 더 많이 제공할 수 있도록 하겠습니다.

클러스터와 노드 삭제

이 자습서용으로 생성한 클러스터의 사용을 끝낸 후에는 다음 명령으로 클러스터를 삭제하여 정리해야 합니다. 정리하기 전에 이 클러스터로 더 많은 작업을 수행하려면 다음 단계를 참조하세요.

eksctl delete cluster -f ./cluster-config.yaml

EKS는 클러스터가 삭제될 때 프로비저닝된 모든 노드를 자동으로 정리합니다.