Kubernetes Tools/ArgoCD

[Ep.3] [GitOps์™€ Argo CD์˜ ๊ธฐ์ดˆ #3] Argo CD๋ž€ ๋ฌด์—‡์ธ๊ฐ€? GitOps๋ฅผ ์‹ค๋ฌด์— ์ ์šฉํ•˜๋Š” ์ตœ๊ณ ์˜ ๋„๊ตฌ

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

๐Ÿ”น Argo CD๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

โœ… Argo CD์˜ ์ •์˜

Argo CD๋Š” Kubernetes ํ™˜๊ฒฝ์—์„œ GitOps ์›์น™์„ ๊ตฌํ˜„ํ•˜๋Š” ์ง€์†์  ๋ฐฐํฌ(Continuous Deployment) ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
Git์— ์ €์žฅ๋œ ์„ ์–ธ์ (Declarative) ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๋ฉฐ,
์šด์˜ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

 

Argo CD๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

โœ” Git ์ €์žฅ์†Œ์™€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋™๊ธฐํ™” → Git์— ์ €์žฅ๋œ ์„ ์–ธ์  ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ Kubernetes์— ์ž๋™ ์ ์šฉ
โœ” ์ž๋™ ๋ฐ ์ˆ˜๋™ ๋™๊ธฐํ™” ๋ชจ๋“œ ์ง€์› → Git์—์„œ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐ˜์˜ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์Šน์ธ ํ›„ ๋™๊ธฐํ™”ํ•  ์ˆ˜๋„ ์žˆ์Œ
โœ” RBAC ๋ฐ ์ธ์ฆ ๊ธฐ๋Šฅ ์ œ๊ณต → ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—์„œ ๊ถŒํ•œ์„ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
โœ” Helm ๋ฐ Kustomize ์ง€์› → Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๋”์šฑ ์œ ์—ฐํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›


โœ… Argo CD์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

โœ… ์ž๋™ ๋™๊ธฐํ™”(Auto Sync)

  • Git ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ž๋™์œผ๋กœ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ
  • Git ์ƒํƒœ์™€ ๋ถˆ์ผ์น˜ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™ ์ˆ˜์ •(Self-Healing)

โœ… ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ์ง€์›

  • ํ•˜๋‚˜์˜ Argo CD ์ธ์Šคํ„ด์Šค๋กœ ์—ฌ๋Ÿฌ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

โœ… RBAC(Role-Based Access Control) ์ง€์›

  • ํ”„๋กœ์ ํŠธ๋ณ„ ๊ถŒํ•œ ์„ค์ • ๋ฐ ์‚ฌ์šฉ์ž ์ ‘๊ทผ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

โœ… Helm, Kustomize ์ง€์›

  • Helm ์ฐจํŠธ ๋ฐ Kustomize๋ฅผ ํ™œ์šฉํ•œ ์œ ์—ฐํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ๊ฐ€๋Šฅ

โœ… ๊ฐ•๋ ฅํ•œ UI ๋ฐ CLI ์ œ๊ณต

  • ์ง๊ด€์ ์ธ ์›น UI๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ฐฐํฌ ์ƒํƒœ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅ
  • CLI์™€ API๋ฅผ ์ด์šฉํ•œ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ ๊ฐ€๋Šฅ

๐Ÿ”น Argo CD ์•„ํ‚คํ…์ฒ˜

Argo CD๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

 

1๏ธโƒฃ API ์„œ๋ฒ„ (argocd-server)

  • CLI, UI, API ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์ธ์ฆ๊ณผ RBAC(Role-Based Access Control)์„ ๋‹ด๋‹น

2๏ธโƒฃ ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„ (argocd-repo-server)

  • Git ์ €์žฅ์†Œ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์™€ ํŒŒ์‹ฑ ๋ฐ ๋ถ„์„

3๏ธโƒฃ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ (argocd-application-controller)

  • Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ์‹ค์ œ ์ƒํƒœ์™€ Git ์ €์žฅ์†Œ์˜ ์„ ์–ธ์  ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜๊ณ  ๋™๊ธฐํ™” ์ˆ˜ํ–‰

4๏ธโƒฃ Redis ์บ์‹œ (argocd-redis)

  • Kubernetes ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”

5๏ธโƒฃ Dex ์„œ๋ฒ„ (argocd-dex-server, ์„ ํƒ์ )

  • OAuth, OIDC ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐ SSO(Single Sign-On) ์ง€์›
graph TD
  A[Git Repository] -->|Changes detected| B(Repo Server)
  B -->|Parses manifests| C(Application Controller)
  C -->|Syncs state| D(Kubernetes Cluster)
  D -->|Reports status| C
  C -->|Updates UI| E(API Server)
  E -->|User requests| F[Argo CD Web UI / CLI]
  E -->|Auth & RBAC| G[Dex (SSO, OAuth)]
  E -->|Stores cache| H[Redis]

๐Ÿ”น Argo CD์™€ GitOps์˜ ์—ฐ๊ณ„

Argo CD๋Š” GitOps์˜ ์›์น™์„ ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
Kubernetes์—์„œ GitOps๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

 

1๏ธโƒฃ Git ์ €์žฅ์†Œ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ(YAML, Helm ์ฐจํŠธ ๋“ฑ) ์ €์žฅ
2๏ธโƒฃ Argo CD๊ฐ€ Git ์ €์žฅ์†Œ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง
3๏ธโƒฃ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ฐ์ง€๋˜๋ฉด ์ž๋™์œผ๋กœ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์—…๋ฐ์ดํŠธ
4๏ธโƒฃ ๋ฐฐํฌ ์ƒํƒœ๊ฐ€ Git์˜ ์„ ์–ธ์  ๊ตฌ์„ฑ๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์ง€์†์ ์ธ ๋™๊ธฐํ™” ์ˆ˜ํ–‰


๐Ÿ”น Argo CD vs ๊ธฐ์กด CI/CD ๋„๊ตฌ ๋น„๊ต

๊ธฐ๋Šฅ Argo CD (GitOps) ๊ธฐ์กด CI/CD (Jenkins, GitHub Actions)

๋ฐฐํฌ ๋ฐฉ์‹ ์„ ์–ธ์ (Declarative) ๋ช…๋ นํ˜•(Imperative)
๋ณ€๊ฒฝ ๊ฐ์ง€ Git ๋ณ€๊ฒฝ ์ž๋™ ๊ฐ์ง€ ์ˆ˜๋™ ํŠธ๋ฆฌ๊ฑฐ ํ•„์š”
๋กค๋ฐฑ Git ์ปค๋ฐ‹ ๊ธฐ๋ฐ˜ ๋กค๋ฐฑ ๋ณ„๋„ ์Šคํฌ๋ฆฝํŠธ ํ•„์š”
๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ์ง€์› O X
UI ์ œ๊ณต O (๋Œ€์‹œ๋ณด๋“œ) X (๋Œ€๋ถ€๋ถ„ CLI ๊ธฐ๋ฐ˜)

๐Ÿ”น Argo CD์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

โœ… ์žฅ์ 

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

โŒ ๋‹จ์ 

  • ์ดˆ๊ธฐ ์„ค์ •์ด ํ•„์š” → ๊ธฐ์กด CI/CD์— ์ต์ˆ™ํ•œ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ์‹์ด๋ฏ€๋กœ ํ•™์Šต ๊ณก์„  ์กด์žฌ
  • Git ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐ•์ œ → ๋ชจ๋“  ๋ฐฐํฌ๊ฐ€ Git์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ, ๋ช…๋ นํ˜• ๋ฐฐํฌ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ํŒ€์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

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

๐ŸŸข Argo CD๋Š” GitOps ๊ธฐ๋ฐ˜ Kubernetes ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ์‹คํ˜„ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ
๐ŸŸข Git ์ €์žฅ์†Œ๋ฅผ Kubernetes์˜ ๋‹จ์ผ ์‹ ๋ขฐ ์›์ฒœ์œผ๋กœ ์‚ผ์•„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”
๐ŸŸข Argo CD์˜ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ(Repo Server, Application Controller, API Server ๋“ฑ)์˜ ์—ญํ•  ์ดํ•ด
๐ŸŸข ๊ธฐ์กด CI/CD ๋ฐฉ์‹๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ Argo CD๋Š” ์„ ์–ธ์  ๋ฐฉ์‹์œผ๋กœ ๋ฐฐํฌ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ์ง€์› ๋ฐ ์ž๋™ ๋กค๋ฐฑ ๊ธฐ๋Šฅ์ด ๊ฐ•์ 

728x90