๐น 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 ๋ก๊ทธ์ธ์ ์ค์ ํ ์ ์์