๐น Argo CD์์ ๋กค๋ฐฑ(Rollback)์ด๋?
Argo CD๋ GitOps ๊ธฐ๋ฐ์ ๋ฐฐํฌ ์๋ํ ๋๊ตฌ๋ก, ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ถ์ ํ๊ณ ํน์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ(Rollback)ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ด ์ ์์ ์ผ๋ก ๋์ํ์ง ์๊ฑฐ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋,
Argo CD๋ฅผ ์ฌ์ฉํ์ฌ ์์ฝ๊ฒ ์ด์ ๋ฒ์ ์ผ๋ก ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
โ
Argo CD์ ๋กค๋ฐฑ ์ฃผ์ ๊ฐ๋
โ ๋ฐฐํฌ ์ด๋ ฅ(Deployment History)์ ์๋์ผ๋ก ์ ์ฅ
โ ์ด์ ๋ฐฐํฌ ๋ฒ์ ์ผ๋ก ์ฝ๊ฒ ๋กค๋ฐฑ ๊ฐ๋ฅ
โ Git ์ ์ฅ์ ๊ธฐ๋ฐ์ ๋กค๋ฐฑ ๋ฐ Kubernetes ์ํ ๋กค๋ฐฑ ์ง์
โ CLI ๋ฐ UI์์ ๋กค๋ฐฑ ์คํ ๊ฐ๋ฅ
๐น Argo CD ๋ฐฐํฌ ์ด๋ ฅ(Deployment History) ๊ด๋ฆฌ
Argo CD๋ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌ ์ด๋ ฅ์ ์๋์ผ๋ก ์ ์ฅํ๋ฉฐ,
์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํน์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ ์ ์์ต๋๋ค.
โ ๋ฐฐํฌ ์ด๋ ฅ ์กฐํ
์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ ์ด๋ ฅ์ ํ์ธํ๋ ค๋ฉด CLI ๋๋ UI๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
argocd app history example-app
์ถ๋ ฅ ์์:
ID REVISION STATUS SOURCE
1 8f7c2d1 Deployed https://github.com/example/repo.git
2 a1b4e5f Deployed https://github.com/example/repo.git
3 c9d3f9a Degraded https://github.com/example/repo.git
โ ID → ๋ฐฐํฌ ๋ฒ์ ๋ฒํธ
โ REVISION → Git ์ปค๋ฐ ํด์ ๊ฐ
โ STATUS → ํ์ฌ ๋ฐฐํฌ ์ํ
๋ฐฐํฌ ์ด๋ ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก 10๊ฐ๊น์ง ์ ์ฅ๋๋ฉฐ, ํ์์ ๋ฐ๋ผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๐น Argo CD ๋กค๋ฐฑ(Rollback) ์ํ ๋ฐฉ๋ฒ
โ 1. ํน์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ๊ธฐ
์ด์ ๋ฐฐํฌ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
argocd app rollback example-app 2
โ ์ค๋ช :
- example-app → ๋กค๋ฐฑํ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ
- 2 → ๋ฐฐํฌ ์ด๋ ฅ์์ ์ ํํ ๋ฒ์ ID
๋กค๋ฐฑ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ํ ํ์ธ:
argocd app get example-app
โ 2. Argo CD UI๋ฅผ ์ฌ์ฉํ ๋กค๋ฐฑ ๋ฐฉ๋ฒ
1๏ธโฃ Argo CD ์น UI์์ ์ ํ๋ฆฌ์ผ์ด์
์ ํ
2๏ธโฃ "HISTORY & ROLLBACK" ๋ฒํผ ํด๋ฆญ
3๏ธโฃ ํน์ ๋ฒ์ ์ ์ ํํ ํ "ROLLBACK" ๋ฒํผ ํด๋ฆญ
4๏ธโฃ ๋กค๋ฐฑ์ด ์๋ฃ๋๋ฉด ์ํ๋ฅผ ํ์ธ
๐น Git ๊ธฐ๋ฐ ๋กค๋ฐฑ vs Kubernetes ์ํ ๋กค๋ฐฑ
Argo CD๋ Git ๊ธฐ๋ฐ ๋กค๋ฐฑ๊ณผ Kubernetes ์ํ ๋กค๋ฐฑ ๋ ๊ฐ์ง ๋ฐฉ์์ ์ง์ํฉ๋๋ค.
๋กค๋ฐฑ ๋ฐฉ์ | ์ค๋ช |
Git ๊ธฐ๋ฐ ๋กค๋ฐฑ | Git ์ ์ฅ์์์ ์ด์ ์ปค๋ฐ์ ์ฒดํฌ์์ํ์ฌ ๋ค์ ๋ฐฐํฌ |
Kubernetes ์ํ ๋กค๋ฐฑ | ์ด์ ๋ฐฐํฌ ์ํ๋ก ๋๋๋ฆผ (Git ๋ณ๊ฒฝ ์์) |
โ Git ๊ธฐ๋ฐ ๋กค๋ฐฑ
git revert HEAD
git push origin main
argocd app sync example-app
- Git์์ ์ด์ ์ปค๋ฐ์ผ๋ก ๋๋๋ฆฐ ํ, Argo CD์์ ๋๊ธฐํ ์คํ
โ Kubernetes ์ํ ๋กค๋ฐฑ
argocd app rollback example-app 2
- ํ์ฌ Git ์ํ๋ฅผ ์ ์งํ ์ฑ Kubernetes์ ๋ฐฐํฌ ์ด๋ ฅ๋ง ๋กค๋ฐฑ
๐ ์ด์ ํ๊ฒฝ์์๋ Git ๊ธฐ๋ฐ ๋กค๋ฐฑ์ด ๊ถ์ฅ๋๋ฉฐ, ๊ธด๊ธ ๋ณต๊ตฌ ์ Kubernetes ์ํ ๋กค๋ฐฑ์ ํ์ฉํ ์ ์์
๐น ๋กค๋ฐฑ ์ ๊ณ ๋ คํด์ผ ํ ์ฌํญ
โ 1. ๋กค๋ฐฑ ํ์๋ Git ์ํ ์ ์ง ํ์
- GitOps ๋ฐฉ์์์๋ Git ์ ์ฅ์๊ฐ ๋จ์ผ ์ ๋ขฐ ์์ฒ(Source of Truth)์ด๋ฏ๋ก,
๋กค๋ฐฑ ํ์๋ Git ์ํ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํจ. - Git์์ revert ํ ๋ค์ push๋ฅผ ์ํํ๋ ๊ฒ์ด ๊ถ์ฅ๋จ.
git revert HEAD
git push origin main
argocd app sync example-app
โ 2. ๋กค๋ฐฑ ํ ๋๊ธฐํ(Sync) ์ค์
- ๋กค๋ฐฑ ํ ์๋ ๋๊ธฐํ๋ฅผ ์ํ ๊ฒฝ์ฐ selfHeal ๊ธฐ๋ฅ์ ํ์ฑํํด์ผ ํจ.
syncPolicy:
automated:
selfHeal: true
- Git ์ํ๋ฅผ ์ ์งํ๋ ค๋ฉด prune: true ์ต์ ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์.
syncPolicy:
automated:
prune: true
selfHeal: true
๐น Argo CD ๋กค๋ฐฑ ๋ฐ ๋ฐฐํฌ ์ด๋ ฅ CLI ๋ช ๋ น์ด ์ ๋ฆฌ
๋ช ๋ น์ด | ์ค๋ช |
argocd app history <APP> | ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ์ด๋ ฅ ํ์ธ |
argocd app rollback <APP> <VERSION> | ํน์ ๋ฐฐํฌ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ |
argocd app get <APP> | ์ ํ๋ฆฌ์ผ์ด์ ์ํ ํ์ธ |
argocd app sync <APP> | Git ์ ์ฅ์์ Kubernetes ์ํ ๋๊ธฐํ |
git revert HEAD && git push | Git ๊ธฐ๋ฐ ๋กค๋ฐฑ ์ํ |
โ ๋กค๋ฐฑ ํ ๋๊ธฐํ:
argocd app sync example-app
โ Git ๊ธฐ๋ฐ ๋กค๋ฐฑ:
git revert HEAD
git push origin main
argocd app sync example-app
โ Kubernetes ์ํ ๋กค๋ฐฑ:
argocd app rollback example-app 2
๐น ๊ฒฐ๋ก : ์ด๋ฒ ๊ธ์์ ๋ฐฐ์ด ํต์ฌ ๋ด์ฉ ์ ๋ฆฌ
๐ข Argo CD๋ ๋ฐฐํฌ ์ด๋ ฅ์ ์๋์ผ๋ก ์ ์ฅํ๋ฉฐ, ํน์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ ์ ์๋ ๊ธฐ๋ฅ ์ ๊ณต
๐ข Git ๊ธฐ๋ฐ ๋กค๋ฐฑ๊ณผ Kubernetes ์ํ ๋กค๋ฐฑ์ ์ง์ํ๋ฉฐ, ์ด์ ํ๊ฒฝ์์๋ Git ๊ธฐ๋ฐ ๋กค๋ฐฑ์ด ๊ถ์ฅ๋จ
๐ข CLI ๋ฐ UI์์ ์์ฝ๊ฒ ๋กค๋ฐฑ ์ํ ๊ฐ๋ฅํ๋ฉฐ, ๋กค๋ฐฑ ํ ๋๊ธฐํ(Sync) ์์
ํ์
๐ข ๋กค๋ฐฑ ํ์๋ Git ์ํ๋ฅผ ์ ์งํ๋ ค๋ฉด git revert ๋ฐ push ์์
์ด ํ์