89. ArgoCD (아고씨디) - K8s GitOps 선언적 배포 도구

⚠️ 이 문서는 어제 배운 'GitOps(Pull 기반 배포)'의 뼈대와 사상을 현실의 쿠버네티스(K8s) 클러스터에서 100% 완벽하게 굴러가도록 만들어주는 1등 공신이자, **K8s 클러스터 뱃속에 숨어서 3분마다 바깥쪽 깃허브(Git)의 텍스트 파일(YAML)을 노려보다가 글자가 바뀌는 그 즉시 실제 파드 100대를 번개처럼 지웠다 띄웠다 하며 Git의 글자와 똑같이 클러스터를 강제 성형(Sync)시켜 버리는 미친 집착의 마스터 봇, 'ArgoCD(아고씨디)'**를 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 쿠버네티스 클러스터 안에서 살아 숨 쉬는 '무인 자동 배포 및 감시 에이전트'다. 젠킨스(Jenkins)의 CD(배포) 권력을 완전히 빼앗아버린 클라우드 네이티브 시대의 절대 권력자다.
  2. 가치: kubectl apply를 인간이 수동으로 치지 않게 해준다. Git(깃허브)에 코드를 합치면(Merge), ArgoCD가 알아서 K8s에 반영(Sync)해 주므로, 인프라의 100% 코딩화(IaC)와 무결점 롤백(Git Revert)을 돈 한 푼 안 들이고 아름다운 UI 대시보드와 함께 제공한다.
  3. 기술 체계: Git의 상태를 긁어오는 Repo Server, Git의 바뀐 텍스트(Desired)와 K8s의 현실(Actual) 사이의 틀림(Drift)을 수학적으로 찾아내는 엑스레이 Application Controller, 그리고 그 차이를 메우기 위해 K8s API를 폭격하는 톱니바퀴로 구성된다.

Ⅰ. 아고씨디(ArgoCD)의 강림: 누가 쿠버네티스를 지배하는가

"사람은 Git만 만져라. 클러스터는 내가 지배한다."

  1. Application 객체의 창조 (CRD):
    • ArgoCD를 K8s 클러스터에 설치하면, K8s는 Application이라는 새로운 외계어(CRD)를 배우게 된다.
    • 개발자는 딱 한 번 이 Application yaml 파일을 K8s에 던져준다. "야 ArgoCD 봇아! 너 지금부터 저 바깥에 있는 [https://github.com/my-company/config-repo] 주소 좀 똑바로 째려보고 있어!"
  2. 지독한 3분 카레 (Polling & Webhook):
    • 지시를 받은 ArgoCD 봇은 K8s 클러스터 안에서 밖(Outbound)을 향해 깃허브를 째려본다. 기본적으로 3분에 한 번씩(Polling) git fetch를 때려서 누가 글자를 바꿨는지 샅샅이 뒤진다.
    • 3분도 길어서 못 참는 성격 급한 회사라면? 깃허브 설정 창에 들어가 ArgoCD 주소로 **웹훅(Webhook)**을 뚫어준다.
    • 개발자가 깃허브에 코드를 병합(Merge)하는 그 0.1초의 찰나에, 깃허브가 ArgoCD 옆구리를 푹 찔러버린다. ArgoCD는 즉시 깨어나 바뀐 코드를 낚아채서 1초 만에 K8s 클러스터에 파드를 띄워버리는 빛의 속도를 자랑하게 된다.

📢 섹션 요약 비유: 회장님(개발자)이 비서(ArgoCD)에게 지시합니다. "나는 이제 현장(K8s 클러스터)에 직접 안 간다. 내가 내 방 책상(Git)에 결재 서류(YAML)를 올려두면, 네가 수시로 내 방에 와서 서류를 확인하고, 공장에 가서 서류에 적힌 대로 기계를 켰다 끄고 세팅해 놔!" 비서는 3분마다 회장님 방 문을 열어보고 서류를 체크하는 강박증(Polling)을 가졌지만, 회장님이 무전기(Webhook)로 "서류 올렸다!"라고 치면 1초 만에 뛰어와서 공장 라인(배포)을 싹 뜯어고쳐 버리는 충직하고 소름 돋는 무인 관리인입니다.


Ⅱ. Application Controller: 엑스레이와 강제 성형 수술

