CGOA — GitOps 인증 어소시에이트 · 진짜 Argo CD 에서 확인하기 · 실습
git 을 고치면 클러스터가 따라온다
이 실습은 진짜 Argo CD 에서 돕니다
VM 안에 k3s + Argo CD + git 서버가 실제로 떠 있습니다. git 에 커밋하면
Argo CD 가 그것을 읽어 정말로 배포하고, 누가 손으로 고치면 **정말로
되돌립니다.**
CGOA 과정의 다른 실습이 도는 가짜 클러스터에는 Argo CD 가 없습니다. 그래서
드리프트도 자가 치유도 일어날 수 없었습니다 — GitOps 에서 배울 것의
전부가 빠져 있던 셈입니다.
처음 뜨는 데 4~5분 걸립니다.
준비된 것
작업 사본 /srv/gitops 여기서 고치고 커밋·푸시합니다원격 git://gitd.gitsrv.svc.cluster.local:9418/app.gitArgo CD argocd 네임스페이스git 서버는 클러스터 안의 파드입니다. /srv/bare 를 hostPath 로 마운트하고
있어서, VM 에서 푸시하면 Argo CD 가 곧바로 봅니다.
목표
GitOps 의 네 가지 동작을 직접 일으켜 확인합니다. 배포, 변경 추적,
드리프트 감지, 자가 치유입니다.
왜 중요한가
GitOps 의 핵심 주장은 하나입니다. **git 이 유일한 진실의 원천이고, 클러스터는
그 사본이다.**
그 주장이 성립하려면 두 가지가 필요합니다.
- git 을 고치면 클러스터가 따라와야 합니다 (동기화)
- 클러스터를 고치면 되돌아와야 합니다 (자가 치유)
두 번째가 특히 중요합니다. 자가 치유가 없으면 kubectl 로 직접 고친 것이
그대로 남고, git 과 클러스터가 조용히 갈라집니다. 그러면 git 은 더 이상
진실이 아니고, 다음 배포 때 그 차이가 한꺼번에 터집니다.
단계
1. /srv/gitops 에 app/deploy.yaml(네임스페이스 shop, 디플로이먼트 web, 레플리카 2)을 만들고 푸시한 뒤, git 서버가 그것을 내주는지 /root/cgo/repo.txt 에 담으세요.
2. shop Application 을 만들어(automated·prune·selfHeal) 실제로 배포되는 것을 /root/cgo/app.txt 에 담으세요.
3. git 에서 레플리카를 3 으로 고치고 푸시해, 클러스터가 따라오는 것을 /root/cgo/gitchange.txt 에 담으세요. kubectl 로 직접 고치지 마세요.
4. selfHeal 을 끄고 kubectl 로 레플리카를 바꿔 OutOfSync 가 되는 것을 /root/cgo/drift.txt 에 담으세요.
5. selfHeal 을 다시 켜서 되돌아오는 것을 /root/cgo/selfheal.txt 에 담으세요.
6. git 에 ConfigMap extra 를 넣어 배포한 뒤 git 에서 지워 prune 이 클러스터에서도 지우는 것을 /root/cgo/prune.txt 에 담으세요.
7. 배포 이력을 확인해 /root/cgo/history.txt 에 담고, GitOps 에서 되돌리기가 무엇인지 적으세요.
8. /root/cgo/report.md 에 selfheal=yes, prune=yes, replicas= 세 줄과 설명을 쓰세요.
참고
- 푸시는
git -C /srv/gitops push origin main입니다. 원격은 이미 설정되어 있습니다. - Argo 가 git 을 다시 읽는 주기는 기본 3분입니다. 기다리지 않으려면
argocd app get shop --refresh나kubectl -n argocd patch app shop --type merge -p '{"metadata":{"annotations":{"argocd.argoproj.io/refresh":"hard"}}}'를 쓰세요. - 상태는
kubectl -n argocd get app shop -o jsonpath='{.status.sync.status}'로 봅니다. selfHeal을 끄고 켜는 것은kubectl -n argocd patch app shop --type merge -p '{"spec":{"syncPolicy":{"automated":{"selfHeal":false}}}}'입니다.- 흔한 실수 1: 4번에서
selfHeal을 켠 채로 드리프트를 만드는 것. 몇 초 만에 되돌아가서OutOfSync를 볼 수 없습니다. - 흔한 실수 2:
prune을 켜 두고 git 에서 실수로 파일을 지우는 것. 클러스터에서도 지워집니다 — 그래서 기본값이 꺼짐입니다.
단계 8개
- git 이 진실의 원천이 되려면
- Argo 가 git 을 읽어 배포한다
- git 을 고치면 따라온다
- 손으로 고치면 갈라진다
- 다시 켜면 되돌아온다
- git 에서 지우면 클러스터에서도 지운다
- 되돌리기는 git 을 되돌리는 것이다
- 무엇을 배웠나