AWS EKS에 Public ECR 이미지 배포하기

김남우 ·2025년 2월 28일
0

AWS

목록 보기
6/13
post-thumbnail

🏹 AWS EKS에 Public ECR 이미지를 배포하는 방법


🛠️ 1. 개념 이해

🏕️ EKS란?

  • EKS(Amazon Elastic Kubernetes Service)는 AWS에서 제공하는 Kubernetes 관리 서비스
  • "컨테이너를 AWS에서 쉽게 운영할 수 있도록 해주는 도구"

🔥 ECR이란?

  • ECR(Amazon Elastic Container Registry)은 AWS에서 제공하는 Docker 이미지 저장소
  • Public ECR은 로그인 없이도 이미지를 다운로드(pull)할 수 있는 저장소

🚀 2. 준비물

배포하려면 다음 도구가 필요함:

  • AWS 계정 (EKS, ECR 사용 가능해야 함)
  • Docker (컨테이너 이미지 빌드 & 푸시)
  • kubectl (Kubernetes 클러스터 관리)
  • AWS CLI (ECR, EKS와 연동)

📦 3. Public ECR에 Docker 이미지 업로드

🔹 (1) AWS Public ECR 로그인

aws ecr-public get-login-password --region us-east-1 | \
docker login --username AWS --password-stdin public.ecr.aws

Login Succeeded가 나오면 성공

🔹 (2) Docker 이미지 빌드

docker build -t backend:latest .
docker build -t frontend:latest .
docker build -t database:latest .

Dockerfile이 있는 폴더에서 실행해야 함

🔹 (3) Public ECR 태깅 (이미지에 주소 붙이기)

docker tag backend:latest public.ecr.aws/<ECR_ID>/project-name/backend:latest
docker tag frontend:latest public.ecr.aws/<ECR_ID>/project-name/frontend:latest
docker tag database:latest public.ecr.aws/<ECR_ID>/project-name/database:latest

✅ 태그를 AWS Public ECR 주소로 변경

🔹 (4) Public ECR에 푸시 (올리기)

docker push public.ecr.aws/<ECR_ID>/project-name/backend:latest
docker push public.ecr.aws/<ECR_ID>/project-name/frontend:latest
docker push public.ecr.aws/<ECR_ID>/project-name/database:latest

✅ 푸시가 끝나면 ECR에서 확인 가능


🏗️ 4. AWS EKS 클러스터 준비

🔹 (1) EKS 클러스터 생성

eksctl create cluster --name my-cluster --region <AWS_REGION> --nodegroup-name my-nodes --node-type t3.medium --nodes 2

✅ EKS 클러스터를 생성 (약 10~15분 소요)

🔹 (2) 클러스터 연결 확인

aws eks update-kubeconfig --region <AWS_REGION> --name my-cluster
kubectl get nodes

✅ 정상적으로 노드(Node)가 보이면 연결 완료


📝 5. Kubernetes 배포 파일 작성 (eks.yaml)

다음 YAML 파일을 만들고 Public ECR 이미지를 사용하도록 수정해야 함.

# Backend Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
      - name: backend
        image: public.ecr.aws/<ECR_ID>/project-name/backend:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8000
        env:
        - name: MONGO_URL
          value: "mongodb://mongo-service:27017/"

imagePullPolicy: Always항상 최신 이미지를 가져오도록 설정


🚀 6. Kubernetes 클러스터에 배포

kubectl apply -f eks.yaml

✅ EKS 클러스터에 배포 시작

🔹 (1) 배포된 서비스 확인

kubectl get deployments
kubectl get pods
kubectl get services

backend, frontend, database 등의 서비스가 정상적으로 실행 중인지 확인


🔍 7. 배포된 서비스 확인

🔹 (1) 프론트엔드 LoadBalancer 주소 확인

kubectl get svc frontend-service

출력 예시:

NAME               TYPE           CLUSTER-IP       EXTERNAL-IP                          PORT(S)        AGE
frontend-service   LoadBalancer   10.100.200.134   abc123.elb.amazonaws.com            8501:32111/TCP 5m

브라우저에서 http://abc123.elb.amazonaws.com:8501 로 접속

🔹 (2) 백엔드 로그 확인

kubectl logs -l app=backend

✅ 백엔드 서비스가 정상 작동하는지 확인


🛠️ 8. 데이터 삽입 Job 확인

🔹 (1) Job 실행 로그 확인

kubectl logs job/insert-data

데이터 삽입 성공 메시지 확인

🔹 (2) Job 완료 상태 확인

kubectl get jobs

출력 예시:

NAME           COMPLETIONS   DURATION   AGE
insert-data    1/1           10s        2m

COMPLETIONS1/1이면 정상 완료


🎯 9. 추가 작업 (운영 및 업데이트)

🔹 (1) 스케일 조정

kubectl scale deployment/backend --replicas=3

✅ 백엔드 서버를 3개로 늘림

🔹 (2) 롤링 업데이트

# 최신 버전 이미지로 업데이트 후 재배포
kubectl set image deployment/backend backend=public.ecr.aws/<ECR_ID>/project-name/backend:v2

다운타임 없이 새로운 버전 배포


🎉 10. 마무리

오늘 배운 것

  • AWS Public ECR에 이미지 푸시
  • AWS EKS 클러스터 생성 및 배포
  • Frontend, Backend, Database를 포함한 3-Tier 아키텍처 배포
  • Kubernetes에서 서비스 확인 및 로그 분석
  • 자동 확장 & 롤링 업데이트
profile
✨A.I로 0에서 1을 만드는 법✨ - woo;D

0개의 댓글