LabHub
배우기 러닝패스 코스

GitOps 와 ArgoCD · 무시 규칙 — 무엇을 비교에서 뺄 것인가 · 실습

늘 OutOfSync 라 무시했더니 진짜 드리프트도 안 보였다

LabHub 에서 이어서 보기

목표

argocd-cm 과 Application 두 자리의 무시 규칙을 직접 쓰고, 규칙이 실제로 어떤 줄을 비교에서 빼는지 CLI 의 diff 로 확인한다. 너무 넓게 무시했을 때 무엇이 함께 사라지는지 눈으로 본다.

왜 중요한가

자동 동기화를 켜면 곧 '늘 OutOfSync' 를 만난다. HPA 가 바꾼 replicas, 웹훅이 끼워 넣은 사이드카, 컨트롤러가 붙인 주석처럼 저장소에 적을 수 없는데 클러스터에는 반드시 생기는 것들 때문이다. 무시 규칙은 이것을 다루는 도구인데, 여기에는 한쪽으로만 기우는 힘이 있다 — 넓게 무시하면 화면이 조용해지고, 좁게 무시하면 계속 시끄럽다. 그래서 누구나 넓은 쪽으로 간다. 넓은 규칙의 대가는 당장 보이지 않는다. 몇 달 뒤 누가 손으로 이미지를 바꿔도 아무도 모르는 날에야 드러난다. 규칙을 짐작으로 쓰지 않고 '이 규칙이 지우는 줄' 을 눈으로 확인하고 커밋하는 습관이 이 대가를 막는다.

단계

1. /root/ga-ignore/live.yamlga-ignore 네임스페이스의 Deployment web 을 만드세요 — spec.replicas 는 4, 컨테이너는 app(이미지 nginx:1.25)과 sidecar(이미지 envoy:1.31) 두 개, metadata.annotationsdeployment.kubernetes.io/revision: "7" 를 둡니다. /root/ga-ignore/argocd-cm.yamldata: {} 인 빈 ConfigMap 입니다. argocd admin settings resource-overrides ignore-differences /root/ga-ignore/live.yaml --argocd-cm-path /root/ga-ignore/argocd-cm.yaml 의 출력을 /root/ga-ignore/none.txt 에 저장하세요.
2. /root/ga-ignore/argocd-cm-pointer.yaml 에 키 resource.customizations.ignoreDifferences.apps_Deployment 를 두고 jsonPointers/spec/replicas 하나만 무시하게 하세요. /root/ga-ignore/live.yaml 에 대한 출력을 /root/ga-ignore/pointer.txt 에 저장하세요.
3. /root/ga-ignore/argocd-cm-jq.yamljqPathExpressions 하나로 이름이 sidecar 인 컨테이너의 image 만 무시하게 하세요. 출력을 /root/ga-ignore/jq.txt 에 저장합니다. app 컨테이너의 이미지는 빠지면 안 됩니다.
4. /root/ga-ignore/argocd-cm-both.yaml 하나에 jsonPointers(/spec/replicas)와 jqPathExpressions(sidecar 이미지)를 함께 두고, 출력을 /root/ga-ignore/both.txt 에 저장하세요. 두 가지가 모두 빠지고 app 컨테이너의 이미지는 남아야 합니다.
5. /root/ga-ignore/argocd-cm-wide.yamljsonPointers/spec 통째로를 무시하게 하고 출력을 /root/ga-ignore/wide.txt 에 저장하세요. 이 출력에는 컨테이너 이미지 줄까지 들어 있습니다 — 즉 누가 이미지를 몰래 바꿔도 비교에 걸리지 않는다는 뜻입니다.
6. /root/ga-ignore/argocd-cm-mfm.yamlmanagedFieldsManagerskubectl 하나만 두고 출력을 /root/ga-ignore/mfm-only.txt 에 저장하세요. 이어서 /root/ga-ignore/argocd-cm-mfm2.yaml 에 같은 managedFieldsManagersjsonPointers(/metadata/annotations)를 함께 두고 출력을 /root/ga-ignore/mfm-plus.txt 에 저장하세요. 두 출력이 어떻게 다른지 보세요.
7. /root/ga-ignore/argocd-cm-updates.yaml 한 장에 키 두 개를 두세요 — resource.customizations.ignoreDifferences.apps_DeploymentjsonPointers/spec/replicas 를, resource.customizations.ignoreResourceUpdates.apps_DeploymentjsonPointers/metadata/annotations 를 무시합니다. 같은 파일에 대해 ignore-differences 출력을 /root/ga-ignore/updates-diff.txt 에, ignore-resource-updates 출력을 /root/ga-ignore/updates-upd.txt 에 저장하세요.
8. /root/ga-ignore/application.yaml 에 Application ga-ignore-web(네임스페이스 argocd, 프로젝트 default)을 만들어 kwok 클러스터에 적용하세요. spec.ignoreDifferences 에 group apps, kind Deployment 인 항목 하나를 두고 그 안에 /spec/replicas 포인터와 sidecar 이미지를 고르는 jq 식을 함께 넣습니다. 그리고 /root/ga-ignore/ignore-matrix.tsv<ConfigMap파일>\t<찾을 글자>\t<yes|no> 네 줄 이상을 적고, /root/ga-ignore/check-ignore.sh 로 전부 검사해 출력을 /root/ga-ignore/ignore-result.txt 에 저장하세요. 스크립트는 표준출력에만 쓰고 한 줄이라도 틀리면 0 이 아닌 코드로 끝나야 합니다.

참고

단계 8개

  1. 규칙이 없을 때의 출력부터 본다
  2. 필드 하나를 가리켜 빼낸다
  3. 배열에서 조건으로 고르는 것은 jq 만 된다
  4. 두 방식을 한 규칙에 함께 쓴다
  5. 너무 넓게 무시하면 드리프트가 영영 안 보인다
  6. 관리자 이름으로 무시하는 규칙은 미리보기가 안 된다
  7. 동기화 판정과 조정 루프 깨우기는 다른 손잡이다
  8. 앱 하나에만 걸리는 규칙과 회귀 검사