๐น Argo CD CLI๋?
Argo CD๋ ์น UI, CLI(Command Line Interface), API๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๊ทธ์ค CLI๋ ์๋ํ ๋ฐ ์ด์ ๊ด๋ฆฌ๋ฅผ ์ํด ํ์์ ์ธ ๋๊ตฌ๋ก, GitOps ์ํฌํ๋ก์ฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ดํ ์ ์์ต๋๋ค.
โ CLI๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์์ ์ด ๊ฐ๋ฅํฉ๋๋ค:
โ Argo CD ์๋ฒ์ ๋ก๊ทธ์ธํ๊ณ ์ธ์ฆ ๊ด๋ฆฌ
โ ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ, ์ญ์ ๋ฐ ๋๊ธฐํ(Sync)
โ ๋ฐฐํฌ ์ํ ํ์ธ ๋ฐ ๋กค๋ฐฑ ์ํ
โ Kubernetes ํด๋ฌ์คํฐ ๋ชฉ๋ก ์กฐํ ๋ฐ ๊ด๋ฆฌ
๐น Argo CD CLI ์ค์น ๋ฐฉ๋ฒ
โ 1. macOS์์ ์ค์น
Homebrew๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ์ค์นํ ์ ์์ต๋๋ค.
brew install argocd
โ 2. Linux์์ ์ค์น
๋ฆฌ๋ ์ค ํ๊ฒฝ์์๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ์ค์นํฉ๋๋ค.
VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")')
curl -sLO https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
chmod +x argocd-linux-amd64
sudo mv argocd-linux-amd64 /usr/local/bin/argocd
โ 3. Windows์์ ์ค์น
Windows ์ฌ์ฉ์๋ choco๋ฅผ ์ด์ฉํ์ฌ ์ค์นํ ์ ์์ต๋๋ค.
choco install argocd-cli
โ ์ค์น ํ, ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธ
argocd version
๐ก ์์ ์ถ๋ ฅ ๊ฐ
argocd: v2.6.5
BuildDate: 2023-10-11T12:00:00Z
GitCommit: a1b2c3d
GoVersion: go1.19
๐น Argo CD CLI ๊ธฐ๋ณธ ๋ช ๋ น์ด ์ฌ์ฉ๋ฒ
โ 1. Argo CD ์๋ฒ ๋ก๊ทธ์ธ
Argo CD CLI๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์๋ฒ์ ๋ก๊ทธ์ธํด์ผ ํฉ๋๋ค.
argocd login <ARGOCD_SERVER>
๐ก ์์ :
argocd login argocd.example.com --username admin --password <๋น๋ฐ๋ฒํธ>
๐น <ARGOCD_SERVER>๋ Argo CD ์๋ฒ ์ฃผ์์ด๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก localhost:8080์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
๐น ์ฒซ ๋ก๊ทธ์ธ ํ์๋ ๋ณด์์ ์ํด ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์ ๊ถ์ฅํฉ๋๋ค.
argocd account update-password
โ 2. ์ ํ๋ฆฌ์ผ์ด์ ๋ชฉ๋ก ์กฐํ
Argo CD์ ๋ฑ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ธํ ์ ์์ต๋๋ค.
argocd app list
๐ก ์์ ์ถ๋ ฅ ๊ฐ
NAME CLUSTER STATUS HEALTH SYNC STATUS
frontend in-cluster Deployed Healthy Synced
backend in-cluster Degraded OutOfSync
โ 3. ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ
Argo CD์์ ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ์ CLI๋ฅผ ํตํด ์์ฑํ ์ ์์ต๋๋ค.
argocd app create my-app \
--repo https://github.com/example/repo.git \
--path manifests \
--dest-server https://kubernetes.default.svc \
--dest-namespace default
โ ์ฃผ์ ์ต์ ์ค๋ช
• --repo → Git ์ ์ฅ์ URL
• --path → ๋งค๋ํ์คํธ๊ฐ ์์นํ ๊ฒฝ๋ก
• --dest-server → Kubernetes ํด๋ฌ์คํฐ API ์๋ฒ ์ฃผ์
• --dest-namespace → ๋ฐฐํฌ๋ ๋ค์์คํ์ด์ค
โ 4. ์ ํ๋ฆฌ์ผ์ด์ ๋๊ธฐํ(Sync) ๋ฐ ์ํ ํ์ธ
์ ํ๋ฆฌ์ผ์ด์ ์ Git ๋ณ๊ฒฝ ์ฌํญ์ Kubernetes ํด๋ฌ์คํฐ์ ๋๊ธฐํํ ์ ์์ต๋๋ค.
argocd app sync my-app
๐ก ์์ ์ถ๋ ฅ ๊ฐ
Application 'my-app' is now synced
์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฌ ์ํ๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
argocd app get my-app
๐ก ์์ ์ถ๋ ฅ ๊ฐ
Name: my-app
Project: default
Sync Status: Synced
Health Status: Healthy
โ 5. ์ ํ๋ฆฌ์ผ์ด์ ๋กค๋ฐฑ
Git์ ํน์ ์ปค๋ฐ ๋๋ ๋ฐฐํฌ ์ด๋ ฅ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋กค๋ฐฑํ ์ ์์ต๋๋ค.
argocd app rollback my-app 2
๐น 2๋ ์ด์ ๋ฐฐํฌ ๋ฒ์ ์ ์๋ฏธํ๋ฉฐ, ์ต์ ๋ฒ์ ๋ถํฐ ์ซ์๊ฐ ๊ฐ์ํ๋ ๋ฐฉ์์ ๋๋ค.
๐น Argo CD ์ ํ๋ฆฌ์ผ์ด์ ์ญ์ ๋ฐ Cascade ์ต์ ์ดํด
โ 6. ์ ํ๋ฆฌ์ผ์ด์ ์ญ์
argocd app delete my-app
๐ก ์์ ์ถ๋ ฅ ๊ฐ
Application 'my-app' deleted
โ Cascade ์ต์ ์ ์ข ๋ฅ ๋ฐ ๋์ ๋ฐฉ์
์ต์ | ์ค๋ช |
--cascade=true | ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ํจ๊ป ์ญ์ (๊ธฐ๋ณธ๊ฐ) |
--cascade=false | ์ ํ๋ฆฌ์ผ์ด์ ๋ง ์ญ์ ํ๊ณ ๋ฆฌ์์ค๋ ์ ์ง |
โ Cascade ์ต์ ์ฌ์ฉ ์์
# ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ (๊ธฐ๋ณธ๊ฐ)
argocd app delete my-app --cascade=true
# ์ ํ๋ฆฌ์ผ์ด์
๋ง ์ญ์ ํ๊ณ ๋ฆฌ์์ค ์ ์ง
argocd app delete my-app --cascade=false
๐น Argo CD ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ญ์ ๋์ง ์๋ ๊ฒฝ์ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ
1๏ธโฃ Finalizer ๋ฌธ์ (์ญ์ ๋๊ธฐ ์ํ)
kubectl patch application my-app -n argocd --type=json -p='[{"op": "remove", "path": "/metadata/finalizers"}]'
kubectl delete application my-app -n argocd
2๏ธโฃ Argo CD ์๋ ๋ณต์ (Git ์ ์ฅ์์์ ๋ค์ ์์ฑ๋จ)
argocd app delete my-app --cascade=true --grpc-web
๐น Git ์ ์ฅ์์์ ์ ํ๋ฆฌ์ผ์ด์ ๋งค๋ํ์คํธ๋ ํจ๊ป ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
3๏ธโฃ OwnerReferences ๋ฌธ์ (์์ ๋ฆฌ์์ค์ ์ํด ๋ณดํธ๋จ)
kubectl patch application my-app -n argocd --type=json -p='[{"op": "remove", "path": "/metadata/ownerReferences"}]'
kubectl delete application my-app -n argocd
4๏ธโฃ Argo CD ์ปจํธ๋กค๋ฌ ๋ฌธ์
kubectl rollout restart deployment argocd-application-controller -n argocd
argocd app delete my-app --cascade=true