[CL] 6단계: Kubernetes(AWS ECS or EKS)기반 배포 자동화 - 100-hours-a-week/6-nemo-wiki GitHub Wiki
📦 6단계: Kubernetes(EKS) 기반 배포 자동화 설계
✅ 도입 배경 및 필요성 (Why)
쿠버네티스는 현대 애플리케이션 배포에서 사실상 표준 오케스트레이션 플랫폼으로 자리잡았습니다. 기존 kubeadm 기반의 수동 클러스터 운영은 초기 학습에는 유리하지만, 다음과 같은 한계를 지니고 있었습니다:
- 제어 플레인의 고가용성 보장 미흡
- 버전 관리, 인증, 보안 등을 사용자가 직접 구성해야 함
- 노드 오토스케일링과 같은 자동화 기능 부재
- 서비스 확장 시 운영 복잡도 급증
이에 따라 본 프로젝트는 AWS EKS를 도입하여 관리형 쿠버네티스 환경으로 전환하고, 보다 안정적이고 자동화된 배포 체계를 구축하고자 합니다.
⚙️ 시스템 구조 아키텍처 (Architecture Overview)
text
복사편집
[사용자 브라우저]
↓ HTTPS (Route 53 + ACM)
[ALB (AWS ALB Ingress Controller)]
↓ 경로 기반 라우팅
[Ingress Controller Pod (Public Subnet)]
↓
────────────────────────────────────
| Namespace: frontend |
| → frontend-service (ClusterIP) |
| → Next.js Pods (Deployment) |
| Namespace: backend |
| → backend-service (ClusterIP) |
| → Spring Boot Pods (Deployment) |
| Namespace: ai |
| → FastAPI Pods + ChromaDB |
────────────────────────────────────
↓
[MySQL, Redis (StatefulSet + PVC)]
- Ingress Controller: ALB 기반 (퍼블릭) + NGINX 기반 (프라이빗) 선택적 병행 구성
- Namespace 분리 전략: 서비스 단위 (frontend, backend, ai 등)
- 스토리지 구성: StatefulSet + EBS 기반 PVC 구성
- 배포 방식: GitHub Actions + Helm + ArgoCD 기반 GitOps 자동화
🧩 주요 기술 명세
항목 | 설정 내용 |
---|---|
클러스터 유형 | AWS EKS (Managed Control Plane) |
노드 그룹 | Managed Node Group (EC2 기반) |
네트워크 | VPC + 퍼블릭/프라이빗 서브넷 |
Ingress | ALB Ingress Controller (공용), NGINX Ingress (내부용) |
배포 방식 | GitOps (ArgoCD), CI: GitHub Actions |
컨테이너 레지스트리 | Amazon ECR |
모니터링 (선택) | Prometheus, Grafana |
📁 예시 리소스 정의
yaml
복사편집
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-deployment
namespace: backend
spec:
replicas: 2
selector:
matchLabels:
app: spring
template:
metadata:
labels:
app: spring
spec:
containers:
- name: spring
image: 084375578827.dkr.ecr.ap-northeast-2.amazonaws.com/my-app-backend:latest
ports:
- containerPort: 8080
yaml
복사편집
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: backend-ingress
namespace: backend
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/group.name: backend-ingress-group
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 8080
🔍 운영 기대 효과
기능 | 개선 내용 |
---|---|
가용성 | 제어 플레인의 고가용성, AWS SLA 적용 |
배포 자동화 | GitOps 기반 ArgoCD 적용 |
인증 보안 | IAM 역할 기반 접근 (IRSA) |
오토스케일링 | Horizontal Pod Autoscaler + Managed Node Group |
트래픽 처리 | ALB + 경로 기반 라우팅 |
📝 추가 고려사항
- Karpenter 도입 여부 (노드 자동 생성)
- ExternalDNS + Route53 자동 연동
- NetworkPolicy 구성 통한 내부 보안 강화
- Multi-AZ 구성을 통한 HA 확장