Kubernetes Tools/ArgoCD

[Ep.2] [GitOps์™€ Argo CD์˜ ๊ธฐ์ดˆ #2] GitOps์˜ ํ•ต์‹ฌ ์›์น™๊ณผ Kubernetes์—์„œ์˜ ํ™œ์šฉ๋ฒ•

ygtoken 2025. 3. 17. 12:04
728x90

๐Ÿ”น GitOps์˜ ํ•ต์‹ฌ ์›์น™

GitOps๋Š” ๋‹จ์ˆœํžˆ Git์„ ํ™œ์šฉํ•œ ๋ฐฐํฌ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ, Kubernetes์—์„œ CI/CD๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ์šด์˜ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.
GitOps ๋ฐฉ์‹์ด ํšจ๊ณผ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ 4๊ฐ€์ง€ ํ•ต์‹ฌ ์›์น™์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… 1. ์„ ์–ธ์ (Declarative) ๊ตฌ์„ฑ

GitOps์—์„œ๋Š” ๋ชจ๋“  ์ธํ”„๋ผ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ ์–ธ์ (Declarative) ๋ฐฉ์‹์œผ๋กœ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์„ ์–ธ์  ๋ฐฉ์‹์ด๋ž€, "์ด๋ ‡๊ฒŒ ๋˜์–ด์•ผ ํ•œ๋‹ค" ๋ผ๋Š” ์ตœ์ข… ์ƒํƒœ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • Kubernetes์˜ Deployment, Service, ConfigMap, Secret ๋“ฑ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ YAML ํŒŒ์ผ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
  • Git ์ €์žฅ์†Œ์— ์„ ์–ธ๋œ YAML ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋ฉด, ์ž๋™์œผ๋กœ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.
# ์„ ์–ธ์  ๋ฐฉ์‹ ์˜ˆ์ œ (Deployment ์ •์˜)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: default
spec:
  replicas: 3  # ํ•ญ์ƒ 3๊ฐœ์˜ Pod์„ ์œ ์ง€ํ•˜๋„๋ก ์„ ์–ธ
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:v1.0

 

๐Ÿ”น ๋ช…๋ นํ˜• vs ์„ ์–ธํ˜• ๋น„๊ต

๋น„๊ต ํ•ญ๋ชฉ ๋ช…๋ นํ˜• (Imperative) ์„ ์–ธํ˜• (Declarative)

๋ฐฉ์‹ kubectl ๋ช…๋ น์–ด ์ง์ ‘ ์‹คํ–‰ YAML ํŒŒ์ผ๋กœ ์›ํ•˜๋Š” ์ƒํƒœ ์„ ์–ธ
๋ณ€๊ฒฝ ์ ์šฉ ์šด์˜์ž๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•ด์•ผ ์ ์šฉ๋จ Git์—์„œ ๋ณ€๊ฒฝํ•˜๋ฉด ์ž๋™ ์ ์šฉ
๋กค๋ฐฑ ์ด์ „ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ค์›€ Git์—์„œ ํŠน์ • ์ปค๋ฐ‹์œผ๋กœ ์‰ฝ๊ฒŒ ๋กค๋ฐฑ ๊ฐ€๋Šฅ
์ผ๊ด€์„ฑ ์‚ฌ๋žŒ์ด ์ง์ ‘ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ถˆ์•ˆ์ • Git์— ์ €์žฅ๋œ ์ƒํƒœ์™€ ํ•ญ์ƒ ์ผ์น˜

GitOps์—์„œ๋Š” Kubernetes์˜ ์„ ์–ธ์  ๊ตฌ์„ฑ ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜์—ฌ Git์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ณง ์šด์˜ ํ™˜๊ฒฝ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.


โœ… 2. Git์„ ๋‹จ์ผ ์‹ ๋ขฐ ์›์ฒœ(Single Source of Truth)์œผ๋กœ ํ™œ์šฉ

GitOps์—์„œ๋Š” Git ์ €์žฅ์†Œ๊ฐ€ ์šด์˜ ํ™˜๊ฒฝ์˜ ๋‹จ์ผ ์‹ ๋ขฐ ์›์ฒœ์ด ๋ฉ๋‹ˆ๋‹ค.
์ฆ‰, Git ์ €์žฅ์†Œ์— ์ €์žฅ๋œ ์ƒํƒœ๊ฐ€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ์™€ ํ•ญ์ƒ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น GitOps์—์„œ Git์˜ ์—ญํ• 

  • Git์— ์ €์žฅ๋œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐฐํฌ์™€ ์—ฐ๋™๋จ
  • Git์˜ ์ปค๋ฐ‹ ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Œ
  • Git ๋ธŒ๋žœ์น˜ ๋ฐ PR(Pull Request) ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐฐํฌ ์•ˆ์ •์„ฑ์„ ๊ฐ•ํ™”
# GitOps ๋ฐฉ์‹์˜ ๋ฐฐํฌ ์˜ˆ์ œ
git add .
git commit -m "Update deployment to v1.1"
git push origin main
  • GitOps๋ฅผ ํ™œ์šฉํ•˜๋ฉด git push๋งŒ์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ์ž๋™ํ™”๋ฉ๋‹ˆ๋‹ค.
  • ์šด์˜์ž๋Š” kubectl ๋ช…๋ น์„ ์ง์ ‘ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • GitOps ๋„๊ตฌ(์˜ˆ: Argo CD)๊ฐ€ ์ž๋™์œผ๋กœ Git ์ƒํƒœ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

โœ… 3. ์ž๋™ ๋™๊ธฐํ™”(Automated Syncing) ๋ฐ ์ง€์†์ ์ธ ๊ฒ€์ฆ(Continuous Reconciliation)

GitOps ๋ฐฉ์‹์—์„œ๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ Git ์ €์žฅ์†Œ์˜ ์ƒํƒœ์™€ ํ•ญ์ƒ ๋™๊ธฐํ™”(Automated Sync)๋˜๋„๋ก ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด GitOps ๋„๊ตฌ(Argo CD ๋“ฑ)๋Š” Git ์ €์žฅ์†Œ๋ฅผ ์ง€์†์ ์œผ๋กœ ๊ฐ์‹œํ•˜๊ณ , ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ฐ์ง€๋˜๋ฉด ์ž๋™์œผ๋กœ Kubernetes ํ™˜๊ฒฝ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”น GitOps ์ž๋™ ๋™๊ธฐํ™” ๊ณผ์ •
1๏ธโƒฃ ์šด์˜์ž๊ฐ€ Git ์ €์žฅ์†Œ์—์„œ YAML ํŒŒ์ผ ๋ณ€๊ฒฝ ํ›„ ์ปค๋ฐ‹(Push)
2๏ธโƒฃ GitOps ๋„๊ตฌ(Argo CD)๊ฐ€ Git ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€
3๏ธโƒฃ ๋ณ€๊ฒฝ๋œ YAML ํŒŒ์ผ์„ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์ž๋™ ์ ์šฉ
4๏ธโƒฃ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์„ ์–ธ๋œ ์ƒํƒœ์™€ ์ผ์น˜ํ•˜๋„๋ก ์กฐ์ •

syncPolicy:
  automated:
    prune: true  # ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์ž๋™ ์‚ญ์ œ
    selfHeal: true  # Kubernetes ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ ์‹œ ์›๋ž˜ ์ƒํƒœ๋กœ ๋ณต๊ตฌ
  • prune: true → Git์— ์—†๋Š” ๋ฆฌ์†Œ์Šค๋Š” ์ž๋™ ์‚ญ์ œ
  • selfHeal: true → Kubernetes ๋ฆฌ์†Œ์Šค๊ฐ€ ์ˆ˜๋™ ๋ณ€๊ฒฝ๋˜๋ฉด ์ž๋™ ๋ณต๊ตฌ

์ž๋™ ๋™๊ธฐํ™”๋ฅผ ํ†ตํ•ด Git๊ณผ Kubernetes ์ƒํƒœ๊ฐ€ **๋ถˆ์ผ์น˜ํ•œ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๋ณต๊ตฌ(Self-Healing)**๋ฉ๋‹ˆ๋‹ค.


โœ… 4. ๊ฐ์‚ฌ ๊ฐ€๋Šฅ(Auditability) ๋ฐ ์†์‰ฌ์šด ๋กค๋ฐฑ(Rollback)

GitOps์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” Git ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐฐํฌ ์ด๋ ฅ์„ ์ถ”์ ํ•˜๊ณ , ์‰ฝ๊ฒŒ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๐Ÿ”น GitOps ๋ฐฉ์‹์˜ ๋กค๋ฐฑ ์›๋ฆฌ

  • Git์˜ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํŠน์ • ์‹œ์ ์˜ ์„ค์ •์„ ์–ธ์ œ๋“ ์ง€ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด์ „ ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์›๋ž˜ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
# GitOps ๋ฐฉ์‹์˜ ๋กค๋ฐฑ ์˜ˆ์ œ
git revert HEAD  # ๊ฐ€์žฅ ์ตœ๊ทผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋กค๋ฐฑ
git push origin main  # ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋‹ค์‹œ Git์— ์ ์šฉ

Argo CD ๊ฐ™์€ GitOps ๋„๊ตฌ๋Š” ์ž๋™์œผ๋กœ ์ด์ „ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•˜๋ฉฐ,
์šด์˜์ž๋Š” ์ถ”๊ฐ€์ ์ธ kubectl ๋ช…๋ น์–ด ์‹คํ–‰ ์—†์ด Git ์ปค๋ฐ‹๋งŒ์œผ๋กœ ๋กค๋ฐฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”น GitOps์˜ ์‹ค์ „ ํ™œ์šฉ: Kubernetes์—์„œ ์–ด๋–ป๊ฒŒ ์ ์šฉํ• ๊นŒ?

GitOps์˜ 4๊ฐ€์ง€ ์›์น™์„ Kubernetes ํ™˜๊ฒฝ์—์„œ ์–ด๋–ป๊ฒŒ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

โœ… GitOps ํ™œ์šฉ์„ ์œ„ํ•œ ํ•„์ˆ˜ ์š”์†Œ

์š”์†Œ ์—ญํ• 

Git ์ €์žฅ์†Œ ๋ชจ๋“  ๋ฐฐํฌ ๋ฐ ์ธํ”„๋ผ ์„ค์ •์„ ์ €์žฅํ•˜๋Š” ๊ณณ
GitOps ๋„๊ตฌ (Argo CD) Git๊ณผ Kubernetes์˜ ๋™๊ธฐํ™”๋ฅผ ๋‹ด๋‹น
Kubernetes ํด๋Ÿฌ์Šคํ„ฐ GitOps๋ฅผ ์ ์šฉํ•  ์‹ค์ œ ํ™˜๊ฒฝ

โœ… GitOps ๋ฐฉ์‹์˜ Kubernetes ๋ฐฐํฌ ํ๋ฆ„

1๏ธโƒฃ Git ์ €์žฅ์†Œ์—์„œ ์„ ์–ธ์  YAML ์ž‘์„ฑ
2๏ธโƒฃ Argo CD๊ฐ€ Git ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜์—ฌ ์ž๋™ ๋™๊ธฐํ™” ์ˆ˜ํ–‰
3๏ธโƒฃ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ Git๊ณผ ์ผ์น˜ํ•˜๋Š” ์ƒํƒœ๋กœ ์œ ์ง€

# GitOps๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ ๊ณผ์ •
git add deployment.yaml
git commit -m "Update my-app to v1.2"
git push origin main

Git์— ํ‘ธ์‹œํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋ฐฐํฌ, ๋ณ€๊ฒฝ, ๋กค๋ฐฑ์ด ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.


๐Ÿ”น ๊ฒฐ๋ก : ์ด๋ฒˆ ๊ธ€์—์„œ ๋ฐฐ์šด ํ•ต์‹ฌ ๋‚ด์šฉ ์ •๋ฆฌ

๐ŸŸข GitOps๋Š” ์„ ์–ธ์  ๊ตฌ์„ฑ, Git ๊ธฐ๋ฐ˜ ๋ณ€๊ฒฝ ๊ด€๋ฆฌ, ์ž๋™ ๋™๊ธฐํ™”, ๊ฐ์‚ฌ ๊ฐ€๋Šฅ์„ฑ์„ ํ•ต์‹ฌ ์›์น™์œผ๋กœ ์‚ผ์Œ
๐ŸŸข Git์„ ๋‹จ์ผ ์‹ ๋ขฐ ์›์ฒœ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”
๐ŸŸข Argo CD ๊ฐ™์€ GitOps ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ฐฐํฌ๋ฅผ ์ž๋™ํ™”ํ•˜๊ณ , Kubernetes ํ™˜๊ฒฝ์„ ํ•ญ์ƒ Git๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์œ ์ง€ ๊ฐ€๋Šฅ
๐ŸŸข Git ์ปค๋ฐ‹ ๊ธฐ๋ฐ˜ ๋กค๋ฐฑ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์šด์˜ ๋ถ€๋‹ด์„ ์ค„์ด๊ณ  ์‹ ๋ขฐ์„ฑ์„ ๋†’์ž„

728x90