📂
Amazon EKS
  • Amazon EKS
  • 워크스페이스 생성하기
    • Cloud9 IDE 환경 구성
    • IAM 역할 생성
    • SSH & CMK Key 생성하기
  • EKS 클러스터 구축
    • EKS 클러스터 만들기
  • 쿠버네티스 대시보드 배포
    • Kubernetes 공식 대시보드 배포
  • 마이크로서비스 배포
    • 예제 애플리케이션 배포
    • 서비스 스케일(Scaling)
    • 애플리케이션 정리하기
  • 애플리케이션 배포 - Helm
    • HELM 설치
    • Helm으로 Nginx 배포
    • Helm을 사용하여 마이크로서비스 배포
    • 정리하기
  • 리소스 관리 - POD 배치
    • NodeSelector
    • Affinity and Anti-affinity
    • 더 실용적인 사용 사례
    • 정리하기
  • 리소스 관리 - Health Checks
    • Liveness 프로브 구성
    • Readiness 프로브 구성
    • 정리하기
  • 리소스 관리 - AutoScaling
    • HPA 구성하기
    • CA 구성하기
    • 정리하기
  • 네트워킹 - 서비스 노출
    • 서비스와 애플리케이션 연결
    • 서비스에 접근하기
    • 서비스 노출
    • Ingress
    • Ingress Controller
    • 정리하기
  • 네트워크 - Calico 정책
    • Calico 설치하기
    • Stars Policy Demo
    • 정리하기
  • Updating 권한설정 - RBAC
    • 테스트 POD 설치
    • 사용자 생성 및 맵핑
    • 역할과 바인딩
    • 정리하기
  • Updating 권한설정 - IAM 그룹
    • IAM Role, Group & User 생성하기
    • RBAC 설정하기
    • EKS 엑세스 테스트
    • 정리하기
  • Updating 권한설정 - Service account
    • OIDC 자격 증명 공급자 생성하기
    • IAM 역할 생성 및 지정
    • 샘플 POD 배포
    • 정리하기
  • Updating - 네트워크 - POD Security Group
    • SG 생성하기
    • RDS 생성하기
    • CNI 구성하기
    • SG 정책
    • Pod 배포하기
    • 정리하기
  • Updating - 모니터링 - Prometheus and Grafana
    • Prometheus 배포하기
    • Grafana 배포하기
    • 정리하기(Optional)
  • Updating 모니터링 - X-Ray
    • X-Ray DaemonSet 배포하기
    • 샘플 마이크로서비스 배포
    • X-Ray console 확인
    • 정리하기(Optional)
  • Updating 모니터링 - Container Insights
    • 사전 준비
    • Container Insights 구성하기
    • 부하 테스트
    • Container Insights 확인하기
    • 정리하기(Optional)
  • Updating CD - Gitops with Flux
    • 사전 준비
    • Codepipeline
    • EKS에 배포
    • 정리하기
  • Updating Argo Rollouts
  • Updating Service Mesh - AWS App Mesh
    • Fargate 및 OBSERVABILITY 구성
    • Product Catalog App 배포
    • APP MESH 설치
    • Porting to APP MESH
    • Virtual Gateway 구성
    • Canary
    • Observability
  • Updating 버전 업그레이드 - EKS Cluster
    • Upgrade EKS control Plane
    • Upgrade EKS CORE ADD-ONs
    • Upgrade Managed Node Group
Powered by GitBook
On this page
  • 1. NODEJS 백엔드 API 배포하기
  • 2. 크리스탈 백엔드 API 배포하기
  • 3. 서비스(Service) 종류 확인
  • 4. ELB 서비스 롤(Role) 확인
  • 5. 프론트엔드 서비스 배포하기
  • 6. 서비스(Service) 주소 찾기

Was this helpful?

  1. 마이크로서비스 배포

예제 애플리케이션 배포

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecsdemo-nodejs
  labels:
    app: ecsdemo-nodejs
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ecsdemo-nodejs
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: ecsdemo-nodejs
    spec:
      containers:
      - image: brentley/ecsdemo-nodejs:latest
        imagePullPolicy: Always
        name: ecsdemo-nodejs
        ports:
        - containerPort: 3000
          protocol: TCP

위에 예제 파일에는 서비스(service)와 app이 어떻게 배포되는지가 기술되어 있습니다. 이 내용을 kubectl을 이용하여 쿠버네티스 API에 쓰면, 쿠버네티스는 응용 프로그램이 배포될 때에 우리의 설정에 충족시킬 것입니다.

컨테이너는 3000번 포트로 수신 대기하고, 네이티브 서비스 디스커버리는 운영중인 컨테이너를 찾고 해당 컨테이너와 통신하는데 사용합니다.

1. NODEJS 백엔드 API 배포하기

