Skip to content

feat: EKS 배포용 K8s 매니페스트 전체 구성#9

Open
suhyenim wants to merge 2 commits intodevelopfrom
feat/#8
Open

feat: EKS 배포용 K8s 매니페스트 전체 구성#9
suhyenim wants to merge 2 commits intodevelopfrom
feat/#8

Conversation

@suhyenim
Copy link
Copy Markdown

@suhyenim suhyenim commented Apr 3, 2026

Summary

OpenTraum 마이크로서비스 플랫폼(7개 앱 + 3개 인프라)을 EKS 클러스터에 배포하기 위한 K8s 매니페스트를 전면 구성합니다.

주요 변경:

  • PostgreSQL, Redis, Kafka(KRaft) 인프라를 인클러스터로 배포
  • 모든 이미지를 Harbor 프라이빗 레지스트리로 전환
  • Gateway 라우팅을 ConfigMap 환경변수로 오버라이드하여 admin API 경로 누락 해결
  • Ingress를 nip.io host 기반으로 재설계하여 Grafana Ingress 충돌 해결
  • Pod Affinity, TopologySpread, SecurityContext, PDB 등 K8s 운영 최적화 적용
  • k8s/secrets.yml.gitignore에 추가하여 비밀번호 유출 방지

Changes

신규 파일 (11개)

파일 설명
k8s/postgres/statefulset.yml PostgreSQL 16-alpine StatefulSet. EBS PVC 5Gi, pg_isready probe, AZ-b nodeAffinity + 인프라 podAffinity
k8s/postgres/service.yml ClusterIP opentraum-postgres:5432
k8s/postgres/init-db-configmap.yml 5개 DB 자동 생성 스크립트 (Alpine 호환, LC_COLLATE 제거)
k8s/redis/deployment.yml Redis 7-alpine, --maxmemory 128mb --allkeys-lru --appendonly yes, 인프라 podAffinity
k8s/redis/service.yml ClusterIP opentraum-redis:6379
k8s/kafka/statefulset.yml Apache Kafka 3.7.0 KRaft (Zookeeper 없음), EBS PVC 5Gi, CLUSTER_ID 고정
k8s/kafka/service.yml ClusterIP opentraum-kafka:9092
k8s/web/deployment.yml Vue 3 SPA + nginx, Harbor 이미지, imagePullSecrets, port 80
k8s/web/service.yml ClusterIP web:80
k8s/secrets.yml DB/JWT Secret (.gitignore 처리, 원격 미포함)
k8s/pdb.yml PodDisruptionBudget — gateway, postgres, kafka maxUnavailable: 0

수정 파일 (8개)

파일 주요 변경
.gitignore k8s/secrets.yml 추가
k8s/configmap.yml DB_HOST, REDIS_HOST, KAFKA_BOOTSTRAP_SERVERS 추가. Gateway 라우팅 5개 경로 환경변수 오버라이드 (/api/v1/admin/** 포함)
k8s/ingress.yml host: opentraum.52.79.80.47.nip.io, rewrite-target 제거, /api→gateway + /→web 듀얼 path, proxy-read-timeout: 300
k8s/gateway/deployment.yml Harbor 이미지, imagePullSecrets, secretRef, JAVA_TOOL_OPTIONS, topologySpreadConstraints, securityContext, terminationGracePeriodSeconds: 35, 리소스 256Mi/150m → 512Mi/500m
k8s/auth-service/deployment.yml 동일 패턴 + SPRING_R2DBC_URL: r2dbc:postgresql://opentraum-postgres:5432/opentraum_auth, DB_NAME
k8s/user-service/deployment.yml 동일 (opentraum_user)
k8s/event-service/deployment.yml 동일 (opentraum_event)
k8s/reservation-service/deployment.yml 동일 + podAffinity event-service 선호 (weight:80), JAVA_OPTS 오버라이드, Git SHA 태그 cfb2847
k8s/payment-service/deployment.yml 동일 + JAVA_OPTS 오버라이드

설계 결정 및 근거

결정 근거
PostgreSQL 인클러스터 배포 기존 공유 RDS는 MariaDB, 앱은 R2DBC PostgreSQL → 드라이버 호환 불가
Kafka KRaft Zookeeper 256-512Mi 절약. bitnami/kafka:3.7 Docker Hub 삭제 → apache/kafka:3.7.0
nip.io Ingress host Grafana Ingress host:* + path:/ 충돌 회피
ConfigMap Gateway 라우팅 오버라이드 prod 프로필에 /api/v1/admin/events/** 누락 → 이미지 리빌드 없이 즉시 반영
SPRING_R2DBC_URL 직접 주입 일부 서비스에 prod 프로필 없거나 localhost 하드코딩
Git SHA 이미지 태그 latestimagePullPolicy: IfNotPresent에서 캐시되어 새 이미지 미반영
secrets.yml gitignore 개발용 기본값이지만 평문 비밀번호 원격 유출 방지

Test plan

  • 전체 11 pods Running & Ready
  • PostgreSQL 5개 DB 존재 확인
  • Redis PONG, Kafka TCP 9092 정상
  • 회원가입 → 로그인 → JWT 발급 → 인증 API 접근 → 로그아웃 → 토큰 블랙리스트 차단
  • Admin API (/admin/events, /admin/venues) 200 응답
  • Web 프론트엔드: http://opentraum.52.79.80.47.nip.io/ 200

@suhyenim suhyenim requested review from mrangjw and sebeeeen April 3, 2026 10:47
@suhyenim suhyenim self-assigned this Apr 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant