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

이 페이지 개선에 도움 주기

이 사용자 설명서에 기여하고 싶으신가요? 이 페이지 하단으로 스크롤하여 GitHub에서 이 페이지 편집을 선택하세요. 여러분의 기여는 모두를 위한 더 나은 사용자 설명서를 만드는 데 도움이 됩니다.

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

이 빠른 시작 자습서에서는 eksctl을 사용하여 2048 게임 샘플 애플리케이션을 배포하고 Amazon EKS 클러스터에 데이터를 유지하는 단계를 보여줍니다. eksctl은 AWS CloudFormation을 활용하는 코드형 인프라 유틸리티로, 모든 필수 구성 요소를 갖춘 완전한 기능의 클러스터를 설정할 수 있습니다. 이러한 구성 요소에는 Amazon VPC와 우리가 정의한 AWS 서비스에 권한을 제공하도록 맞춤형으로 설정된 IAM 역할이 포함됩니다. 진행하면서 클러스터 설정 프로세스를 안내하고 Amazon EKS Amazon EKS 추가 기능를 통합하여 클러스터를 운영 기능으로 강화합니다. 마지막으로 AWS 서비스와 완전히 통합하는 데 필요한 사용자 지정 주석이 포함된 샘플 워크로드를 배포합니다.

이 튜토리얼에서는

다음 eksctl 클러스터 템플릿을 사용하여 관리형 노드 그룹이 포함된 Amazon EKS 클러스터를 구축합니다. 다음 구성 요소를 구성합니다.

VPC 구성

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

인스턴스 유형

t3.medium 인스턴스 유형을 활용합니다. 이 인스턴스 유형은 컴퓨팅, 메모리, 네트워크 리소스의 균형 잡힌 조합을 제공하므로 가끔 수요가 급증할 수 있는 중간 정도의 CPU 사용량이 있는 애플리케이션에 이상적입니다.

인증

Kubernetes 포드와 AWS 서비스 간의 통신을 용이하게 하기 위해 IRSA 매핑을 설정합니다. 템플릿은 인증 및 권한 부여를 위해 OIDC(OpenID Connect) 엔드포인트를 설정하도록 구성되어 있습니다. 또한 애플리케이션 노출 및 트래픽 관리를 담당하는 컨트롤러인 AWS 로드 밸런서 컨트롤러(LBC)에 대한 서비스 계정을 설정합니다.

데이터 지속성

AWS EBS CSI 드라이버 관리형 추가 기능을 통합하여 포드 재시작 또는 장애와 관련된 시나리오에서도 애플리케이션 데이터의 지속성을 보장할 수 있습니다. 템플릿은 추가 기능을 설치하고 서비스 계정을 설정하도록 구성되어 있습니다.

외부 앱 액세스

AWS 로드 밸런서 컨트롤러(LBC) 추가 기능을 설정하고 통합하여 2048 게임 애플리케이션을 노출하고, LBC를 사용하여 Application Load Balancer(ALB)를 동적으로 프로비저닝합니다.

사전 조건

1단계: 클러스터 구성

이 섹션에서는 두 개의 노드가 포함된 t3.medium 인스턴스를 사용하여 관리형 노드 그룹 기반 클러스터를 생성합니다. 구성에는 AWS 로드 밸런서 컨트롤러(LBC) 추가 기능을 위한 서비스 계정과 최신 버전의 AWS Amazon EBS CSI 드라이버 설치가 포함되어 있습니다. 사용 가능한 모든 eksctl 추가 기능은 eksctl 설명서에서 추가 기능 찾아보기를 참조하세요.

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

    예제 출력 내용은 다음과 같습니다.

    apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: web-quickstart region: region-code managedNodeGroups: - name: eks-mng instanceType: t3.medium desiredCapacity: 2 iam: withOIDC: true serviceAccounts: - metadata: name: aws-load-balancer-controller namespace: kube-system wellKnownPolicies: awsLoadBalancerController: true addons: - name: aws-ebs-csi-driver wellKnownPolicies: # Adds an IAM service account ebsCSIController: true cloudWatch: clusterLogging: enableTypes: ["*"] logRetentionInDays: 30

2단계: 클러스터 생성

이제 Amazon EKS 클러스터를 생성할 준비가 되었습니다. 이 프로세스는 완료하는 데 몇 분 정도 걸립니다. 상태를 모니터링하려면 AWS CloudFormation 콘솔을 참조하세요.

  • Amazon EKS 클러스터를 생성하고 cluster-config.yaml을 지정합니다.

    eksctl create cluster -f cluster-config.yaml
    참고

    응답에서 Error: checking STS access가 표시되면 현재 쉘 세션에 올바른 사용자 ID를 사용하고 있는지 확인하세요. 또한 명명된 프로필(예: --profile clusteradmin)을 지정하거나 AWS CLI에 대한 새 보안 토큰을 받아야 할 수도 있습니다.

    완료되면 다음 응답 출력이 표시됩니다.

    2024-07-04 21:47:53 [✔] EKS cluster "web-quickstart" in "region-code" region is ready

3단계: AWS Load Balancer Controller(LBC)를 사용하여 애플리케이션에 대한 외부 액세스 설정

클러스터가 작동되면 다음 단계는 컨테이너화된 애플리케이션을 외부에서 액세스할 수 있도록 하는 것입니다. 이는 클러스터 외부의 트래픽을 서비스, 즉 애플리케이션으로 전달하기 위해 Application Load Balancer(ALB)를 배포함으로써 달성됩니다. 클러스터를 생성할 때 ALB를 동적으로 생성하는 데 필요한 권한을 사용하여 로드 밸런서 컨트롤러(LBC)에 대한 서비스 계정에 대한 IAM 역할(IRSA)을 설정하여 Kubernetes 서비스로의 외부 트래픽 라우팅을 지원했습니다. 이 섹션에서는 클러스터에 AWS LBC를 설정하겠습니다.

