이 페이지 개선에 도움 주기
이 사용자 설명서에 기여하고 싶으신가요? 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다. 여러분의 기여는 모두를 위한 더 나은 사용자 설명서를 만드는 데 도움이 됩니다.
이 가이드에서는 로드 밸런싱 및 인터넷 접근성이 포함된 Amazon EKS에 2048 게임의 컨테이너화된 버전을 배포하는 방법을 안내합니다.
사전 조건
-
EKS Auto Mode 클러스터
-
kubectl
이 클러스터와 상호 작용하도록 구성됨 -
ALB 리소스 생성을 위한 적절한 IAM 권한
1단계: 네임스페이스 생성
먼저 2048 게임 애플리케이션을 위한 전용 네임스페이스를 생성합니다.
01-namespace.yaml
라는 이름의 파일을 만듭니다.
apiVersion: v1
kind: Namespace
metadata:
name: game-2048
네임스페이스 구성을 적용합니다.
kubectl apply -f 01-namespace.yaml
2단계: 애플리케이션 배포
애플리케이션은 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"
핵심 구성 요소:
-
애플리케이션의 복제본 5개 배포
-
퍼블릭 ECR 이미지 사용
-
포드당 0.5 CPU 코어 요청
-
HTTP 트래픽에 포트 80 노출
배포를 적용합니다.
kubectl apply -f 02-deployment.yaml
3단계: 서비스 생성
서비스는 배포를 클러스터 네트워크에 노출합니다.
03-service.yaml
라는 이름의 파일을 만듭니다.
apiVersion: v1
kind: Service
metadata:
namespace: game-2048
name: service-2048
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
type: NodePort
selector:
app.kubernetes.io/name: app-2048
핵심 구성 요소:
-
NodePort 서비스 생성
-
포트 80을 컨테이너의 포트 80에 매핑
-
레이블 선택기를 사용하여 포드 찾기
서비스를 적용합니다.
kubectl apply -f 03-service.yaml
4단계: 로드 밸런싱 구성
애플리케이션을 인터넷에 노출하도록 수신을 설정합니다.
먼저 IngressClass
를 생성합니다. 04-ingressclass.yaml
라는 이름의 파일을 만듭니다.
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
namespace: game-2048
labels:
app.kubernetes.io/name: LoadBalancerController
name: alb
spec:
controller: eks.amazonaws.com/alb
그런 다음 수신 리소스를 생성합니다. 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단계: 배포 확인
-
모든 포드가 실행 중인지 확인합니다.
kubectl get pods -n game-2048
-
서비스가 생성되었는지 확인합니다.
kubectl get svc -n game-2048
-
ALB 엔드포인트를 가져옵니다.
kubectl get ingress -n game-2048
수신 출력의 ADDRESS 필드에 ALB 엔드포인트가 표시됩니다. ALB가 모든 대상을 프로비저닝하고 등록할 때까지 2~3분 기다립니다.
6단계: 게임에 액세스
웹 브라우저를 열고 이전 단계에서 ALB 엔드포인트 URL로 이동합니다. 2048 게임 인터페이스가 표시됩니다.
7단계: 정리
이 자습서에서 만든 리소스를 모두 제거합니다.
kubectl delete namespace game-2048
그러면 배포, 서비스 및 수신 리소스를 포함하여 네임스페이스의 모든 리소스가 삭제됩니다.
비하인드 스토리
-
배포를 통해 2048 게임을 실행하는 포드 5개 생성
-
해당 서비스는 이러한 포드에 대한 안정적인 네트워크 액세스 제공
-
EKS Auto Mode:
-
AWS에서 Application Load Balancer 생성
-
포드의 대상 그룹 구성
-
트래픽이 서비스로 전달되도록 라우팅 규칙 설정
-
문제 해결
게임이 로드되지 않는 경우 다음을 수행합니다.
-
모든 포드가 실행 중인지 확인:
kubectl get pods -n game-2048
-
수신 상태 확인:
kubectl describe ingress -n game-2048
-
ALB 상태 확인: AWS 콘솔에서 대상 그룹 상태 확인