본문으로 건너뛰기
김신건의 로그

[GitOps] 패턴: 단일 vs 다중 repo, environment promotion

· 수정 · 📖 약 1분 · 314자/단어 #gitops #argocd #flux #ci-cd #devops
GitOps patterns, monorepo manifests, environment promotion, image updater, Renovate

GitOps 4가지 원칙 (OpenGitOps)

  1. Declarative: 시스템 원하는 상태선언적 (YAML).
  2. Versioned and Immutable: Git 으로 버전 + 불변.
  3. Pulled Automatically: 시스템이 자동 fetch + apply.
  4. 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 가 새 imagemanifest 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 Updatertag 정책 기반 자동
Renovatedependency 갱신 PR
Flux Image AutomationFlux 내장

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 editOut of Sync 표시 + selfHeal 시 자동 복구
Git updateSync 트리거
Image tag 변경Image Updater 가 manifest commit

흔한 함정

WARNING

  1. 수동 hotfix = git 우회. 항상 git 으로.
  2. Branch 정책 부재 = main 직접 push. PR + 리뷰 + branch protection.
  3. 모든 cluster 같은 manifest = 환경별 차이 못 표현. Kustomize / Helm values.
  4. 거대한 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…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기