[GitOps] 패턴: 단일 vs 다중 repo, environment promotion
GitOps patterns, monorepo manifests, environment promotion, image updater, Renovate
GitOps 4가지 원칙 (OpenGitOps)
- Declarative: 시스템 원하는 상태 가 선언적 (YAML).
- Versioned and Immutable: Git 으로 버전 + 불변.
- Pulled Automatically: 시스템이 자동 fetch + apply.
- Continuously Reconciled: 지속적 desired vs actual 비교 + 수정.
Repo 구조 패턴
flowchart TD
Q{Repo 구조}
Q --> Mono[Monorepo<br/>app + manifest 함께]
Q --> Two[2-repo<br/>app code / manifest 분리]
Q --> Multi[Multi-repo<br/>app / manifest / infra 각자]
1. Monorepo (app + manifest)
my-repo/
├── src/ (app code)
├── k8s/ (manifest)
└── .github/workflows/
장점: 단순. 단점: app PR 이 인프라 변경 동시 일으킴 → 위험.
2. 2-repo (권장)
app-repo/
├── src/
└── .github/workflows/
└── build.yml (image push to ECR)
manifest-repo/
├── apps/
│ └── web/
│ └── deployment.yaml (image: ...:abc123)
└── argocd/
└── applications.yaml
CI 가 새 image → manifest repo 의 yaml 의 image tag 자동 update → ArgoCD 가 cluster 동기화.
3. Multi-repo
각 app, 각 component, 각 cluster 별 repo. 큰 조직.
Environment Promotion
flowchart LR
Dev[dev branch] -->|PR| Stage[stage branch]
Stage -->|PR| Prod[prod branch]
Argo_Dev[ArgoCD dev cluster] -.watch.-> Dev
Argo_Stage -.watch.-> Stage
Argo_Prod -.watch.-> Prod
또는 디렉토리 분리:
manifests/
├── overlays/
│ ├── dev/ → dev cluster
│ ├── stage/ → stage cluster
│ └── prod/ → prod cluster
└── base/ → 공통
Kustomize + ArgoCD app 별 path 분리.
Image Updater
flowchart LR
CI -->|push| Registry[(Container Registry)]
Updater[ArgoCD Image Updater<br/>또는 Renovate] -.poll.-> Registry
Updater -->|PR / commit| Manifest[manifest repo]
Argo -->|sync| Cluster
| 도구 | 의미 |
|---|---|
| ArgoCD Image Updater | tag 정책 기반 자동 |
| Renovate | dependency 갱신 PR |
| Flux Image Automation | Flux 내장 |
Secret 처리 (git 안전)
flowchart TD
Q[Secret 처리]
Q --> Sealed[Sealed Secrets]
Q --> ESO[External Secrets Operator]
Q --> SOPS[SOPS + KMS]
Q --> Vault[Vault Agent / CSI]
자세한 건 k8s-configmap-secret.
Multi-cluster GitOps
flowchart LR
Git[Manifest repo]
Git --> Argo1[ArgoCD on cluster-dev]
Git --> Argo2[ArgoCD on cluster-prod-us]
Git --> Argo3[ArgoCD on cluster-prod-eu]
Argo1 --> ClusterDev
Argo2 --> ProdUS
Argo3 --> ProdEU
또는 중앙 ArgoCD + 다중 cluster credential:
apiVersion: v1
kind: Secret
type: stringData:
name: prod-us-cluster
server: https://k8s.prod-us.example.com
config: |
{ "bearerToken": "..." }
Drift Detection
| 상황 | ArgoCD 동작 |
|---|---|
수동 kubectl edit | Out of Sync 표시 + selfHeal 시 자동 복구 |
| Git update | Sync 트리거 |
| Image tag 변경 | Image Updater 가 manifest commit |
흔한 함정
WARNING
- 수동 hotfix = git 우회. 항상 git 으로.
- Branch 정책 부재 = main 직접 push. PR + 리뷰 + branch protection.
- 모든 cluster 같은 manifest = 환경별 차이 못 표현. Kustomize / Helm values.
- 거대한 PR = ArgoCD 가 한 번에 모든 변경 적용. 작은 PR 권장.
관련 위키
이 글의 용어 (4개)
- [CI/CD] GitHub Actions: workflow, action, runnerdevops
- 정의 GitHub Actions = GitHub 내장 CI/CD. YAML workflow + marketplace action. 2018 출시 → Travis CI 대체. 구조…
- [GitOps] ArgoCD: Kubernetes GitOpsdevops
- 정의 ArgoCD = Kubernetes 의 GitOps 컨트롤러. Git 리포지토리의 manifest 가 source of truth → cluster 가 자동 동기화. Git…
- [K8s] ConfigMap & Secret: 설정과 비밀의 분리kubernetes
- 정의 | | ConfigMap | Secret | |---|---|---| | 데이터 | 평문 | base64 (암호화 아님) | | 크기 | 1MB | 1MB | | 용도 | …
- [LLM Eval] HELM: Holistic Evaluation of Language Modelsai
- 정의 HELM (Holistic Evaluation of Language Models) 는 Stanford CRFM (Center for Research on Foundation…
💬 댓글