LabHub
배우기 러닝패스 코스

GitOps 와 ArgoCD · 드리프트와 self-heal · 실습

리컨실 루프를 손으로 한 바퀴 돌린다

LabHub 에서 이어서 보기

목표

리컨실 루프가 한 바퀴 도는 동안 무슨 일이 벌어지는지를 직접 만들어 봅니다.
원하는 상태를 소유 표시와 함께 적용하고, 흔들리는 필드를 걷어 내고, 무시하기로 한
필드를 빼고 비교하고, 삭제 후보를 골라내고, 빈 결과를 거부하는 데까지 갑니다.

왜 중요한가

gitops-manifest 실습에서 여러분은 손으로 드리프트를 만들고 손으로 되돌렸습니다.
여기서 질문 하나만 하면 GitOps 의 마지막 조각이 나옵니다. **그 적용을 누가
치는가.** 사람이 친다면 그것은 잘 정리된 배포 스크립트이지 GitOps 가 아닙니다.

컨트롤러가 대신 치게 만들려면 판단 기준이 코드로 있어야 합니다. 무엇을 흔들리는
값으로 볼 것인지, 어떤 필드는 남이 소유하도록 둘 것인지, 무엇을 이 앱의 소유로
표시할 것인지, 그리고 결과가 비었을 때 어떻게 할 것인지입니다. selfHeal
최악의 경우 수동 변경이 사라지는 것이고 prune 은 최악의 경우 데이터가 사라지는
것이라, 위험의 급이 다릅니다. 그 판단을 스크립트로 적어 보면 스위치 이름 뒤에
무엇이 있는지가 분명해집니다.

환경

이 파드에는 ArgoCD 컨트롤러가 없습니다. Application 오브젝트는 만들 수 있지만
스스로 Synced 로 바뀌지는 않습니다. 그래서 이 실습은 **선언을 적어 두고 그
선언대로 움직이는 도구를 직접 만드는** 방식으로 갑니다. 필드 소유권과 서버 사이드
적용, 스케줄링 판정은 kwok 이 띄운 진짜 apiserver 가 처리하므로 그 부분은
실물입니다. 작업 디렉터리는 /root/gitops-sh 이고 그 아래 k8s/·desired/·
bin/·out/ 을 씁니다.

단계

1. Application shop 에 스위치와 무시할 필드를 선언합니다.
2. 선언 상태를 소유 표시와 함께 서버 사이드로 적용합니다.
3. bin/normalize.sh 로 흔들리는 필드를 걷어 냅니다.
4. bin/drift.sh 로 무시할 필드를 빼고 비교합니다.
5. 드리프트를 만들고 한쪽만 되돌린 뒤 out/selfheal.txt 에 적습니다.
6. bin/prune.sh 로 삭제 후보를 골라냅니다.
7. bin/sync.sh 가 빈 결과를 거부하게 만듭니다.
8. Synced 인데 정상이 아닌 상태를 만들고 out/status.txt 에 정리합니다.

참고

단계 8개

  1. 루프를 어떻게 돌릴지 선언한다
  2. 원하는 상태를 소유 표시와 함께 적용한다
  3. 흔들리는 필드를 걷어 내는 전처리를 만든다
  4. 무시하기로 한 필드를 빼고 비교한다
  5. 드리프트를 만들고 한쪽만 되돌린다
  6. 삭제 후보를 소유 표시로 골라낸다
  7. 렌더 결과가 비면 멈춘다
  8. Synced 인데 정상이 아닌 상태를 만든다