환경 변수를 구성하려면

  1. Amazon EKS 클러스터에 대한 CLUSTER_REGION 환경 변수를 설정합니다. region-code의 샘플 값을 바꿉니다.

    export CLUSTER_REGION=region-code
  2. Amazon EKS 클러스터에 대한 CLUSTER_VPC 환경 변수를 설정합니다.

    export CLUSTER_VPC=$(aws eks describe-cluster --name web-quickstart --region $CLUSTER_REGION --query "cluster.resourcesVpcConfig.vpcId" --output text)

AWS 로드 밸런서 컨트롤러(LBC)를 설치하려면

AWS 로드 밸런서 컨트롤러(LBC)는 Kubernetes의 사용자 지정 리소스 정의(CRD)를 활용하여 AWS Elastic Load Balancing(ELB)을 관리합니다. 이러한 CRD는 로드 밸런서 및 TargetGroupBindings와 같은 사용자 지정 리소스를 정의하여 Kubernetes 클러스터가 이를 인식하고 관리할 수 있도록 합니다.

  1. Helm을 사용하여 Amazon EKS 차트 리포지토리를 Helm에 추가합니다.

    helm repo add eks https://aws.github.io/eks-charts
  2. Helm이 최신 버전의 차트를 인식하도록 리포지토리를 업데이트합니다.

    helm repo update eks
  3. 다음 Helm 명령을 실행하여 사용자 지정 리소스 정의(CRD) 및 AWS 로드 밸런서 컨트롤러(AWS LBC)용 기본 컨트롤러를 동시에 설치합니다. CRD 설치를 건너뛰려면 --skip-crds 플래그를 전달하세요. 이는 CRD가 이미 설치되어 있거나 특정 버전 호환성이 필요한 경우 또는 엄격한 액세스 제어 및 사용자 지정이 필요한 환경에서 유용할 수 있습니다.

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ --namespace kube-system \ --set clusterName=web-quickstart \ --set serviceAccount.create=false \ --set region=${CLUSTER_REGION} \ --set vpcId=${CLUSTER_VPC} \ --set serviceAccount.name=aws-load-balancer-controller

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

    NAME: aws-load-balancer-controller LAST DEPLOYED: Wed July 3 19:43:12 2024 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: AWS Load Balancer controller installed!

4단계: 2048 게임 샘플 애플리케이션 배포

이제 로드 밸런서가 설정되었으므로 클러스터의 컨테이너화된 애플리케이션에 대한 외부 액세스를 활성화할 차례입니다. 이 섹션에서는 인기 있는 ‘2048 게임’을 클러스터 내 샘플 애플리케이션으로 배포하는 단계를 설명합니다. 제공된 매니페스트에는 Application Load Balancer(ALB)에 대한 사용자 지정 주석, 특히 ‘scheme’ 주석‘target-type’ 주석이 포함되어 있습니다. 이러한 주석은 AWS 로드 밸런서 컨트롤러(LBC)와 통합되어 들어오는 HTTP 트래픽을 ‘인터넷 경계’로 처리하고 대상 유형 ‘ip’를 사용하여 ‘game-2048’ 네임스페이스의 적절한 서비스로 라우팅하도록 지시합니다. 주석에 대한 자세한 내용은 AWS LBC 설명서의 주석을 참조하세요.

  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 게임하기

5단계: Amazon EBS CSI 드라이버 노드를 사용하여 데이터 유지

이제 Amazon EKS 클러스터에서 2048 게임이 실행되고 있으므로 Amazon EBS CSI 드라이버 관리형 추가 기능을 사용하여 게임 데이터가 안전하게 유지되는지 확인해야 합니다. 이 추가 기능은 생성 프로세스 중에 클러스터에 설치되었습니다. 이러한 통합은 Kubernetes 포드 또는 노드가 다시 시작되거나 교체되는 경우에도 게임 진행 상황과 데이터를 보존하는 데 필수적입니다.

  1. EBS CSI 드라이버용 스토리지 클래스 생성:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/examples/kubernetes/dynamic-provisioning/manifests/storageclass.yaml
  2. 게임 데이터에 대한 스토리지를 요청하려면 영구 볼륨 클레임(PVC)을 생성하세요. ebs-pvc.yaml이라는 파일을 생성하고 다음 내용을 추가합니다.

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

    kubectl apply -f ebs-pvc.yaml

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

    persistentvolumeclaim/game-data-pvc created
  4. 이제 이 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
  5. 업데이트된 배포를 적용합니다.

    kubectl apply -f ebs-deployment.yaml

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

    deployment.apps/deployment-2048 configured

이러한 단계를 통해 Amazon EKS의 2048 게임은 이제 Amazon EBS CSI 드라이버를 사용하여 데이터를 유지하도록 설정되었습니다. 이렇게 하면 포드나 노드에 장애가 발생하더라도 게임 진행 상황과 데이터를 안전하게 보호할 수 있습니다. 이 자습서가 마음에 드셨다면 피드백을 통해 알려주세요. 이와 같은 사용 사례별 빠른 시작 자습서를 더 많이 제공할 수 있도록 하겠습니다.

6단계: 클러스터 및 노드 삭제

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

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

완료되면 다음 응답 출력이 표시됩니다.

2024-07-05 17:26:44 [✔] all cluster resources were deleted

다음 단계

다음 설명서 주제는 클러스터의 기능을 확장하는 데 도움이 됩니다.

다양한 유형의 클러스터를 생성하는 방법을 알아보려면: