본문 바로가기
Cloud/EKS

AWS EKS Workshop - (컴포넌트 구성, 배포)

by J's Note 2023. 10. 12.

구성요소 포장

다음과 같은 워크로드를 EKS에 배포하려면 컨테이너 이미지로 패키징하고 컨테이너 레지스트리에 게시해야 합니다. 

AWS 는 이미 공개퍼블릭 이미지 저장소인 ECR에 이미지를 배포해두었기 때문에 해당 이미지들을 사용하겠습니다.

컴포넌트 ECR 공개 레포지토리 도커파일
UI https://gallery.ecr.aws/aws-containers/retail-store-sample-ui https://github.com/aws-containers/retail-store-sample-app/blob/main/images/java17/Dockerfile
Catalog https://gallery.ecr.aws/aws-containers/retail-store-sample-catalog https://github.com/aws-containers/retail-store-sample-app/blob/main/images/go/Dockerfile
Shopping Cart https://gallery.ecr.aws/aws-containers/retail-store-sample-cart https://github.com/aws-containers/retail-store-sample-app/blob/main/images/java17/Dockerfile
Checkout https://gallery.ecr.aws/aws-containers/retail-store-sample-checkout https://github.com/aws-containers/retail-store-sample-app/blob/main/images/nodejs/Dockerfile
Orders https://gallery.ecr.aws/aws-containers/retail-store-sample-orders https://github.com/aws-containers/retail-store-sample-app/blob/main/images/java17/Dockerfile
Assets https://gallery.ecr.aws/aws-containers/retail-store-sample-assets https://github.com/aws-containers/retail-store-sample-app/blob/main/src/assets/Dockerfile

마이크로서비스

EKS 클러스터에 배포하기 이전, 카탈로그 컴포넌트, UI 컴포넌트의 구성요소를 살펴보며 고려할사항등에 대해 생각해보겠습니다.

  1. 카탈로그 API를 제공하는 애플리케이션은 Pod로 배포되고 실행되게 됩니다.
  2. 실행되는 Pod는 하나 이상의 Replia를 관리할 수 있는 Deployment에 의해 생성되어 수평적 확장이 가능합니다.
  3. Servie는 Pod의 세트로 실행되는 애플리케이션을 노출하는 방법이며, K8s 클러스터 내부의 다른 구성요소에서 카탈로그 API를 호출할 수 있습니다. 각각의 Service는 자체적인 DNS가 제공되게 됩니다.
  4. 상태저장 워크로드를 관리하도록 설계된 StatefulSet으로 K8s클러스터 내에서 실행되는 MySQL DB Pod를 배포합니다.
  5. 해당 구성은 모두 Catalog Namespace로 그룹화되어 관리됩니다.

  1. UI 컴포넌트는 사용자 브라우저로부터 HTTP요청을 받습니다. 그 후 해당 요청을 수행하기위해 다른 API 컴포넌트에 HTTP요청을 하고, 사용자에게 응답을 반환합니다.
  2. 각 다운스트림 컴포넌트는 자체 데이터스토리지나 인프라가 있을 수 있습니다.
  3. Namespace는 각 서비스에 대한 논리적 그룹이며, RBAC및 네트워크 정책을 사용하여 제어를 효과적으로 구현합니다.

구성요소 배포

미리 작성된 demployment.yaml을 사용하여 컴포넌트들을 배포해보겠습니다.

cd dist/kubernetes
kubectl apply -f deploy.yaml
kubectl wait --for=condition=available deployments --all

배포가 완료되면, UI서비스를 통해 웹서비스를 접속해보도록 하겠습니다.

kubectl get svc ui
NAME   TYPE           CLUSTER-IP      EXTERNAL-IP                                                                    PORT(S)        AGE
ui     LoadBalancer   172.20.11.154   aabb0194df5ce4294b9cdc808b743cea-1110028513.ap-northeast-2.elb.amazonaws.com   80:32658/TCP   5m2s

External IP를 사용하여 접속해보도록 하겠습니다.

서비스가 정상적으로 배포된것을 확인할 수 있습니다.