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. 보안 관리
- 최소 권한: 필요한 최소 권한만 부여
- 시크릿 로테이션: 정기적인 시크릿 갱신
- 감사 로그: 모든 변경사항 추적