๐น 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๋ ์ ์ธ์ ๋ฐฉ์์ผ๋ก ๋ฐฐํฌ๋ฅผ ์๋ํํ ์ ์์ผ๋ฉฐ, ๋ฉํฐ ํด๋ฌ์คํฐ ์ง์ ๋ฐ ์๋ ๋กค๋ฐฑ ๊ธฐ๋ฅ์ด ๊ฐ์