본문으로 건너뛰기

Day 5 - EKS 배포 · E2E

Terraform → Spring → GitHub → Argo CD → EKS 전체 흐름 검증

목차


학습 목표

  • 전체 파이프라인을 한 번 끝까지 수행한다
  • 배포 실패 시 어느 구간인지 좁힌다
  • 실습 리소스를 안전하게 정리한다

E2E 시나리오

수행 순서

  1. Infra (Day 1): terraform apply · kubectl get nodes
  2. App (Day 2): 코드·Dockerfile 준비
  3. CI (Day 3): Secrets/Variables 설정 후 main push
  4. CD (Day 4): Argo CD Application Synced
  5. Verify: Pod Ready · HTTP 200 · 이전 버전 롤백 1회
# 배포 상태
kubectl -n spring-demo get pods -o wide
kubectl -n spring-demo describe deploy spring-demo
kubectl -n spring-demo logs -l app=spring-demo --tail=100

# 임시 포트포워드 검증
kubectl -n spring-demo port-forward svc/spring-demo 8080:80
curl -s http://localhost:8080/
curl -s http://localhost:8080/actuator/health

접속 · 노출

방식용도
port-forward실습·디버그
Service type LoadBalancer빠른 외부 노출 (비용 주의)
ALB Ingress Controller실무형 HTTP 라우팅

Ingress 스케치:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: spring-demo
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: spring-demo
port:
number: 80

ALB Controller · IRSA는 Terraform으로 함께 관리하는 것이 이상적입니다.


관측 · 로그

영역도구 예
메트릭CloudWatch Container Insights, Prometheus
로그CloudWatch Logs, Fluent Bit
트레이스(선택) OpenTelemetry
CD 상태Argo CD UI · argocd app get

최소 실습: kubectl logs + Actions 로그 + Argo 이벤트.

kubectl -n argocd get events --sort-by='.lastTimestamp' | tail
argocd app get spring-demo

장애 대응 플레이북

증상의심 구간확인
PR 테스트 실패App / CIActions log, 로컬 ./gradlew test
ECR push 거부IAM OIDC / 정책Role trust, ECR policy
ImagePullBackOffECR / 태그 / 노드 권한이미지 존재, node IAM
CrashLoopBackOff앱 설정logs, probe path, env
Argo OutOfSyncGitOps 경로path, branch, credentials
Synced but UnhealthyK8s 리소스describe, events

롤백:

# GitOps에서 이전 태그로 revert 후 push
# 또는
argocd app rollback spring-demo <history-id>

비용 정리

실습 종료 시 순서 예:

  1. Argo Application 삭제 (또는 prune)
  2. LoadBalancer / Ingress 잔여 확인
  3. terraform destroy (EKS · 노드 · VPC · ECR 정책에 따라 ECR 이미지 별도 삭제)
# 남은 LB 확인
kubectl get svc -A | grep LoadBalancer
aws elbv2 describe-load-balancers --query 'LoadBalancers[].LoadBalancerName'

terraform destroy

최종 체크리스트

파이프라인

  • Terraform으로 EKS · ECR · OIDC 생성
  • Spring 이미지 CI 빌드·푸시
  • GitOps 태그 자동 커밋
  • Argo CD Synced + Healthy
  • HTTP 헬스 체크 성공
  • 롤백 1회 성공

이해도 (설명 가능해야 함)

  • 왜 CI가 클러스터에 직접 apply하지 않는가
  • 이미지 태그와 Git 커밋의 관계
  • EKS 노드가 ECR pull 하는 권한 경로
  • selfHeal / prune 의미

관련 문서

그래프 뷰

그래프 데이터 로딩 중…
현재: Day 5 - EKS 배포 · E2E
노드 클릭 → 이동 · 드래그 → 위치 조정