이상(Git)과 현실(K8s)의 괴리(Drift)를 찾아내고, 현실의 뼈를 깎아 맞춘다.

  1. 상태 불일치 (Configuration Drift)의 적발:
    • Application Controller가 엑스레이(Diff)를 켠다.
    • 이상(Desired State): Git에 방금 누군가 파드를 3개 띄우라고 replicas: 3이라고 적었다.
    • 현실(Live State): K8s 클러스터를 스캔해보니 파드가 2개밖에 안 돌고 있다.
    • 엑스레이 화면에 이 두 상태가 엇나간 지점(Drift)이 노란색 불빛으로 띠링! 띠링! OutOfSync(동기화 빗나감) 상태라고 미친 듯이 경고를 뿜는다.
  2. Sync (동기화)의 철퇴:
    • 관리자가 UI 대시보드에서 [Sync] 버튼을 누르거나, 아예 Auto-Sync(자동 동기화) 옵션을 켜두었다고 치자.
    • 컨트롤러가 즉각 K8s API 서버의 멱살을 잡고 kubectl apply를 자체적으로 때려버린다.
    • 모자란 1개의 파드를 허공에서 즉시 뻥 띄워 올려서 현실을 3개로 만들어 깃허브(이상)와 완벽한 거울상(100% 일치)으로 강제 성형 수술을 끝내버린다. 화면은 평온한 Synced(동기화 완료) 초록불로 돌아온다.
  3. 스스로 치유하는 불멸의 인프라 (Self-Healing):
    • 새벽에 미친 해커나 직원이 터미널로 들어와서 파드를 손으로 날려버렸다(kubectl delete pod).
    • 3분 뒤 Application Controller가 엑스레이를 돌리고 분노한다. "어? Git 문서엔 파드 3개 띄우라고 되어있는데 현실엔 2개밖에 없잖아! 누가 지웠어!"
    • 컨트롤러는 그 자리에서 즉시 사라진 1개의 파드를 무덤에서 부활(Auto-Healing) 시켜버린다. 인간의 모든 물리적 개입 뻘짓을 1분 단위로 무효화시키는 절대 무적 방패다.

📢 섹션 요약 비유: 성형외과 의사(Application Controller)가 있습니다. 그가 들고 있는 '이상적인 미인의 사진(Git 저장소 텍스트)'이 바로 정답지입니다. 3분마다 수술대 위에 누워있는 환자(K8s 클러스터 현실)의 얼굴을 사진과 1:1로 엑스레이 대조(Diff)합니다. 환자 코가 1cm 비뚤어져 있으면(OutOfSync), 의사는 묻지도 따지지도 않고 즉시 수술용 칼(Sync API)을 들어 환자 코를 깎아버려서 사진과 1픽셀도 안 틀리게 100% 똑같이 강제 복원(Auto-Healing)시켜 버리는 미치광이 완벽주의 시스템입니다.


Ⅲ. 차트와 템플릿의 소화력 (Helm & Kustomize 지원)

생짜 텍스트뿐만 아니라 압축된 빵틀도 기가 막히게 구워낸다.

  1. 템플릿(Template) 엔진의 내장:
    • 깃허브(Git)에 무식하게 1,000줄짜리 쌩얼 deployment.yaml 파일만 올리라는 법은 없다.
    • 어제 배운 Helm(헬름) 차트나 Kustomize 템플릿 덩어리가 깃허브에 올라와 있으면?
    • ArgoCD 뱃속에 있는 Repo Server가 이 덩어리들을 삼킨 뒤, values-prod.yaml 같은 변수 포스트잇을 싹싹 발라 윙~ 하고 기계를 돌려(렌더링) 완벽하고 깨끗한 쌩얼 YAML 파일 1,000줄로 예쁘게 번역(추출)해 낸다.
  2. Kustomize와의 찰떡궁합:
    • 실무에서 ArgoCD는 Kustomize와 가장 많이 쓴다. (Helm은 너무 무겁고 외부 저장소를 거쳐야 하니까).
    • 깃허브 폴더에 base/ (공통 뼈대 1개)를 파놓고, overlays/dev/ 에는 (개발용 램 1GB 변수 패치), overlays/prod/ 에는 (운영용 램 10GB 변수 패치)를 적어둔다.
    • ArgoCD UI 창에서 "너는 prod 폴더 쳐다보고 동기화해!"라고 시키면, ArgoCD가 알아서 base 뼈대 위에 prod용 10GB 패치를 덧바른(Kustomize Build) 최종 완성본을 클러스터에 예쁘게 띄워주는 미친 생산성을 뿜어낸다.

📢 섹션 요약 비유: 바보 로봇은 "설명서 글씨 그대로"만 행동할 수 있습니다. 하지만 ArgoCD(Repo Server 렌더링)는 특급 요리사 로봇입니다. 깃허브(냉장고) 안에 완성된 레토르트 식품(일반 YAML)이 있으면 그냥 데워서(배포) 올리지만, 깃허브 안에 [밀가루, 계란, 소금(Helm/Kustomize 변수)] 파편들이 들어있어도 당황하지 않습니다. 지가 알아서 믹서기(템플릿 엔진 렌더링)를 돌려 완벽하고 맛있는 밀가루 반죽(완성된 쌩얼 YAML)으로 찰떡같이 빚어낸 뒤 클러스터 오븐에 구워내는 완벽한 요리 소화력을 갖추고 있습니다.