Skip to content

SF-DeeFacto/proj-gitops

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

123 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

proj-gitops

ArgoCD와 Kustomize를 활용한 GitOps 기반 Kubernetes 배포 저장소입니다.

📋 개요

이 저장소는 DeeFacto 프로젝트의 마이크로서비스들을 Kubernetes 클러스터에 배포하기 위한 GitOps 파이프라인을 제공합니다. ArgoCD를 통해 자동화된 배포와 Kustomize를 통한 환경별 설정 관리를 지원합니다.

🏗️ 아키텍처

proj-gitops/
├── apps/                          # 애플리케이션별 Kustomize 매니페스트
│   ├── ai_service/               # AI 서비스
│   ├── alim-service/             # 알림 서비스
│   ├── api-gateway/              # API 게이트웨이
│   ├── dash-service/             # 대시보드 서비스
│   └── user-service/             # 사용자 서비스
│       ├── base/                 # 기본 매니페스트
│       │   ├── deployment.yaml
│       │   ├── service.yaml
│       │   └── kustomization.yaml
│       └── overlays/             # 환경별 오버레이
│           └── dev/              # 개발 환경
│               ├── kustomization.yaml
│               ├── application-dev.yml
│               ├── external-secret.yaml
│               ├── secretstore.yaml
│               └── namespace.yaml
└── argocd/                       # ArgoCD 애플리케이션 정의
    ├── ai-service-dev.yaml
    ├── alim-service-dev.yaml
    ├── api-gateway-dev.yaml
    ├── dash-service-dev.yaml
    └── user-service-dev.yaml

🚀 주요 기능

  • GitOps 기반 배포: ArgoCD를 통한 자동화된 배포 파이프라인
  • 환경별 설정 관리: Kustomize를 활용한 개발/스테이징/프로덕션 환경 분리
  • 시크릿 관리: External Secrets Operator를 통한 AWS Secrets Manager 연동
  • 마이크로서비스 아키텍처: 각 서비스별 독립적인 배포 및 관리
  • 자동 동기화: Git 저장소 변경사항의 자동 감지 및 배포

📦 포함된 서비스

서비스 네임스페이스 설명
ai-service ai AI 기능을 제공하는 백엔드 서비스
alim-service alim 알림 및 메시징 서비스
api-gateway api API 게이트웨이 및 라우팅 서비스
dash-service dash 대시보드 및 모니터링 서비스
user-service user 사용자 관리 및 인증 서비스

🛠️ 기술 스택

  • Kubernetes: 컨테이너 오케스트레이션
  • ArgoCD: GitOps 기반 지속적 배포
  • Kustomize: Kubernetes 매니페스트 관리
  • External Secrets Operator: 시크릿 관리
  • AWS ECR: 컨테이너 이미지 저장소
  • AWS Secrets Manager: 시크릿 저장소

📋 사전 요구사항

  • Kubernetes 클러스터 (v1.20+)
  • ArgoCD 설치 및 구성
  • External Secrets Operator 설치
  • AWS Secrets Manager 접근 권한
  • kubectl 및 kustomize CLI

🚀 시작하기

1. 저장소 클론

git clone https://github.com/SF-DeeFacto/proj-gitops.git
cd proj-gitops

2. ArgoCD 애플리케이션 배포

각 서비스별 ArgoCD 애플리케이션을 배포합니다:

# AI 서비스
kubectl apply -f argocd/ai-service-dev.yaml

# 알림 서비스
kubectl apply -f argocd/alim-service-dev.yaml

# API 게이트웨이
kubectl apply -f argocd/api-gateway-dev.yaml

# 대시보드 서비스
kubectl apply -f argocd/dash-service-dev.yaml

# 사용자 서비스
kubectl apply -f argocd/user-service-dev.yaml

3. 배포 상태 확인

# ArgoCD 애플리케이션 상태 확인
kubectl get applications -n argocd

# 특정 서비스 상태 확인
kubectl get pods -n <namespace>

🔧 설정 관리

환경별 설정

