LabHub
배우기 러닝패스 코스

CGOA — GitOps認定アソシエイト

gitを直せばクラスタが追ってくる

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

이 실습은 진짜 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.git
Argo CD     argocd 네임스페이스

git 서버는 클러스터 안의 파드입니다. /srv/bare 를 hostPath 로 마운트하고 있어서, VM 에서 푸시하면 Argo CD 가 곧바로 봅니다.

목표

GitOps 의 네 가지 동작을 직접 일으켜 확인합니다. 배포, 변경 추적, 드리프트 감지, 자가 치유입니다.

왜 중요한가

GitOps 의 핵심 주장은 하나입니다. git 이 유일한 진실의 원천이고, 클러스터는 그 사본이다.

그 주장이 성립하려면 두 가지가 필요합니다.

두 번째가 특히 중요합니다. 자가 치유가 없으면 kubectl 로 직접 고친 것이 그대로 남고, git 과 클러스터가 조용히 갈라집니다. 그러면 git 은 더 이상 진실이 아니고, 다음 배포 때 그 차이가 한꺼번에 터집니다.

단계

  1. /srv/gitopsapp/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.mdselfheal=yes, prune=yes, replicas= 세 줄과 설명을 쓰세요.

참고

git 이 진실의 원천이 되려면

/srv/gitopsapp/deploy.yaml(네임스페이스 shop, 디플로이먼트 web, 레플리카 2)을 만들고 푸시한 뒤, git 서버가 그것을 내주는지 /root/cgo/repo.txt 에 담으세요.

/srv/gitops 에서 고치고 커밋한 뒤 푸시합니다. 원격은 클러스터 안의 git 서버입니다.

Argo 가 git 을 읽어 배포한다

shop Application 을 만들어(automated·prune·selfHeal) 실제로 배포되는 것을 /root/cgo/app.txt 에 담으세요.

ApplicationsyncPolicy.automated 를 주면 사람이 sync 를 누르지 않아도 됩니다.

git 을 고치면 따라온다

git 에서 레플리카를 3 으로 고치고 푸시해, 클러스터가 따라오는 것을 /root/cgo/gitchange.txt 에 담으세요. kubectl 로 직접 고치지 마세요.

kubectl 을 쓰지 마세요. git 을 고치고 푸시한 뒤 Argo 가 따라오기를 기다립니다.

손으로 고치면 갈라진다

selfHeal끄고 kubectl 로 레플리카를 바꿔 OutOfSync 가 되는 것을 /root/cgo/drift.txt 에 담으세요.

selfHeal끄고 드리프트를 만드세요. 켜 둔 채로는 몇 초 만에 되돌아가 볼 수 없습니다.

다시 켜면 되돌아온다

selfHeal다시 켜서 되돌아오는 것을 /root/cgo/selfheal.txt 에 담으세요.

selfHeal 을 켜면 Argo 가 git 의 값으로 되돌립니다. 몇 초면 됩니다.

git 에서 지우면 클러스터에서도 지운다

git 에 ConfigMap extra 를 넣어 배포한 뒤 git 에서 지워 prune 이 클러스터에서도 지우는 것을 /root/cgo/prune.txt 에 담으세요.

ConfigMap 을 git 에 넣어 배포한 뒤, git 에서 파일을 지우고 푸시하세요.

되돌리기는 git 을 되돌리는 것이다

배포 이력을 확인해 /root/cgo/history.txt 에 담고, GitOps 에서 되돌리기가 무엇인지 적으세요.

.status.history 에 배포 이력이 있습니다. 그런데 GitOps 에서 되돌리는 방법은 따로 있습니다.

무엇을 배웠나

/root/cgo/report.mdselfheal=yes, prune=yes, replicas= 세 줄과 설명을 쓰세요.

selfheal=, prune=, replicas= 세 줄과 함께 git 이 왜 진실의 원천인지 쓰세요.