GitOps 개요
개요
Lumie 플랫폼은 GitOps 방법론을 채택하여 인프라와 애플리케이션의 배포를 자동화합니다. Git 저장소를 단일 진실 공급원(Single Source of Truth)으로 사용하여 선언적 배포와 지속적 동기화를 구현합니다.
GitOps 아키텍처
핵심 구성요소
1. ArgoCD - GitOps 배포 엔진
- 역할: Git 저장소와 Kubernetes 클러스터 간 동기화
- 기능:
- 자동 배포 및 롤백
- 드리프트 감지 및 자동 복구 (
selfHeal: true) - App-of-Apps 패턴으로 다중 애플리케이션 관리
- 접근: Teleport를 통한 보안 접근, Gitea 웹훅용 외부 엔드포인트
2. Tekton - 클라우드 네이티브 CI/CD
- 역할: 컨테이너 이미지 빌드 및 배포 파이프라인
- 기능:
- Gitea 웹훅 기반 자동 빌드 (
X-Gitea-Event헤더로 필터링) - 다양한 애플리케이션 타입 지원 (Spring Boot, Next.js, FastAPI)
- Kaniko를 통한 컨테이너 이미지 빌드
- 빌드 성공 후
lumie-infracommon-values.yaml이미지 태그 자동 커밋 (author:Tekton CI)
- Gitea 웹훅 기반 자동 빌드 (
- 구성요소: Pipeline, Triggers, Dashboard
3. Zot - OCI 컨테이너 레지스트리
- 역할: 컨테이너 이미지 저장 및 배포
- 기능:
- 온디맨드 외부 레지스트리 동기화
- S3 (MinIO) 백엔드 스토리지
- 자동 가비지 컬렉션
- 이미지 보존 정책
- 지원 레지스트리: Docker Hub, ghcr.io, quay.io, registry.k8s.io
GitOps 워크플로우
1. 애플리케이션 배포 워크플로우
2. 인프라 변경 워크플로우
저장소 구조
lumie-backend / lumie-frontend / lumie-worker
├── services/
│ ├── platform/ # 플랫폼 서비스
│ ├── core/ # 핵심 비즈니스 서비스
│ └── support/ # 지원 서비스
├── libs/ # 공통 라이브러리
└── Dockerfile # 컨테이너 이미지 빌드
lumie-infra (GitOps 저장소)
├── applications/ # 애플리케이션 배포 설정
│ ├── argocd/ # ArgoCD 설정
│ ├── tekton/ # Tekton 파이프라인
│ ├── lumie/
│ │ ├── backend/ # Spring Boot 모노리스 (단일 App)
│ │ ├── frontend/ # Next.js 프론트엔드
│ │ └── worker/ # FastAPI 워커 서비스
│ └── kustomization.yaml # App-of-Apps 루트
├── bootstrap/ # 부트스트랩 서비스 (minio, zot, vault, gitea)
├── platform/ # 플랫폼 컴포넌트 (cert-manager, traefik, coredns)
├── charts/
│ └── common/ # 공유 Helm 차트 (className: traefik)
├── observability/ # 모니터링 스택
├── security/ # 보안 도구
└── storage/ # 스토리지 서비스
배포 전략
1. 자동 배포 (Automated Deployment)
- 대상: 개발/스테이징 환 경
- 트리거: Git 푸시 시 자동 실행
- 정책:
prune: true- 삭제된 리소스 자동 제거selfHeal: true- 수동 변경사항 자동 복구
2. 수동 승인 (Manual Approval)
- 대상: 프로덕션 환경
- 트리거: 수동 동기화 또는 승인 후 자동
- 정책: 신중한 변경 관리
3. 롤백 전략
# Git 기반 롤백
git revert <commit-hash>
git push
# ArgoCD 기반 롤백
argocd app rollback <app-name> <revision>
보안 및 접근 제어
1. 인증 및 권한
- ArgoCD: Authelia 통합 인증
- Tekton: ServiceAccount 기반 RBAC
- Zot: htpasswd 인증, 익명 읽기 허용
2. 시크릿 관리
- Vault 통합: 모든 시크릿은 Vault에서 중앙 관리
- VaultStaticSecret: Vault Secrets Operator를 통한 자동 동기화
- Gitea 토큰: Tekton 파이프라인용 Git 접근 (
gitea-credentialsSecret) - 레지스트리 인증: Zot 푸시/풀 권한 (
zot-registry-credentials)
3. 네트워크 보안
- 내부 접근: Teleport를 통한 보안 터널
- 외부 웹훅: 제한된 엔드포인트만 외부 노출
- TLS 암호화: Let's Encrypt 인증서 사용
모니터링 및 관찰성
1. 배포 상태 모니터링
# ArgoCD 애플리케이션 상태
kubectl get applications -n argocd
# Tekton 파이프라인 실행 상태
kubectl get pipelineruns -n tekton-pipelines
# 파드 배포 상태
kubectl get pods -n <namespace>
2. 메트릭스 수집
- ArgoCD: Prometheus 메트릭스 제공
- Tekton: 파이프라인 실행 메트릭스
- Zot: 레지스트리 사용량 메트릭스
3. 로그 집계
- Loki: 모든 GitOps 구성요소 로그 수집
- Grafana: 통합 대시보드 제공
성능 최적화
1. 리소스 관리
- 동시 빌드 제한: Tekton ResourceQuota로 제한
- 메모리 최적화: Go 런타임 메모리 제한 설정
- CPU 제한 제거: 안정성을 위한 CPU 제한 해제
2. 이미지 최적화
- 멀티 스테이지 빌드: 이미지 크기 최소화
- 레이어 캐싱: Docker 빌드 최적화
- 이미지 압축: Zot 자동 압축
3. 네트워크 최적화
- 온디맨드 동기화: 필요한 이미지만 동기화
- 로컬 캐싱: 클러스터 내 이미지 캐시
- CDN 활용: 정적 자산 배포 최적화
문제 해결
1. 일반적인 문제
동기화 실패
# ArgoCD 강제 새로고침
kubectl patch application -n argocd <app-name> \
-p '{"metadata": {"annotations": {"argocd.argoproj.io/refresh": "hard"}}}' \
--type merge
빌드 실패
# Tekton 파이프라인 로그 확인
kubectl logs -n tekton-pipelines -l tekton.dev/pipelineRun=<pipeline-run>
이미지 풀 실패
# Zot 레지스트리 상태 확인
kubectl logs -n zot deployment/zot
2. 디버깅 도구
- ArgoCD CLI: 애플리케이션 상태 및 동기화 관리
- kubectl: Kubernetes 리소스 직접 조작
- Tekton CLI: 파이프라인 실행 관리
모범 사례
1. Git 워크플로우
- 브랜치 전략: main 브랜치 기반 단순 워크플로우
- 커밋 메시지: 명확한 변경사항 설명
- PR 리뷰: 인프라 변경사항 코드 리뷰
2. 배포 관리
- 점진적 배포: 단계별 환경 배포
- 헬스 체크: 배포 후 자동 상태 확인
- 롤백 준비: 빠른 롤백을 위한 이전 버전 유지
3. 보안 관리
- 최소 권한: 필요한 최소 권한만 부여
- 시크릿 로테이션: 정기적인 시크릿 갱신
- 감사 로그: 모든 변경사항 추적