๐น Argo CD ์น UI๋?
Argo CD๋ ์น UI, CLI, API๋ฅผ ํตํด Kubernetes ์ ํ๋ฆฌ์ผ์ด์
์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๊ทธ์ค ์น UI๋ ๋ฐฐํฌ ์ํ๋ฅผ ์ง๊ด์ ์ผ๋ก ํ์ธํ๊ณ , ๋๊ธฐํ(Sync) ๋ฐ ๋กค๋ฐฑ(Rollback) ๋ฑ์ ์์
์ ๊ฐํธํ๊ฒ ์ํํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค.
โ
Argo CD ์น UI์ ์ฃผ์ ๊ธฐ๋ฅ:
โ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
๋ชฉ๋ก ๋ฐ ์ํ ๋ชจ๋ํฐ๋ง
โ ํน์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋๊ธฐํ(Sync) ๋ฐ ๋กค๋ฐฑ(Rollback)
โ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฆฌ์์ค ํธ๋ฆฌ ๋ฐ ๋ก๊ทธ ์กฐํ
โ Kubernetes ํด๋ฌ์คํฐ ๋ฐ ํ๋ก์ ํธ ๊ด๋ฆฌ
๐น Argo CD ์น UI ์ ์ ๋ฐฉ๋ฒ
โ 1. ํฌํธ ํฌ์๋ฉ์ ์ด์ฉํ ๋ก์ปฌ ์ ์
Argo CD๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด๋ถ ๋คํธ์ํฌ์์ ์คํ๋๋ฏ๋ก, ๋ก์ปฌ์์ ์ ๊ทผํ๋ ค๋ฉด ํฌํธ ํฌ์๋ฉ์ด ํ์ํฉ๋๋ค.
kubectl port-forward svc/argocd-server -n argocd 8080:443
์ด์ ๋ธ๋ผ์ฐ์ ์์ ๋ค์ ์ฃผ์๋ก ์ ์ํ๋ฉด ์น UI์ ์ ๊ทผํ ์ ์์ต๋๋ค.
https://localhost:8080
โ 2. LoadBalancer ๋๋ Ingress๋ฅผ ์ด์ฉํ ์ธ๋ถ ์ ์
ํ๋ก๋์ ํ๊ฒฝ์์๋ LoadBalancer ๋๋ Ingress๋ฅผ ์ฌ์ฉํ์ฌ Argo CD์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๋ฐฉ๋ฒ 1: LoadBalancer ์๋น์ค ๋ ธ์ถ
kubectl get svc -n argocd
์ถ๋ ฅ ์์:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
argocd-server LoadBalancer 10.100.200.1 192.168.1.100 443:31234/TCP
์ด ๊ฒฝ์ฐ, https://192.168.1.100์ผ๋ก ์ ์ํ๋ฉด Argo CD UI๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐฉ๋ฒ 2: Ingress๋ฅผ ํตํ ๋๋ฉ์ธ ์ ๊ทผ
Helm์ ์ฌ์ฉํ์ฌ Ingress๋ฅผ ์ค์ ํ๋ฉด, https://argocd.example.com๊ณผ ๊ฐ์ด ๋๋ฉ์ธ์ผ๋ก ์ ๊ทผํ ์๋ ์์ต๋๋ค.
server:
ingress:
enabled: true
hosts:
- argocd.example.com
โ 3. Argo CD ๋ก๊ทธ์ธ
Argo CD ์น UI ๋ก๊ทธ์ธ ํ์ด์ง์์ admin ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํฉ๋๋ค.
์ด๊ธฐ ๋น๋ฐ๋ฒํธ๋ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ํ์ธํ ์ ์์ต๋๋ค.
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 --decode
๋ณด์์ ์ํด ๋ก๊ทธ์ธ ํ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๐น Argo CD ์น UI ์ฃผ์ ๊ธฐ๋ฅ ์ดํด๋ณด๊ธฐ
โ
1. ์ ํ๋ฆฌ์ผ์ด์
๋์๋ณด๋
Argo CD ์น UI์ ๋ก๊ทธ์ธํ๋ฉด, ๊ทธ๋ฆผ 1)๊ณผ ๊ฐ์ด ํ์ฌ ๋ฐฐํฌ๋ ์ ํ๋ฆฌ์ผ์ด์
๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค.
๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์๋ **๋ฐฐํฌ ์ํ(Sync Status)์ ๊ฑด๊ฐ ์ํ(Health Status)**๊ฐ ํ์๋ฉ๋๋ค.
์ํ | ์ค๋ช |
Synced | ์ ํ๋ฆฌ์ผ์ด์ ์ด Git ์ ์ฅ์์ ์ ์ธ๋ ์ํ์ ์ผ์นํจ |
OutOfSync | ์ ํ๋ฆฌ์ผ์ด์ ์ด Git ์ํ์ ๋ค๋ฆ (์๋/์๋ ๋๊ธฐํ ํ์) |
Healthy | ๋ชจ๋ Kubernetes ๋ฆฌ์์ค๊ฐ ์ ์์ ์ผ๋ก ๋์ ์ค |
Degraded | ์ผ๋ถ ๋ฆฌ์์ค๊ฐ ์ค๋ฅ ์ํ |
Missing | ์ ์ธ๋ ๋ฆฌ์์ค๊ฐ ํด๋ฌ์คํฐ์์ ๋ฐ๊ฒฌ๋์ง ์์ |
โ 2. ์ ํ๋ฆฌ์ผ์ด์ ์์ธ ํ์ด์ง
๊ทธ๋ฆผ 2์ ๊ฐ์ด ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋ฆญํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ ์ํ ๋ฐ ๋๊ธฐํ ์ํ ํ์ธ
- ๊ฐ ๋ฆฌ์์ค(Pod, Service, Deployment ๋ฑ)์ ์ํ ๋ชจ๋ํฐ๋ง
- ์ด๋ฒคํธ ๋ก๊ทธ ๋ฐ ์๋ฌ ๋ฉ์์ง ํ์ธ
โ 3. ์ ํ๋ฆฌ์ผ์ด์ ๋๊ธฐํ(Sync) ๋ฐ ๋กค๋ฐฑ(Rollback)
๐น ์ ํ๋ฆฌ์ผ์ด์ ๋๊ธฐํ(Sync)
Git ์ ์ฅ์์์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋ฉด "OutOfSync" ์ํ๋ก ํ์๋ฉ๋๋ค.
์ด๋ "SYNC" ๋ฒํผ์ ํด๋ฆญํ๋ฉด Git์ ์ต์ ์ํ๋ก Kubernetes ๋ฆฌ์์ค๊ฐ ์
๋ฐ์ดํธ๋ฉ๋๋ค.
๐น ํน์ ์ปค๋ฐ์ผ๋ก ๋กค๋ฐฑ(Rollback)
- ๋ฐฐํฌ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ด์ ์ํ๋ก ๋กค๋ฐฑ ๊ฐ๋ฅ
- ๊ทธ๋ฆผ 3)๊ณผ ๊ฐ์ด "HISTORY & ROLLBACK" ํญ์์ ํน์ ๋ฒ์ ์ ์ ํํ๊ณ "ROLLBACK" ๋ฒํผ ํด๋ฆญ
โ 4. ๋ฆฌ์์ค ํธ๋ฆฌ ๋ฐ ์ค์๊ฐ ๋ก๊ทธ ์กฐํ
Argo CD UI์์๋ ์์ ๊ทธ๋ฆผ 2)์ ๊ฐ์ด ๊ฐ ๋ฆฌ์์ค๊ฐ ์ด๋ป๊ฒ ๋ฐฐํฌ๋์๋์ง ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
- ๋ฆฌ์์ค ํธ๋ฆฌ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ Kubernetes ๋ฆฌ์์ค๋ฅผ ๊ณ์ธต ๊ตฌ์กฐ๋ก ํ์
- Pod ๋ก๊ทธ ๋ณด๊ธฐ: ๊ทธ๋ฆผ 4)์ ๊ฐ์ด ์คํ ์ค์ธ ์ปจํ ์ด๋์ ๋ก๊ทธ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธ
โ 5. ํ๋ก์ ํธ ๋ฐ ์ฌ์ฉ์ ๊ด๋ฆฌ
Argo CD๋ RBAC(Role-Based Access Control)๋ฅผ ํตํด ํ๋ก์ ํธ๋ณ ์ ๊ทผ ๊ถํ์ ์ค์ ํ ์ ์์ต๋๋ค.
- ํ๋ก์ ํธ(Project) ์์ฑ: ํน์ ์ ํ๋ฆฌ์ผ์ด์ ๊ทธ๋ฃน์ ๋ณ๋๋ก ๊ด๋ฆฌ
- ์ฌ์ฉ์(Role) ๋ฐ ๊ถํ ์ค์ : ๊ฐ๋ฐ์, ๊ด๋ฆฌ์ ๋ฑ ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด
๐น Argo CD ์น UI ์ฃผ์ ๊ธฐ๋ฅ ์ ๋ฆฌ
๊ธฐ๋ฅ | ์ค๋ช |
๋์๋ณด๋ | ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ๋ชฉ๋ก ๋ฐ ์ํ ํ์ธ |
์ ํ๋ฆฌ์ผ์ด์ ์์ธ ๋ณด๊ธฐ | ๋ฐฐํฌ ์ํ, ๋ฆฌ์์ค ํธ๋ฆฌ, ๋ก๊ทธ ํ์ธ |
๋๊ธฐํ(Sync) | Git ๋ณ๊ฒฝ ์ฌํญ์ Kubernetes์ ๋ฐ์ |
๋กค๋ฐฑ(Rollback) | ์ด์ ๋ฐฐํฌ ๋ฒ์ ์ผ๋ก ๋ณต๊ตฌ |
๋ฆฌ์์ค ํธ๋ฆฌ | ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฆฌ์์ค๋ฅผ ๊ณ์ธต ๊ตฌ์กฐ๋ก ์๊ฐํ |
RBAC ๊ด๋ฆฌ | ํ๋ก์ ํธ ๋ฐ ์ฌ์ฉ์ ์ ๊ทผ ์ ์ด ์ค์ |
๐น ๊ฒฐ๋ก : ์ด๋ฒ ๊ธ์์ ๋ฐฐ์ด ํต์ฌ ๋ด์ฉ ์ ๋ฆฌ
๐ข Argo CD ์น UI๋ฅผ ํ์ฉํ๋ฉด Kubernetes ์ ํ๋ฆฌ์ผ์ด์
์ ์ง๊ด์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
๐ข ํฌํธ ํฌ์๋ฉ, LoadBalancer, Ingress๋ฅผ ์ด์ฉํ์ฌ UI์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ ํ์ต
๐ข ์ ํ๋ฆฌ์ผ์ด์
๋๊ธฐํ(Sync), ๋กค๋ฐฑ(Rollback), ๋ก๊ทธ ์กฐํ ๋ฑ์ ๊ธฐ๋ฅ์ UI์์ ์ฝ๊ฒ ์คํ ๊ฐ๋ฅ
๐ข RBAC ์ค์ ์ ํตํด ํ๋ก์ ํธ ๋ฐ ์ฌ์ฉ์ ๊ถํ์ ๊ด๋ฆฌํ ์ ์์