๐น Argo CD์์ ๋ค์ค ํด๋ฌ์คํฐ ๋ฐฐํฌ๋?
Argo CD๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋จ์ผ Kubernetes ํด๋ฌ์คํฐ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ ํด๋ฌ์คํฐ(Multi-Cluster)๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ด๋ฅผ ํ์ฉํ๋ฉด ํ๋์ Argo CD ์ธ์คํด์ค์์ ์ฌ๋ฌ ๊ฐ์ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ๋์์ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
โ ๋ค์ค ํด๋ฌ์คํฐ ๋ฐฐํฌ๊ฐ ํ์ํ ์ด์
โ Dev, Staging, Prod ํ๊ฒฝ์ ๋ถ๋ฆฌํ์ฌ ์ด์ ๊ฐ๋ฅ
โ ๋ค์ํ ์ง์ญ(Region)์ ๋ฐฐํฌํ์ฌ ๊ฐ์ฉ์ฑ์ ๋์
โ ํ
๋ํธ๋ณ(๊ฐ ํ๋ณ) ํด๋ฌ์คํฐ๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
โ ํ๋์ Argo CD์์ ์ค์ ์ง์ค์์ผ๋ก ์ฌ๋ฌ ํด๋ฌ์คํฐ๋ฅผ ์ ์ด ๊ฐ๋ฅ
๐น Argo CD ๋ค์ค ํด๋ฌ์คํฐ ๊ตฌ์ฑ ๋ฐฉ์
Argo CD์์ ๋ค์ค ํด๋ฌ์คํฐ ๋ฐฐํฌ๋ฅผ ์ง์ํ๋ ๋ฐฉ์์ ํฌ๊ฒ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
๊ตฌ์ฑ ๋ฐฉ์ | ์ค๋ช | ์ฅ์ | ๋จ์ |
์ฑ๊ธ ์ปจํธ๋กค๋ฌ (Single Argo CD, Multi-Cluster) | ํ๋์ Argo CD๊ฐ ์ฌ๋ฌ ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌ | ์ค์ ์ง์ค์ ๊ด๋ฆฌ ๊ฐ๋ฅ | ๋คํธ์ํฌ ์ฅ์ ์ ํน์ ํด๋ฌ์คํฐ ์ ๊ทผ ๋ถ๊ฐ |
ํด๋ฌ์คํฐ๋ณ ๋ ๋ฆฝ ์ด์ (Argo CD Per Cluster) | ๊ฐ ํด๋ฌ์คํฐ๋ง๋ค Argo CD๋ฅผ ๋ณ๋๋ก ์ด์ | ํด๋ฌ์คํฐ ๊ฐ ์์ ํ ๋ ๋ฆฝ์ฑ ํ๋ณด | ๊ด๋ฆฌํ Argo CD ๊ฐ์๊ฐ ์ฆ๊ฐ |
โ ์ฑ๊ธ ์ปจํธ๋กค๋ฌ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ผ๋ก ์ถ์ฒ๋๋ฉฐ, ์ด๋ฅผ ํ์ฉํ๋ฉด ํ๋์ Argo CD์์ ์ฌ๋ฌ ํด๋ฌ์คํฐ๋ฅผ ๋์ ์ ์ด ๊ฐ๋ฅ
๐น Argo CD์์ ์๋ก์ด ํด๋ฌ์คํฐ ๋ฑ๋กํ๊ธฐ
โ 1. ํ์ฌ ๋ฑ๋ก๋ ํด๋ฌ์คํฐ ํ์ธ
argocd cluster list
โ ์ถ๋ ฅ ์์:
SERVER NAME STATUS
https://kubernetes.default.svc in-cluster Successful
์์ ๊ฐ์ด ๊ธฐ๋ณธ์ ์ผ๋ก Argo CD๋ ์์ ์ด ๋ฐฐํฌ๋ ํด๋ฌ์คํฐ๋ง ๊ด๋ฆฌํฉ๋๋ค.
์ถ๊ฐ์ ์ธ ํด๋ฌ์คํฐ๋ฅผ ๋ฑ๋กํ๋ ค๋ฉด ๊ด๋ฆฌํ Kubernetes ํด๋ฌ์คํฐ์ Kubeconfig ์ ๋ณด๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
โ 2. ์๋ก์ด ํด๋ฌ์คํฐ ๋ฑ๋กํ๊ธฐ
๋ค๋ฅธ ํด๋ฌ์คํฐ๋ฅผ Argo CD์ ์ถ๊ฐํ๋ ค๋ฉด, ๋จผ์ ํด๋น ํด๋ฌ์คํฐ์ ๋ํ kubeconfig ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ ํ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
argocd cluster add <CONTEXT_NAME>
โ ์์ (ํด๋ฌ์คํฐ๊ฐ staging-cluster์ผ ๊ฒฝ์ฐ)
argocd cluster add staging-cluster
์ด ๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด, ํด๋น ํด๋ฌ์คํฐ์ argocd-manager ์๋น์ค ๊ณ์ ์ด ์์ฑ๋๊ณ ,
Argo CD๊ฐ ํด๋น ํด๋ฌ์คํฐ๋ฅผ ์ ์ดํ ์ ์๋ ๊ถํ์ด ๋ถ์ฌ๋ฉ๋๋ค.
โ ๋ฑ๋ก๋ ํด๋ฌ์คํฐ ๋ค์ ํ์ธ:
argocd cluster list
โ ์ถ๋ ฅ ์์:
SERVER NAME STATUS
https://kubernetes.default.svc in-cluster Successful
https://10.1.1.100:6443 staging-cluster Successful
์ด์ staging-cluster๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
โ 3. ๋ค์ค ํด๋ฌ์คํฐ๋ฅผ ํ์ฉํ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ
์ด์ Application ๋ฆฌ์์ค๋ฅผ ์ ์ํ ๋, ํน์ ํด๋ฌ์คํฐ๋ฅผ ๋์์ผ๋ก ๋ฐฐํฌํ ์ ์์ต๋๋ค.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: example-app-staging
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/example/repo.git
targetRevision: main
path: manifests
destination:
server: https://10.1.1.100:6443 # Staging ํด๋ฌ์คํฐ
namespace: example-app
syncPolicy:
automated:
prune: true
selfHeal: true
โ ์ค๋ช :
- destination.server → ํด๋ฌ์คํฐ์ API ์๋ฒ ์ฃผ์๋ฅผ ์ ๋ ฅ
- destination.namespace → ๋ฐฐํฌํ ๋ค์์คํ์ด์ค ์ง์
- syncPolicy → ์๋ ๋๊ธฐํ ๋ฐ Self-Healing ํ์ฑํ
๐น Argo CD ๋ค์ค ํด๋ฌ์คํฐ ๋ฐฐํฌ ์ ๊ณ ๋ คํ ์
โ 1. ํด๋ฌ์คํฐ ๊ฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ ํ์
- Argo CD๊ฐ ๋ค์ค ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด, ๊ฐ ํด๋ฌ์คํฐ์ API ์๋ฒ๊ฐ ์ ๊ทผ ๊ฐ๋ฅํด์ผ ํจ
- VPN, VPC Peering, Private Link ๋ฑ์ ํ์ฉํ์ฌ ๋คํธ์ํฌ ์ฐ๊ฒฐ ๊ฐ๋ฅ
โ 2. RBAC(Role-Based Access Control) ์ค์
- ํด๋ฌ์คํฐ๋ณ๋ก ๋ฐฐํฌ ๊ถํ์ ์ ์ดํ๋ ค๋ฉด Argo CD RBAC์ ํ์ฉ
- ํน์ ํ๋ก์ ํธ(Project)์์ ํน์ ํด๋ฌ์คํฐ๋ก๋ง ๋ฐฐํฌ ๊ฐ๋ฅํ๋๋ก ์ค์ ๊ฐ๋ฅ
โ 3. GitOps ๊ธฐ๋ฐ์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ํ๋ก๋น์ ๋
- Terraform, Crossplane ๋ฑ์ ์ฌ์ฉํ์ฌ GitOps ๋ฐฉ์์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ์๋ ์์ฑ ๋ฐ ๊ด๋ฆฌ
๐น Argo CD ๋ค์ค ํด๋ฌ์คํฐ CLI ๋ช ๋ น์ด ์ ๋ฆฌ
๋ช ๋ น์ด | ์ค๋ช |
argocd cluster list | ๋ฑ๋ก๋ ํด๋ฌ์คํฐ ๋ชฉ๋ก ํ์ธ |
argocd cluster add <CONTEXT_NAME> | ์๋ก์ด ํด๋ฌ์คํฐ ๋ฑ๋ก |
argocd cluster remove <CONTEXT_NAME> | ํด๋ฌ์คํฐ ๋ฑ๋ก ํด์ |
argocd app create <APP> | ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ |
argocd app sync <APP> | ์ ํ๋ฆฌ์ผ์ด์ ๋๊ธฐํ ์คํ |
โ ํด๋ฌ์คํฐ ์ ๊ฑฐ:
argocd cluster remove staging-cluster
โ ์ ํ๋ฆฌ์ผ์ด์ ๋๊ธฐํ:
argocd app sync example-app-staging
๐น ๊ฒฐ๋ก : ์ด๋ฒ ๊ธ์์ ๋ฐฐ์ด ํต์ฌ ๋ด์ฉ ์ ๋ฆฌ
๐ข Argo CD๋ ๋ค์ค ํด๋ฌ์คํฐ(Multi-Cluster) ๋ฐฐํฌ๋ฅผ ์ง์ํ๋ฉฐ, ์ค์ ์ง์ค์์ผ๋ก ์ฌ๋ฌ ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌ ๊ฐ๋ฅ
๐ข ์ฑ๊ธ ์ปจํธ๋กค๋ฌ ๋ฐฉ์๊ณผ ํด๋ฌ์คํฐ๋ณ ๋
๋ฆฝ ์ด์ ๋ฐฉ์ ์ค ์ด์ ํ๊ฒฝ์ ๋ง๋ ์ ๋ต์ ์ ํํด์ผ ํจ
๐ข argocd cluster add ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ํด๋ฌ์คํฐ๋ฅผ ์ถ๊ฐํ๊ณ , Application YAML์์ ํด๋ฌ์คํฐ๋ฅผ ์ง์ ๊ฐ๋ฅ
๐ข RBAC์ ํ์ฉํ์ฌ ํน์ ํ๋ก์ ํธ(Project)์์ ํน์ ํด๋ฌ์คํฐ๋ก๋ง ๋ฐฐํฌ ๊ฐ๋ฅํ๋๋ก ์ ํํ ์ ์์
๐ข GitOps ๋ฐฉ์์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ์๋ํํ๋ฉด ์ด์ ํจ์จ์ฑ์ ๊ทน๋ํํ ์ ์์