Kubernetes Tools/ArgoCD

[Ep.4] [GitOps์™€ Argo CD์˜ ๊ธฐ์ดˆ #4] Argo CD ์•„ํ‚คํ…์ฒ˜: ๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋™์ž‘ ์›๋ฆฌ

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

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

Argo CD๋Š” GitOps ๊ธฐ๋ฐ˜์˜ Kubernetes ๋ฐฐํฌ ์ž๋™ํ™” ๋„๊ตฌ๋กœ, Git ์ €์žฅ์†Œ์™€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์˜ ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Argo CD๋Š” **์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ(์ปดํฌ๋„ŒํŠธ)**๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

Argo CD์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ดํ•ดํ•˜๋ฉด, ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์šด์˜ ๋ฐ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์„ ๋”์šฑ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น Argo CD์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

Argo CD๋Š” ํฌ๊ฒŒ 5๊ฐœ์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ  ์š”์†Œ ์„ค๋ช…
API ์„œ๋ฒ„ (argocd-server) ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ธ์ฆ ๋ฐ RBAC(Role-Based Access Control) ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹น
๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„ (argocd-repo-server) Git ์ €์žฅ์†Œ์—์„œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , Helm/Kustomize ๋“ฑ์˜ ํ…œํ”Œ๋ฆฟ์„ ๋ Œ๋”๋ง
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ (argocd-application-controller) Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ Git ์ €์žฅ์†Œ์™€ ๋น„๊ตํ•˜์—ฌ ๋™๊ธฐํ™”
Redis ์บ์‹œ (argocd-redis) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ์บ์‹ฑํ•˜์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”
Dex ์„œ๋ฒ„ (argocd-dex-server, ์„ ํƒ์ ) SSO(Single Sign-On) ๋ฐ ์ธ์ฆ ๊ธฐ๋Šฅ ์ œ๊ณต (OIDC, OAuth ์ง€์›)

 

๊ฐ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์—ญํ• ์„ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. API ์„œ๋ฒ„ (argocd-server)

โœ… ์—ญํ• 

  • CLI(Command Line Interface), UI(Web Interface), API ์š”์ฒญ์„ ์ฒ˜๋ฆฌ
  • ์ธ์ฆ(Authentication) ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ(RBAC, Role-Based Access Control) ์ˆ˜ํ–‰
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™๊ธฐํ™” ๋ช…๋ น์„ ํŠธ๋ฆฌ๊ฑฐ

โœ… ๋™์ž‘ ์›๋ฆฌ

1๏ธโƒฃ ์‚ฌ์šฉ์ž๊ฐ€ CLI ๋˜๋Š” ์›น UI์—์„œ Argo CD์— ์ ‘๊ทผ
2๏ธโƒฃ API ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์•„ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ์„ ํ™•์ธ
3๏ธโƒฃ ์š”์ฒญ๋œ ์ž‘์—…์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ ๋˜๋Š” ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ

โœ… API ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ
  • ๋™๊ธฐํ™”(Sync) ํŠธ๋ฆฌ๊ฑฐ ๋ฐ ๋กค๋ฐฑ ์ˆ˜ํ–‰
  • ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ RBAC(Role-Based Access Control) ๊ด€๋ฆฌ

๐Ÿ”น 2. ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„ (argocd-repo-server)

โœ… ์—ญํ• 

  • Git ์ €์žฅ์†Œ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์™€ ๋ Œ๋”๋ง
  • Helm, Kustomize, Jsonnet๊ณผ ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ๋ฅผ ์ง€์›
  • ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌํ•˜์—ฌ ๋™๊ธฐํ™”

โœ… ๋™์ž‘ ์›๋ฆฌ

1๏ธโƒฃ API ์„œ๋ฒ„์˜ ์š”์ฒญ์„ ๋ฐ›์•„ Git ์ €์žฅ์†Œ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ด
2๏ธโƒฃ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ Helm/Kustomize/Jsonnet์„ ์‚ฌ์šฉํ•ด ๋ Œ๋”๋ง
3๏ธโƒฃ ๋ Œ๋”๋ง๋œ ์ตœ์ข… ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌ

โœ… ์ง€์›ํ•˜๋Š” ๋ฐฐํฌ ๋ฐฉ์‹

  • Raw YAML: ์ผ๋ฐ˜์ ์ธ Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • Helm: Helm ์ฐจํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐํฌ
  • Kustomize: Kubernetes ๋ฆฌ์†Œ์Šค๋ฅผ ๋™์ ์œผ๋กœ ํŒจ์น˜ํ•˜์—ฌ ๋ฐฐํฌ
  • Jsonnet: JSON ๊ธฐ๋ฐ˜์˜ ์„ค์ • ๊ด€๋ฆฌ ์ง€์›

๐Ÿ”น 3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ (argocd-application-controller)

โœ… ์—ญํ• 

  • Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ Git ์ €์žฅ์†Œ์™€ ๋น„๊ต
  • ์ƒํƒœ๊ฐ€ ๋ถˆ์ผ์น˜ํ•˜๋ฉด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ Git ์ €์žฅ์†Œ์˜ ์ƒํƒœ์™€ ๋™๊ธฐํ™”
  • ๋™๊ธฐํ™” ์ •์ฑ…(์ž๋™ ๋˜๋Š” ์ˆ˜๋™ ๋™๊ธฐํ™”)์— ๋”ฐ๋ผ ์ž‘์—… ์ˆ˜ํ–‰

โœ… ๋™์ž‘ ์›๋ฆฌ

1๏ธโƒฃ Git ์ €์žฅ์†Œ์˜ ์„ ์–ธ์  ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Kubernetes ์ƒํƒœ์™€ ๋น„๊ต
2๏ธโƒฃ Git๊ณผ Kubernetes ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ → ๋™๊ธฐํ™”(Sync) ์ˆ˜ํ–‰
3๏ธโƒฃ ๋™๊ธฐํ™” ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ

โœ… ์ž๋™ ๋™๊ธฐํ™”(Self-Healing) ๊ธฐ๋Šฅ

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

๐Ÿ”น 4. Redis ์บ์‹œ (argocd-redis)

โœ… ์—ญํ• 

  • Argo CD ๋‚ด๋ถ€์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์บ์‹ฑํ•˜์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”
  • Kubernetes ๋ฆฌ์†Œ์Šค ์ •๋ณด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™๊ธฐํ™” ์ƒํƒœ, ๋กœ๊ทธ ๋“ฑ์„ ์ €์žฅ

โœ… ๋™์ž‘ ์›๋ฆฌ

1๏ธโƒฃ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ์™€ API ์„œ๋ฒ„๊ฐ€ ์ž์ฃผ ์กฐํšŒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑ
2๏ธโƒฃ ๋ฆฌ์†Œ์Šค ์š”์ฒญ ์‹œ Redis์—์„œ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜์—ฌ ์‘๋‹ต ์†๋„ ํ–ฅ์ƒ


๐Ÿ”น 5. Dex ์„œ๋ฒ„ (argocd-dex-server, ์„ ํƒ์  ๊ตฌ์„ฑ ์š”์†Œ)

โœ… ์—ญํ• 

  • OAuth ๋ฐ OIDC(OpenID Connect) ์ธ์ฆ ์ง€์›
  • SSO(Single Sign-On) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์กฐ์ง ๋‚ด ์‚ฌ์šฉ์ž ์ธ์ฆ ๊ด€๋ฆฌ

โœ… ์ง€์›ํ•˜๋Š” ์ธ์ฆ ๋ฐฉ์‹

  • GitHub OAuth
  • Google OAuth
  • LDAP
  • Microsoft Active Directory

Dex ์„œ๋ฒ„๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ธฐ์—… ๋‚ด ๋ณด์•ˆ ์ •์ฑ…์— ๋งž์ถฐ Argo CD์— SSO ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น Argo CD์˜ ์ „์ฒด ์•„ํ‚คํ…์ฒ˜ ํ๋ฆ„

์•„๋ž˜ ๋‹ค์ด์–ด๊ทธ๋žจ์€ Argo CD์˜ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

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 ์›์น™์„ ๊ตฌํ˜„ํ•˜๋Š” ๋„๊ตฌ์ด๋ฉฐ, Kubernetes ์ƒํƒœ๋ฅผ Git๊ณผ ๋™๊ธฐํ™”ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰
๐ŸŸข Argo CD๋Š” 5๊ฐœ์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ(API ์„œ๋ฒ„, ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ, Redis, Dex ์„œ๋ฒ„)๋กœ ์ด๋ฃจ์–ด์ง
๐ŸŸข ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” Git๊ณผ Kubernetes ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์ž๋™ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰
๐ŸŸข ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„๋Š” Helm/Kustomize๋ฅผ ์ง€์›ํ•˜์—ฌ YAML์„ ๋™์ ์œผ๋กœ ๋ Œ๋”๋ง
๐ŸŸข Dex ์„œ๋ฒ„๋ฅผ ํ™œ์šฉํ•˜๋ฉด OAuth ๋ฐ OIDC ์ธ์ฆ์„ ์ง€์›ํ•˜์—ฌ SSO ๋กœ๊ทธ์ธ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ

728x90