Amazon EKS에 컨테이너 웹 앱 배포

시작 가이드

모듈 4: AWS CDK로 배포

이 모듈에서는 CDK를 사용하여 배포를 생성하고 애플리케이션을 시작합니다.

소개

이 모듈에서는 이전 모듈의 CDK8s를 통해 생성된 구성 파일을 사용하여 새로 생성된 EKS 클러스터에 애플리케이션을 배포합니다. 이러한 구성 파일은 CDK로 애플리케이션을 배포하는 데 사용됩니다.

배우게 될 내용

  • AWS CDK에 AWS CDK8S 통합
  • AWS CDK를 사용하여 배포
  • Kubectl로 클러스터 운영

 완료 시간

10분

 모듈 선행 조건

  • 관리자 수준의 액세스 권한이 있는 AWS 계정**
  • 권장 브라우저: 최신 버전의 Chrome 또는 Firefox

[**]생성된 지 24시간이 지나지 않은 계정은 이 자습서를 완료하는 데 필요한 서비스에 액세스할 권한이 아직 없을 수 있습니다.

구현

애플리케이션 정의

Kubernetes 구성 파일은 Yaml 형식으로 저장되므로 구문 분석하려면 yaml 라이브러리를 가져와야 합니다. eks/cluster/cluster/cluster_stack의 맨 위에서 다른 가져오기 아래에 가져온 yaml을 추가합니다. 

그런 다음 Yaml 파일 2개를 변수로 읽어 클러스터에 전달하는 코드 블록 2개를 추가합니다.

# Read the deployment config
with open("../cdk8s/dist/cdk8s-deployment.k8s.yaml", 'r') as stream:
      deployment_yaml = yaml.load(stream, Loader=yaml.FullLoader)

# Read the service config
with open("../cdk8s/dist/cdk8s-service.k8s.yaml", 'r') as stream:
      service_yaml = yaml.load(stream, Loader=yaml.FullLoader)

각 파일에 한 번씩 add_manifest 메서드를 사용하여 이 Yaml을 EKS 클러스터에 전달합니다.

eks_cluster.add_manifest(f"{construct_id}-app-deployment", yaml_app_deployment)

eks_cluster.add_manifest(f"{construct_id}-app-service", yaml_app_service)

cluster_stack.py 파일의 내용은 다음과 같습니다.

from aws_cdk import core as cdk
from aws_cdk import aws_iam as iam
from aws_cdk import aws_eks as eks
from aws_cdk import aws_ec2 as ec2
import yaml

class ClusterStack(cdk.Stack):

    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # Look up the default VPC
        vpc = ec2.Vpc.from_lookup(self, id="VPC", is_default=True)

        # Create master role for EKS Cluster
        iam_role = iam.Role(self, id=f"{construct_id}-iam",
                            role_name=f"{construct_id}-iam", assumed_by=iam.AccountRootPrincipal())

        # Creating Cluster with EKS
        eks_cluster = eks.Cluster(
            self, id=f"{construct_id}-cluster", 
            cluster_name=f"{construct_id}-cluster", 
            vpc=vpc, 
            vpc_subnets=vpc.public_subnets, 
            masters_role=iam_role, 
            default_capacity_instance=ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO), 
            version=eks.KubernetesVersion.V1_20,
        )

# Read the deployment config
with open("../cdk8s/dist/cdk8s-deployment.k8s.yaml", 'r') as stream:
      deployment_yaml = yaml.load(stream, Loader=yaml.FullLoader)

# Read the service config
with open("../cdk8s/dist/cdk8s-service.k8s.yaml", 'r') as stream:
      service_yaml = yaml.load(stream, Loader=yaml.FullLoader)

eks_cluster.add_manifest(f"{construct_id}-app-deployment", deployment_yaml)

eks_cluster.add_manifest(f"{construct_id}-app-service", service_yaml)

애플리케이션을 배포하려면 eks/cluster 디렉터리로 전환해야 합니다. 현재 eks/cdk8s 디렉터리에 있는 경우 다음을 실행합니다(그렇지 않은 경우 eks/cluster로 변경).

cd ../cluster
cdk deploy

AWS CDK로 애플리케이션 스택이 배포되면 kubectl로 포드 상태를 확인할 수 있습니다. kubectl을 사용하기 전에 kubectl config current-context를 사용하여 올바른 컨텍스트를 사용하고 있는지 확인합니다.

포드의 애플리케이션 상태를 보려면 kubectl get all 명령을 사용합니다. 그러면 다음 결과가 표시됩니다.

$ kubectl get all
NAME                                             READY   STATUS    RESTARTS   AGE
pod/cdk8s-deployment-c8087a1b-659fb88f56-6qj52   1/1     Running   0          3m22s
pod/cdk8s-deployment-c8087a1b-659fb88f56-s82ft   1/1     Running   0          3m22s

NAME                             TYPE           CLUSTER-IP      EXTERNAL-IP                                                                    PORT(S)        AGE
service/cdk8s-service-c844e1e1   LoadBalancer   xxx.xxx.xxx.xxx   xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com   80:30132/TCP   3m22s
service/kubernetes               ClusterIP      xxx.xxx.xxx.xxx      <none>                                                                         443/TCP        4h17m

NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cdk8s-deployment-c8087a1b   2/2     2            2           3m22s

NAME                                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/cdk8s-deployment-c8087a1b-659fb88f56   2         2         2       3m22s

애플리케이션을 테스트하려면 위의 LoadBalancer 값에서 EXTERNAL-IP를 복사하고 브라우저에서 엽니다. xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com과 같이 표시됩니다. 

로드되면 다음 페이지가 표시됩니다.

gsg_build_eks_2

CDK를 사용하여 클러스터를 프로비저닝하고 CDK8s로 생성된 매니페스트 파일을 배포함으로써 애플리케이션이 성공적으로 Kubernetes에 배포되었습니다.

결론

이 가이드에서는 CDK8s로 생성된 Kubernetes 구성 파일을 사용하는 방법과 CDK를 사용하여 이 파일을 EKS 클러스터에 배포하는 방법을 배웠습니다. 다음 모듈에서는 이 가이드에서 생성된 모든 리소스를 정리할 것입니다.

다음 단계: 리소스 정리

내용이 마음에 드셨는지요.

피드백을 제공해 주셔서 감사합니다.
이 페이지가 도움이 되어 기쁩니다. 지속적인 개선에 도움이 되는 추가 세부 정보를 공유해 주시겠습니까?
닫기
피드백을 제공해 주셔서 감사합니다.
이 페이지가 도움이 되지 못해 죄송합니다. 지속적인 개선에 도움이 되는 추가 세부 정보를 공유해 주시겠습니까?
닫기