📅 날짜: Week 6 (Day 3) 🎯 주제: Kubernetes 환경의 모던 GitOps 패턴 — Pull-based 배포, Helm/Kustomize, IRSA, Karpenter ⏱️ 학습 시간: 약 90분
2017년 Weaveworks의 엔지니어 Alexis Richardson은 팀이 겪던 반복적인 문제를 설명하면서 "GitOps"라는 단어를 처음 사용했다. 문제는 간단했다. 운영 팀이 Kubernetes 클러스터 상태를 직접 kubectl apply로 변경하면, 며칠 후 실제 클러스터가 어떤 상태인지 아무도 확신할 수 없었다. 누군가 긴급하게 ConfigMap을 수정했고, 다른 누군가는 Deployment의 replica 수를 바꿨다. 이것을 Drift라고 한다 — 선언적 명세와 실제 시스템 상태가 조용히 벌어지는 현상. Richardson의 해법은 놀랍도록 명확했다. "Git을 진실의 단일 출처로 만들어라. 그리고 클러스터가 스스로 Git을 보고 자신을 수렴시키게 하라." 이것이 GitOps의 핵심 통찰이다.
그러나 GitOps를 이해하려면 먼저 그것이 대체하려는 방식, 즉 Push-based 배포가 왜 K8s 규모에서 문제가 되는지를 이해해야 한다. CI/CD 시스템이 직접 클러스터에 kubectl을 날리는 방식은 작은 팀에선 잘 작동한다. 문제는 클러스터 수가 늘어나고, 팀이 커지고, 보안 감사 요구가 생기면서 드러난다