๐ง ArgoCD๋? ์ค์น๋ถํฐ ์ค์ , ์ค์ ํ์ฉ๊น์ง ์๋ฒฝ ๊ฐ์ด๋
โGit์ Pushํ๋ฉด ์๋์ผ๋ก Kubernetes์ ๋ฐฐํฌ๋๋๋ก ๋ง๋ค ์ ์์๊น?โ
๋ฐ๋ก ๊ทธ ํด๋ต์ด ArgoCD์ ๋๋ค.
๐ง ArgoCD๋?
**ArgoCD(Argo Continuous Delivery)**๋ GitOps ๋ฐฉ์์ Kubernetes ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ๋๊ตฌ์ ๋๋ค. Git ์ ์ฅ์๋ฅผ **๋จ์ผ ์์ค ์ค๋ธ ํธ๋ฃจ์ค(Single Source of Truth)**๋ก ์ผ์, Git์ ์ ์๋ ์ํ์ ์ค์ ํด๋ฌ์คํฐ ์ํ๋ฅผ ๋น๊ตํ๊ณ ์๋์ผ๋ก ๋๊ธฐํํด์ค๋๋ค.
์ฃผ์ ํน์ง:
- โ Git ๊ธฐ๋ฐ ๋ฐฐํฌ ์๋ํ (GitOps)
- โ UI / CLI / API ๋ชจ๋ ์ ๊ณต
- โ Helm, Kustomize, YAML ๋ฑ ๋ค์ํ ํ์ ์ง์
- โ ์ค์๊ฐ ์ํ ๋ชจ๋ํฐ๋ง ๋ฐ ๋กค๋ฐฑ ๊ธฐ๋ฅ
- โ ๋ฉํฐ ํด๋ฌ์คํฐ ์ง์
๐ง ์ค์นํ๊ธฐ
โ ์ ์ ์กฐ๊ฑด
- Kubernetes ํด๋ฌ์คํฐ๊ฐ ๊ตฌ์ฑ๋์ด ์์ด์ผ ํฉ๋๋ค (minikube, kind, EKS ๋ฑ)
kubectl
๋ช ๋ น์ด ์ฌ์ฉ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค
๐ฅ ์ค์น ๋ช ๋ น์ด
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
โณ ์ค์น ํ์ธ
kubectl get pods -n argocd
๋ชจ๋ pod๊ฐ Running ์ํ๊ฐ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
๐ ArgoCD ์ ์ํ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก argocd-server
๋ ClusterIP๋ก ์ค์น๋๋ฏ๋ก ์ธ๋ถ์์ ์ ์ํ๋ ค๋ฉด ๋ค์ ์ค ํ๋๋ฅผ ์ ํํ์ธ์:
๐น ๋ฐฉ๋ฒ 1: ํฌํธํฌ์๋ฉ (๋ก์ปฌ ํ ์คํธ์ฉ)
kubectl port-forward svc/argocd-server -n argocd 8080:443
โ ๋ธ๋ผ์ฐ์ ์์ https://localhost:8080 ์ ์
๐น ๋ฐฉ๋ฒ 2: Ingress ๋๋ NodePort ์ค์
์ ํ์ ์ผ๋ก Ingress๋ฅผ ๊ตฌ์ฑํ๊ฑฐ๋ argocd-server
์๋น์ค๋ฅผ NodePort๋ก ๋ณ๊ฒฝํ์ฌ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๐ ๋ก๊ทธ์ธํ๊ธฐ
โถ๏ธ ๊ธฐ๋ณธ ๋ก๊ทธ์ธ ์ ๋ณด
# admin ์ด๊ธฐ ๋น๋ฐ๋ฒํธ ํ์ธ
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d && echo
โ ID: admin
, ๋น๋ฐ๋ฒํธ: ์์์ ํ์ธํ ๊ฐ
โถ๏ธ CLI ๋ก๊ทธ์ธ
# CLI ์ค์น (macOS ๊ธฐ์ค)
brew install argocd
# ๋ก๊ทธ์ธ
argocd login localhost:8080 --username admin --password <๋น๋ฐ๋ฒํธ>
๐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌํ๊ธฐ
1. Git ์ ์ฅ์์ Kubernetes manifest ํ์ผ ์ฌ๋ฆฌ๊ธฐ
์:
my-app/
โโโ k8s/
โโโ deployment.yaml
โโโ service.yaml
GitHub์ ํธ์ํด๋ก๋๋ค.
2. ArgoCD์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก
โ CLI ๋ฐฉ์
argocd app create my-app \
--repo https://github.com/your-username/your-repo.git \
--path k8s \
--dest-server https://kubernetes.default.svc \
--dest-namespace default
โ UI ๋ฐฉ์
- โNew Appโ ํด๋ฆญ
- Git ์ ์ฅ์ ์ ๋ณด, ๊ฒฝ๋ก(path), ํด๋ฌ์คํฐ, ๋ค์์คํ์ด์ค ์ง์
๐ ๋ฐฐํฌ ๋ฐ ๋๊ธฐํ
์๋ ๋๊ธฐํ
argocd app sync my-app
๋๋ UI์์ Sync ๋ฒํผ ํด๋ฆญ
์๋ ๋๊ธฐํ ์ค์ (Auto Sync)
argocd app set my-app --sync-policy automated
โ Git์ Pushํ๋ฉด ์๋ ๋ฐฐํฌ๋ฉ๋๋ค ๐
๐ ์ํ ํ์ธ ๋ฐ ๋กค๋ฐฑ
argocd app get my-app
argocd app history my-app
argocd app rollback my-app <revision>
UI์์๋ ์ฝ๊ฒ ๋กค๋ฐฑ ๊ฐ๋ฅํฉ๋๋ค.
๐ก GitOps ํ๋ฆ ์ ๋ฆฌ
๊ฐ๋ฐ โ Git์ Push โ ArgoCD ๊ฐ์ง โ Kubernetes ์๋ ๋ฐฐํฌ
Git์ด ๋ฐฐํฌ ์ํ์ ๊ธฐ์ค(GitOps)์ด ๋๋ฉฐ, ์ธํ๋ผ ์ฝ๋์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ๊ฐ ์ผ๊ด๋๊ณ ์์ ํ๊ฒ ๊ด๋ฆฌ๋ฉ๋๋ค.
๐งฉ ๋ณด๋์ค: Helm, Kustomize ์ง์
ArgoCD๋ ๋จ์ํ YAML๋ฟ ์๋๋ผ ๋ค์๋ ์ง์ํฉ๋๋ค:
- Helm Charts (
--helm
) - Kustomize (
--kustomize
) - Jsonnet ๋ฑ
โCI๋ GitHub Actions, CD๋ ArgoCDโ โ ๊ฐ์ฅ ๊น๋ํ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์์์ ๋๋ค.
'Docker and Kubernetes' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DevOps, Kubernetes์ ๋ฐฐํฌ, GitOps ๊ทธ๋ฆฌ๊ณ ArgoCD (0) | 2025.07.21 |
---|---|
์ปจํ ์ด๋์ ๋์ปค: IT๋ฅผ ๋ชฐ๋ผ๋ ์ฝ๊ฒ ์ดํดํ๊ธฐ (์ ํ๋ธ ์์ ๋งํฌ) (0) | 2024.12.16 |
Docker run Image-Name, ๋์ปค ์คํ ( Docker Client ) (0) | 2019.10.24 |
Docker ๋ฅผ ์ ์ฌ์ฉํ๋๊ฐ? Why use Docker ์ฌ์ฉ์ด์ (0) | 2019.10.24 |