

 **이 페이지 개선에 도움 주기** 

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

# 빠른 시작: 웹 앱 배포 및 데이터 저장
<a name="quickstart"></a>

이 빠른 시작 자습서에서는 [eksctl](https://eksctl.io/)을 사용하여 2048 게임 샘플 애플리케이션을 배포하고 Amazon EKS Auto Mode 클러스터에서 해당 데이터를 유지하는 단계를 안내합니다.

 [Amazon EKS Auto Mode](automode.md)는 블록 스토리지, 네트워킹, 로드 밸런싱, 컴퓨팅 오토 스케일링과 같은 일상적인 태스크를 자동화하여 클러스터 관리를 단순화합니다. 설정 중에 EC2 관리형 인스턴스, Application Load Balancer 및 EBS 볼륨을 사용하여 노드 생성을 처리합니다.

요약하면 AWS 서비스와의 원활한 통합에 필요한 사용자 지정 주석이 포함된 샘플 워크로드를 배포합니다.

## 이 튜토리얼에서는
<a name="_in_this_tutorial"></a>

다음 `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)를 동적으로 프로비저닝합니다.

## 사전 조건
<a name="_prerequisites"></a>

시작하기 전에 다음 태스크를 수행했는지 확인합니다.
+  [Amazon EKS용 환경 설정](https://docs.aws.amazon.com/eks/latest/userguide/setting-up.html) 
+  [eksctl의 최신 버전 설치](https://eksctl.io/installation/) 

## 클러스터 구성
<a name="_configure_the_cluster"></a>

이 섹션에서는 동적 노드 프로비저닝을 위해 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
```

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

`cluster-config.yaml``을 사용하여 EKS 클러스터를 생성합니다.

```
eksctl create cluster -f cluster-config.yaml
```

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

## IngressClass 생성
<a name="_create_ingressclass"></a>

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 게임 샘플 애플리케이션 배포
<a name="_deploy_the_2048_game_sample_application"></a>

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

**참고**  
이 예제의 `docker-2048` 이미지는 `x86_64` 컨테이너 이미지이며 다른 아키텍처에서는 실행되지 않습니다.

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

   ```
   kubectl create namespace game-2048 --save-config
   ```

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

   ```
   namespace/game-2048 created
   ```

1. [2048 게임 샘플 애플리케이션](https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.8.0/docs/examples/2048/2048_full.yaml) 배포

   ```
   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
   ```

1. 다음 명령을 실행하여 `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)가 프로비저닝될 때까지 몇 분 정도 기다려야 합니다.

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

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

   브라우저에 2048 게임이 표시되어야 합니다. 게임을 하세요\$1  
![\[2048 게임하기\]](http://docs.aws.amazon.com/ko_kr/eks/latest/userguide/images/quick2048.png)

## Amazon EKS Auto Mode를 사용하여 데이터 유지
<a name="_persist_data_using_amazon_eks_auto_mode"></a>

이제 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"
   ```

1. `StorageClass`를 적용합니다.

   ```
   kubectl apply -f storage-class.yaml
   ```

1. 게임 데이터에 대한 스토리지를 요청하려면 영구 볼륨 클레임(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
   ```

1. 클러스터에 PVC를 적용:

   ```
   kubectl apply -f ebs-pvc.yaml
   ```

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

   ```
   persistentvolumeclaim/game-data-pvc created
   ```

1. 이제 이 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
   ```

1. 업데이트된 배포를 적용합니다.

   ```
   kubectl apply -f ebs-deployment.yaml
   ```

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

   ```
   deployment.apps/deployment-2048 configured
   ```

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

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

## 정리
<a name="_clean_up"></a>

향후 요금이 발생하지 않도록 연결된 CloudFormation 스택을 수동으로 삭제하고 VPC 네트워크를 포함한 이 가이드를 통해 생성된 모든 리소스를 삭제해야 합니다.

CloudFormation 스택을 삭제합니다.

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