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
git clone https://github.com/SF-DeeFacto/proj-gitops.git
cd proj-gitops각 서비스별 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# 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 # 새로운 태그로 변경각 서비스는 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)
- 서비스별 특화 설정
- 코드 변경: 개발자가 애플리케이션 코드를 수정
- 이미지 빌드: CI/CD 파이프라인에서 Docker 이미지 빌드 및 ECR 푸시
- 매니페스트 업데이트: 이 저장소에서 이미지 태그 업데이트
- 자동 배포: ArgoCD가 변경사항을 감지하고 자동으로 배포
- 상태 모니터링: ArgoCD UI에서 배포 상태 확인
- ArgoCD UI: 배포 상태 및 애플리케이션 상태 모니터링
- Kubernetes Dashboard: 파드 및 서비스 상태 확인
- 애플리케이션 로그: 각 서비스별 로그 수집 및 분석
- 모든 시크릿은 AWS Secrets Manager에 암호화되어 저장
- External Secrets Operator를 통한 안전한 시크릿 주입
- 네임스페이스별 리소스 격리
- RBAC를 통한 접근 권한 관리
apps/디렉토리에 새 서비스 폴더 생성base/디렉토리에 기본 매니페스트 작성overlays/dev/디렉토리에 개발 환경 설정 추가argocd/디렉토리에 ArgoCD 애플리케이션 정의 추가
- 환경별 설정:
overlays/dev/application-dev.yml수정 - 시크릿 추가:
external-secret.yaml에 새 시크릿 키 추가 - 리소스 수정:
base/디렉토리의 매니페스트 수정
- 이 저장소를 포크합니다
- 새로운 기능 브랜치를 생성합니다 (
git checkout -b feature/amazing-feature) - 변경사항을 커밋합니다 (
git commit -m 'Add some amazing feature') - 브랜치에 푸시합니다 (
git push origin feature/amazing-feature) - Pull Request를 생성합니다
문제가 발생하거나 질문이 있으시면 다음을 통해 연락해주세요:
- GitHub Issues: 이슈 생성
- 팀 내부 Slack 채널
- 이메일: dev-team@deefacto.com
이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
DeeFacto Development Team 🚀