이 페이지 개선에 도움 주기
이 사용자 설명서에 기여하고 싶으신가요? 이 페이지 하단으로 스크롤하여 GitHub에서 이 페이지 편집을 선택하세요. 여러분의 기여는 모두를 위한 더 나은 사용자 설명서를 만드는 데 도움이 됩니다.
빠른 시작: 웹 앱 배포 및 데이터 저장
이 빠른 시작 자습서에서는 eksctl
이 튜토리얼에서는
다음 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.mediumeksctl
추가 기능은 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)
환경 변수를 구성하려면
-
Amazon EKS 클러스터에 대한
CLUSTER_REGION
환경 변수를 설정합니다.region-code
의 샘플 값을 바꿉니다.export CLUSTER_REGION=region-code
-
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 클러스터가 이를 인식하고 관리할 수 있도록 합니다.
Helm
을 사용하여 Amazon EKS 차트 리포지토리를 Helm에 추가합니다. helm repo add eks https://aws.github.io/eks-charts
Helm이 최신 버전의 차트를 인식하도록 리포지토리를 업데이트합니다.
helm repo update eks
다음 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’ 주석
--save-config
플래그를 사용하여game-2048
이라는 Kubernetes 네임스페이스를 생성합니다.kubectl create namespace game-2048 --save-config
다음과 같은 응답 출력이 표시되어야 합니다.
namespace/game-2048 created
-
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
다음 명령을 실행하여
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)가 프로비저닝될 때까지 몇 분 정도 기다려야 합니다.
웹 브라우저를 열고 이전 단계의
ADDRESS
를 입력하여 웹 애플리케이션에 액세스합니다. 예:k8s-game2048-ingress2-eb379a0f83-378466616.
region-code
.elb.amazonaws.com
. 브라우저에 2048 게임이 표시되어야 합니다. 게임을 하세요!
5단계: Amazon EBS CSI 드라이버 노드를 사용하여 데이터 유지
이제 Amazon EKS 클러스터에서 2048 게임이 실행되고 있으므로 Amazon EBS CSI 드라이버 관리형 추가 기능을 사용하여 게임 데이터가 안전하게 유지되는지 확인해야 합니다. 이 추가 기능은 생성 프로세스 중에 클러스터에 설치되었습니다. 이러한 통합은 Kubernetes 포드 또는 노드가 다시 시작되거나 교체되는 경우에도 게임 진행 상황과 데이터를 보존하는 데 필수적입니다.
-
EBS CSI 드라이버용 스토리지 클래스
생성: kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/examples/kubernetes/dynamic-provisioning/manifests/storageclass.yaml
-
게임 데이터에 대한 스토리지를 요청하려면 영구 볼륨 클레임(PVC)을 생성하세요.
ebs-pvc.yaml
이라는 파일을 생성하고 다음 내용을 추가합니다.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: game-data-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ebs-sc
클러스터에 PVC를 적용:
kubectl apply -f ebs-pvc.yaml
다음과 같은 응답 출력이 표시되어야 합니다.
persistentvolumeclaim/game-data-pvc created
이제 이 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
업데이트된 배포를 적용합니다.
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
다음 단계
다음 설명서 주제는 클러스터의 기능을 확장하는 데 도움이 됩니다.
클러스터를 생성한 IAM 보안 주체는
kubectl
또는 AWS Management Console를 사용하여 Kubernetes API 서버를 호출할 수 있는 유일한 보안 주체입니다. 다른 IAM 보안 주체가 클러스터에 액세스할 수 있게 하려면 해당 보안 주체를 추가해야 합니다. 자세한 내용은 IAM 사용자 및 역할에 Kubernetes APIs에 대한 액세스 권한 부여 및 필수 권한 단원을 참조하세요.프로덕션 용도로 클러스터를 배포하기 전에 클러스터와 노드에 대한 모든 설정을 숙지하는 것이 좋습니다. Amazon EC2 노드에 대한 SSH 액세스 사용 설정과 같은 일부 설정은 클러스터를 생성할 때 지정해야 합니다.
클러스터의 보안을 강화하려면 서비스 계정에 IAM 역할을 사용하도록 Amazon VPC 컨테이너 네트워킹 인터페이스 플러그 인을 구성합니다.
다양한 유형의 클러스터를 생성하는 방법을 알아보려면: