

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

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

# EKS 자율 모드에 샘플 로드 밸런서 워크로드 배포
<a name="auto-elb-example"></a>

이 가이드에서는 로드 밸런싱 및 인터넷 접근성이 포함된 Amazon EKS에 2048 게임의 컨테이너화된 버전을 배포하는 방법을 안내합니다.

## 사전 조건
<a name="_prerequisites"></a>
+ EKS Auto Mode 클러스터
+  `kubectl`이 클러스터와 상호 작용하도록 구성됨
+ ALB 리소스 생성을 위한 적절한 IAM 권한

## 1단계: 네임스페이스 생성
<a name="_step_1_create_the_namespace"></a>

먼저 2048 게임 애플리케이션을 위한 전용 네임스페이스를 생성합니다.

`01-namespace.yaml`라는 이름의 파일을 만듭니다.

```
apiVersion: v1
kind: Namespace
metadata:
  name: game-2048
```

네임스페이스 구성을 적용합니다.

```
kubectl apply -f 01-namespace.yaml
```

## 2단계: 애플리케이션 배포
<a name="_step_2_deploy_the_application"></a>

애플리케이션은 2048 게임 컨테이너의 여러 복제본을 실행합니다.

`02-deployment.yaml`라는 이름의 파일을 만듭니다.

```
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: game-2048
  name: deployment-2048
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: app-2048
  replicas: 5
  template:
    metadata:
      labels:
        app.kubernetes.io/name: app-2048
    spec:
      containers:
        - image: public.ecr.aws/l6m2t8p7/docker-2048:latest
          imagePullPolicy: Always
          name: app-2048
          ports:
            - containerPort: 80
          resources:
            requests:
              cpu: "0.5"
```

**참고**  
이미지 `public.ecr.aws/l6m2t8p7/docker-2048:latest`를 로드하는 동안 오류가 발생하면 노드 IAM 역할에 ECR에서 이미지를 가져올 수 있는 충분한 권한이 있는지 확인합니다. 자세한 내용은 [노드 IAM 역할](auto-learn-iam.md#auto-learn-node-iam-role) 섹션을 참조하세요. 또한 예제의 `docker-2048` 이미지는 `x86_64` 이미지이며 다른 아키텍처에서는 실행되지 않습니다.

 **핵심 구성 요소:** 
+ 애플리케이션의 복제본 5개 배포
+ 퍼블릭 ECR 이미지 사용
+ 포드당 0.5 CPU 코어 요청
+ HTTP 트래픽에 포트 80 노출

배포를 적용합니다.

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

## 3단계: 서비스 생성
<a name="_step_3_create_the_service"></a>

서비스는 배포를 클러스터 네트워크에 노출합니다.

`03-service.yaml`라는 이름의 파일을 만듭니다.

```
apiVersion: v1
kind: Service
metadata:
  namespace: game-2048
  name: service-2048
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  selector:
    app.kubernetes.io/name: app-2048
```

 **핵심 구성 요소:** 
+ NodePort 서비스 생성
+ 포트 80을 컨테이너의 포트 80에 매핑
+ 레이블 선택기를 사용하여 포드 찾기

서비스를 적용합니다.

```
kubectl apply -f 03-service.yaml
```

## 4단계: 로드 밸런싱 구성
<a name="_step_4_configure_load_balancing"></a>

애플리케이션을 인터넷에 노출하도록 수신을 설정합니다.

먼저 `IngressClass`를 생성합니다. `04-ingressclass.yaml`라는 이름의 파일을 만듭니다.

```
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  labels:
    app.kubernetes.io/name: LoadBalancerController
  name: alb
spec:
  controller: eks.amazonaws.com/alb
```

**참고**  
EKS 자동 모드에서는 퍼블릭 및 프라이빗 서브넷을 식별하기 위해 서브넷 태그가 필요합니다.  
`eksctl`로 클러스터를 생성한 경우 이미 이러한 태그가 있는 것입니다.  
[EKS 자동 모드의 태그 서브넷](tag-subnets-auto.md) 방법에 대해 알아봅니다.

그런 다음 수신 리소스를 생성합니다. `05-ingress.yaml`라는 이름의 파일을 만듭니다.

```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: game-2048
  name: ingress-2048
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-2048
                port:
                  number: 80
```

 **핵심 구성 요소:** 
+ 인터넷 연결 ALB 생성
+ 직접 포드 라우팅에 IP 대상 유형 사용
+ 모든 트래픽(/)을 게임 서비스로 라우팅

수신 구성을 적용합니다.

```
kubectl apply -f 04-ingressclass.yaml
kubectl apply -f 05-ingress.yaml
```

## 5단계: 배포 확인
<a name="_step_5_verify_the_deployment"></a>

1. 모든 포드가 실행 중인지 확인합니다.

   ```
   kubectl get pods -n game-2048
   ```

1. 서비스가 생성되었는지 확인합니다.

   ```
   kubectl get svc -n game-2048
   ```

1. ALB 엔드포인트를 가져옵니다.

   ```
   kubectl get ingress -n game-2048
   ```

수신 출력의 ADDRESS 필드에 ALB 엔드포인트가 표시됩니다. ALB가 모든 대상을 프로비저닝하고 등록할 때까지 2\$13분 기다립니다.

## 6단계: 게임에 액세스
<a name="_step_6_access_the_game"></a>

웹 브라우저를 열고 이전 단계에서 ALB 엔드포인트 URL로 이동합니다. 2048 게임 인터페이스가 표시됩니다.

## 7단계: 정리
<a name="_step_7_cleanup"></a>

이 자습서에서 만든 리소스를 모두 제거합니다.

```
kubectl delete namespace game-2048
```

그러면 배포, 서비스 및 수신 리소스를 포함하여 네임스페이스의 모든 리소스가 삭제됩니다.

## 비하인드 스토리
<a name="_whats_happening_behind_the_scenes"></a>

1. 배포를 통해 2048 게임을 실행하는 포드 5개 생성

1. 해당 서비스는 이러한 포드에 대한 안정적인 네트워크 액세스 제공

1. EKS Auto Mode:
   + AWS에서 Application Load Balancer 생성 
   + 포드의 대상 그룹 구성
   + 트래픽이 서비스로 전달되도록 라우팅 규칙 설정

## 문제 해결
<a name="auto-elb-troubleshooting"></a>

게임이 로드되지 않는 경우 다음을 수행합니다.
+ 모든 포드가 실행 중인지 확인: `kubectl get pods -n game-2048` 
+ 수신 상태 확인: `kubectl describe ingress -n game-2048` 
+ ALB 상태 확인: AWS 콘솔에서 대상 그룹 상태 확인