NodeJS 백엔드 API를 올려 봅시다!

다음의 명령어를 귀하의 클라우드9 워크스페이스에 복사/붙여넣기 합니다.

cd ~/environment/ecsdemo-nodejs
kubectl apply -f kubernetes/deployment.yaml
kubectl apply -f kubernetes/service.yaml

디폴로이먼트 상황을 확인하여 배포 진행 과정을 지켜 볼 수 있습니다.

kubectl get deployment ecsdemo-nodejs

2. 크리스탈 백엔드 API 배포하기

크리스탈 백엔드 API를 올려 봅시다!

다음의 명령어를 귀하의 클라우드9 워크스페이스에 복사/붙여넣기 합니다.

cd ~/environment/ecsdemo-crystal
kubectl apply -f kubernetes/deployment.yaml
kubectl apply -f kubernetes/service.yaml

디폴로이먼트 상황을 확인하여 배포 진행 과정을 지켜 볼 수 있습니다.

kubectl get deployment ecsdemo-crystal

3. 서비스(Service) 종류 확인

프론트엔드 서비스를 올리기 전에 우리가 사용할 서비스(service) 종류를 살펴봅니다. kubernetes/service.yaml은 프론트엔드 서비스를 위한 설정입니다.

apiVersion: v1
kind: Service
metadata:
  name: ecsdemo-frontend
spec:
  selector:
    app: ecsdemo-frontend
  type: LoadBalancer
  ports:
   -  protocol: TCP
      port: 80
      targetPort: 3000

type: LoadBalancer을 주목하십시오. 이는 ELB를 설정하여 서비스로 들어오는 트래픽을 처리하게 합니다.

백엔드 서비스를 위한 kubernetes/service.yaml과 비교합니다.

apiVersion: v1
kind: Service
metadata:
  name: ecsdemo-nodejs
spec:
  selector:
    app: ecsdemo-nodejs
  ports:
   -  protocol: TCP
      port: 80
      targetPort: 3000

4. ELB 서비스 롤(Role) 확인

이전에 로드 밸런서를 생성하지 않은 AWS 계정인 경우, ELB의 서비스(service) 롤(role)이 아직 존재하지 않을 수 있습니다.

롤을 확인하고 누락된 경우에는 만듭니다.

다음의 명령어를 Cloud9 워크스페이스에 복사/붙여넣기 합니다.

aws iam get-role --role-name "AWSServiceRoleForElasticLoadBalancing" || aws iam create-service-linked-role --aws-service-name "elasticloadbalancing.amazonaws.com"

Role이 생성된 것을 확인합니다.

5. 프론트엔드 서비스 배포하기

루비 프론트엔드를 올려 봅시다!

다음의 명령어를 귀하의 Cloud9 워크스페이스에 복사/붙여넣기 합니다.

cd ~/environment/ecsdemo-frontend
kubectl apply -f kubernetes/deployment.yaml
kubectl apply -f kubernetes/service.yaml

디폴로이먼트 상황을 확인하여 배포 진행 과정을 지켜 볼 수 있습니다.

kubectl get deployment ecsdemo-frontend

6. 서비스(Service) 주소 찾기

이제type : LoadBalancer로 실행중인 서비스(service)가 있으니, ELB의 주소를 확인해야 합니다. 이를 위해 kubectl로 get services 하면 됩니다.

kubectl get service ecsdemo-frontend

위 명령어 출력 ELB의 FQDN을 보여줄 만큼 필드가 길지 않은 경우, 아래 명령으로 출력 형식을 조정할 수 있습니다.

kubectl get service ecsdemo-frontend -o wide

이 데이터를 프로그램적으로 사용하기 원한다면, json 형식으로 출력할 수 있습니다. 다음은 json 출력을 사용하는 예제 입니다.

ELB=$(kubectl get service ecsdemo-frontend -o json | jq -r '.status.loadBalancer.ingress[].hostname')

curl -m3 -v $ELB

ELB가 준비되고 트래픽을 프론트엔드 파드로 전송하기까지는 몇십초가 걸립니다.

loadBalancer 호스트네임을 웹 브라우저에 카피/붙여넣기해서 애플리케이션이 실행중인지 확인합니다. 다음 페이지에서 서비스를 스케일 업할 때까지 이 탭을 그대로 열어둡니다.

Previous마이크로서비스 배포Next서비스 스케일(Scaling)

Last updated 3 years ago

Was this helpful?

프론트엔드와는 달리 특정 서비스 종류를 설정하지 않았습니다. 에 따르면 기본 서비스 종류는 ClusterIP 입니다. 이는 클러스터 내부 IP를 서비스로 노출하며 이 값을 선택하면 클러스터 내부에서만 해당 서비스에 접근할 수 있습니다.

쿠버네티스 공식 문서