hiondal 3afee053d0 Kustomize commonLabels 제거 및 API 토큰 추가
- Deployment selector 불변성 에러 해결을 위해 commonLabels 제거
- base/kustomization.yaml: app.kubernetes.io/managed-by, app.kubernetes.io/part-of 레이블 제거
- overlays/dev/kustomization.yaml: environment 레이블 제거
- content-service: Replicate API 토큰 추가
2025-10-30 09:35:17 +09:00
..

KT Event Marketing - CI/CD Infrastructure

이 디렉토리는 KT Event Marketing 백엔드 서비스의 CI/CD 인프라를 포함합니다.

디렉토리 구조

.github/
├── README.md                          # 이 파일
├── workflows/
│   └── backend-cicd.yaml             # GitHub Actions 워크플로우
├── kustomize/                         # Kubernetes 매니페스트 관리
│   ├── base/                         # 기본 리소스 정의
│   │   ├── kustomization.yaml
│   │   ├── cm-common.yaml
│   │   ├── secret-common.yaml
│   │   ├── secret-imagepull.yaml
│   │   ├── ingress.yaml
│   │   └── {service}-*.yaml         # 각 서비스별 리소스
│   └── overlays/                     # 환경별 설정
│       ├── dev/
│       │   ├── kustomization.yaml
│       │   └── *-patch.yaml         # 1 replica, 256Mi-1024Mi
│       ├── staging/
│       │   ├── kustomization.yaml
│       │   └── *-patch.yaml         # 2 replicas, 512Mi-2048Mi
│       └── prod/
│           ├── kustomization.yaml
│           └── *-patch.yaml         # 3 replicas, 1024Mi-4096Mi
├── config/
│   ├── deploy_env_vars_dev          # Dev 환경 변수
│   ├── deploy_env_vars_staging      # Staging 환경 변수
│   └── deploy_env_vars_prod         # Prod 환경 변수
└── scripts/
    ├── deploy.sh                     # 수동 배포 스크립트
    ├── generate-patches.sh           # 패치 파일 생성 스크립트
    └── copy-manifests-to-base.py    # 매니페스트 복사 스크립트

주요 파일 설명

workflows/backend-cicd.yaml

GitHub Actions 워크플로우 정의 파일입니다.

트리거:

  • develop 브랜치 push → dev 환경 배포
  • main 브랜치 push → prod 환경 배포
  • Manual workflow dispatch → 원하는 환경과 서비스 선택

Jobs:

  1. detect-changes: 변경된 서비스 감지
  2. build-and-push: 서비스 빌드 및 ACR 푸시
  3. deploy: AKS에 배포
  4. notify: 배포 결과 알림

kustomize/base/kustomization.yaml

모든 환경에서 공통으로 사용하는 기본 리소스를 정의합니다.

포함 리소스:

  • Common ConfigMaps and Secrets
  • Ingress
  • 7개 서비스의 Deployment, Service, ConfigMap, Secret

kustomize/overlays/{env}/kustomization.yaml

환경별 설정을 오버라이드합니다.

주요 차이점:

  • 이미지 태그 (dev/staging/prod)
  • Replica 수 (1/2/3)
  • 리소스 할당량 (작음/중간/큼)

scripts/deploy.sh

로컬에서 수동 배포를 위한 스크립트입니다.

사용법:

# 모든 서비스를 dev 환경에 배포
./scripts/deploy.sh dev

# 특정 서비스만 prod 환경에 배포
./scripts/deploy.sh prod user-service

배포 프로세스

자동 배포 (GitHub Actions)

  1. Dev 환경:

    git checkout develop
    git push origin develop
    
  2. Prod 환경:

    git checkout main
    git merge develop
    git push origin main
    
  3. 수동 배포:

    • GitHub Actions UI → Run workflow
    • Environment 선택 (dev/staging/prod)
    • Service 선택 (all 또는 특정 서비스)

수동 배포 (로컬)

# 사전 요구사항: Azure CLI, kubectl, kustomize 설치
# Azure 로그인 필요

# Dev 환경에 모든 서비스 배포
./.github/scripts/deploy.sh dev

# Prod 환경에 user-service만 배포
./.github/scripts/deploy.sh prod user-service

환경별 설정

환경 브랜치 이미지 태그 Replicas CPU Request Memory Request
Dev develop dev 1 256m 256Mi
Staging manual staging 2 512m 512Mi
Prod main prod 3 1024m 1024Mi

서비스 목록

  1. user-service (8081) - 사용자 관리
  2. event-service (8082) - 이벤트 관리
  3. ai-service (8083) - AI 기반 콘텐츠 생성
  4. content-service (8084) - 콘텐츠 관리
  5. distribution-service (8085) - 경품 배포
  6. participation-service (8086) - 이벤트 참여
  7. analytics-service (8087) - 분석 및 통계

모니터링

Pod 상태 확인

kubectl get pods -n kt-event-marketing

로그 확인

# 실시간 로그
kubectl logs -n kt-event-marketing -l app=user-service -f

# 이전 컨테이너 로그
kubectl logs -n kt-event-marketing <pod-name> --previous

리소스 사용량

# Pod 리소스
kubectl top pods -n kt-event-marketing

# Node 리소스
kubectl top nodes

트러블슈팅

상세한 트러블슈팅 가이드는 deployment/cicd/CICD-GUIDE.md를 참조하세요.

주요 문제 해결:

  • ImagePullBackOff → ACR Secret 확인
  • CrashLoopBackOff → 로그 확인 및 환경 변수 검증
  • Readiness Probe Failed → Context Path 및 Actuator 경로 확인

롤백

# 이전 버전으로 롤백
kubectl rollout undo deployment/user-service -n kt-event-marketing

# 특정 리비전으로 롤백
kubectl rollout undo deployment/user-service --to-revision=2 -n kt-event-marketing

참고 자료