각 서비스는 overlays/dev/ 디렉토리에서 개발 환경별 설정을 관리합니다:

  • kustomization.yaml: Kustomize 설정 및 이미지 태그
  • application-dev.yml: Spring Boot 애플리케이션 설정
  • external-secret.yaml: AWS Secrets Manager 연동 설정
  • secretstore.yaml: External Secrets Operator 설정

이미지 태그 업데이트

새로운 이미지 배포 시 overlays/dev/kustomization.yaml에서 이미지 태그를 업데이트합니다:

images:
  - name: 957143340841.dkr.ecr.ap-northeast-2.amazonaws.com/deefacto-ecr-docker-image
    newTag: ai_service-v1.0.21  # 새로운 태그로 변경

🔐 시크릿 관리

AWS Secrets Manager 연동

각 서비스는 External Secrets Operator를 통해 AWS Secrets Manager에서 시크릿을 가져옵니다:

# external-secret.yaml 예시
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: ai-service-env
spec:
  refreshInterval: 1m
  secretStoreRef:
    name: aws-sm-dev
    kind: SecretStore
  target:
    name: ai-service-env
  data:
    - secretKey: DB_PASSWORD
      remoteRef: 
        key: deefacto/dev/ai-service
        property: DB_PASSWORD

필요한 시크릿

각 서비스별로 다음 시크릿들이 AWS Secrets Manager에 저장되어야 합니다:

  • 데이터베이스 연결 정보 (DB_HOST, DB_PORT, DB_NAME, DB_USERNAME, DB_PASSWORD)
  • Redis 연결 정보 (REDIS_HOST, REDIS_PORT)
  • AWS 자격 증명 (AWS_ACCESS_KEY, AWS_SECRET_KEY, AWS_REGION)
  • 서비스별 특화 설정

🔄 배포 워크플로우

  1. 코드 변경: 개발자가 애플리케이션 코드를 수정
  2. 이미지 빌드: CI/CD 파이프라인에서 Docker 이미지 빌드 및 ECR 푸시
  3. 매니페스트 업데이트: 이 저장소에서 이미지 태그 업데이트
  4. 자동 배포: ArgoCD가 변경사항을 감지하고 자동으로 배포
  5. 상태 모니터링: ArgoCD UI에서 배포 상태 확인

📊 모니터링 및 로깅

  • ArgoCD UI: 배포 상태 및 애플리케이션 상태 모니터링
  • Kubernetes Dashboard: 파드 및 서비스 상태 확인
  • 애플리케이션 로그: 각 서비스별 로그 수집 및 분석

🛡️ 보안 고려사항

  • 모든 시크릿은 AWS Secrets Manager에 암호화되어 저장
  • External Secrets Operator를 통한 안전한 시크릿 주입
  • 네임스페이스별 리소스 격리
  • RBAC를 통한 접근 권한 관리

📝 개발 가이드

새로운 서비스 추가

  1. apps/ 디렉토리에 새 서비스 폴더 생성
  2. base/ 디렉토리에 기본 매니페스트 작성
  3. overlays/dev/ 디렉토리에 개발 환경 설정 추가
  4. argocd/ 디렉토리에 ArgoCD 애플리케이션 정의 추가

설정 변경

  • 환경별 설정: overlays/dev/application-dev.yml 수정
  • 시크릿 추가: external-secret.yaml에 새 시크릿 키 추가
  • 리소스 수정: base/ 디렉토리의 매니페스트 수정

🤝 기여하기

  1. 이 저장소를 포크합니다
  2. 새로운 기능 브랜치를 생성합니다 (git checkout -b feature/amazing-feature)
  3. 변경사항을 커밋합니다 (git commit -m 'Add some amazing feature')
  4. 브랜치에 푸시합니다 (git push origin feature/amazing-feature)
  5. Pull Request를 생성합니다

📞 지원

문제가 발생하거나 질문이 있으시면 다음을 통해 연락해주세요:

📄 라이선스

이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.


DeeFacto Development Team 🚀

About

매니페스트/Helm

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors