본문으로 건너뛰기
클릭 몇 번으로 글로벌 배포: Kontrol 멀티 클러스터 지원기

클릭 몇 번으로 글로벌 배포: Kontrol 멀티 클러스터 지원기 (SRE 밋업 3회)

원문 정보

주요 구간

  • 00:00 글로벌 배포 데모 영상
  • 03:36 배경: ArgoCD와 Kontrol, OKR 설정
  • 06:08 리전 설정 위치와 파이프라인 설계 선택
  • 10:15 시스템 구조와 Stateless 파이프라인
  • 17:20 방향 전환: GoCD에서 Argo Workflows로
  • 21:58 개설과 이후 배포 현황

Kontrol 이전을 막던 리전 제약

당근 딜리버리 파트가 가장 중요하게 보던 일은 ArgoCD를 쓰는 서비스를 Kontrol로 옮기는 것이었습니다. 2022년 6월 당근은 두 도구로 배포하고 있었는데, ArgoCD는 한국·영국·캐나다·일본 4개 리전을 지원했고 Kontrol은 한국만 지원했습니다. Kontrol을 쓰고 싶은 개발자도 글로벌 배포가 필요하거나 앞으로 필요할 수 있어 이전을 주저했습니다. 딜리버리 파트는 이 제약을 풀기 위해 2022년 2분기부터 글로벌 배포 지원을 가장 높은 우선순위의 OKR로 잡았습니다.

설계 선택과 배포 엔진 교체

  • 배포 승인은 마지막 단계에서 리전별로 받습니다. 동료와 개발팀은 모든 리전에 잘못된 버전이 한꺼번에 나가면 메트릭과 알림이 함께 흔들려 대응하기 어렵다고 봤습니다. 리전 간 일시적인 버전 차이는 허용하되, 오래 이어지면 UI나 알림으로 알리기로 했습니다.
  • 빌드와 이미지 푸시를 맡는 준비 단계는 모든 리전이 공유합니다. 리전마다 실행하면 버전이 혼동될 수 있어 한 번만 실행하기로 했습니다.
  • 배포 리전 목록은 Kontrol DB에 저장합니다. 프로젝트 저장소의 파일에서 리전을 지웠을 때 해당 리전의 서비스를 모두 내려야 하는지 모호하고, UI가 저장소 파일을 읽어 오는 방식도 부자연스럽다고 판단했습니다.
  • 각 클러스터에는 GoCD 에이전트만 설치합니다. Kontrol과 GoCD를 리전마다 복제하지 않았습니다. 반복 수작업을 없애려고 만든 Kontrol을 수작업으로 늘리는 것은 모순이라고 판단했기 때문입니다.

글로벌 배포를 붙이면 GoCD 파이프라인이 프로젝트당 최대 9개로 늘어납니다. 상태는 Kontrol DB가 이미 알고 있어서, 당근은 Stateless 파이프라인을 만들었습니다. 실행마다 프로젝트·단계·리전 파라미터를 넘겨 파이프라인을 동적으로 생성하고, 실행을 마치면 삭제하는 방식입니다. GoCD가 기본 제공하던 기능은 Kontrol에서 직접 구현했습니다.

배포 상세 화면도 최대 9개 단계를 보여 줘야 하므로 단계별 페이지와 사이드바로 나눴습니다. 한 설정에 Secret이 최대 8개 붙으면서 환경변수 설정도 DB에서 관리하기 시작했습니다.

작업이 절반쯤 진행됐을 때, GoCD 대체 엔진으로 Argo Workflows를 조사하던 같은 파트 동료가 Argo Workflows에서 글로벌 배포를 구현하자고 제안했습니다. 발표자는 검증된 GoCD로 글로벌 배포를 출시한 뒤 엔진을 바꾸려 했으나, 두 변경을 함께 진행하는 편이 효율적이라는 의견을 받아들였습니다.

캐나다와 일본의 알파 환경에서는 AWS 계정이 달라 통신이 막혔습니다. 각 계정에 kontrol-admin 역할을 만들고 Assume해서 접근하는 방식으로 해결했습니다.

지원 이후 변화

  • 작업별로 나눠 공개했으며, 글로벌 배포 지원은 2023년 3월 3일 개시
  • Kontrol 이용 프로젝트: 2022년 6월 한국에서만 45개 → 2023년 6월 한국 129개, 영국·캐나다·일본 각 7개
  • ArgoCD 이용 프로젝트: 같은 기간 한국 122개 → 134개

발표자는 글로벌 배포 지원으로 ArgoCD에 남아 있던 이점이 사라졌다고 보고, Kontrol로의 이전이 더 빨라질 것으로 기대했습니다.

일정과 남은 과제

당초 계획은 9개월이었지만, 중간 방향 전환을 포함해 약 1년이 걸렸습니다. 리전 간 버전 차이도 발표 당시 완전히 해소되지는 않았으며, UI 고도화로 보완하기로 합의한 상태였습니다. 발표자가 개발 경험을 높인 도구로 꼽은 것은 TypeScript, Prisma의 자동 스키마 마이그레이션, Graphite입니다.

근거와 세부 수치
리전ArgoCD 2022-06ArgoCD 2023-06Kontrol 2022-06Kontrol 2023-06
한국12213445129
영국465307
캐나다455507
일본445407
항목값근거
배포 단계준비, 알파, 마지막 단계의 3단계슬라이드
GoCD 파이프라인 수프로젝트당 3개, 4개 리전이면 9개자막 기준
한 설정이 참조하는 Secret최대 8개슬라이드
글로벌 배포 지원 오픈2023년 3월 3일자막 기준
글로벌 배포 프로젝트약 7개자막 기준, 슬라이드 표와 일치
계획 대비 기간9개월 계획, 약 1년 소요자막 기준
배포 엔진 교체 결정 회의2022년 9월 26일자막 기준

자동 자막이 GoCD를 “고시디"로 인식해 이름은 슬라이드 표기를 따랐습니다. 20분 이후부터 20:57 사이에는 자막이 없어 슬라이드로만 확인했습니다. 영상 시작부의 데모에는 새 커밋, 4개 리전 활성화, 알파 동시 배포, 리전별 승인 흐름이 나옵니다.

마지막 수정 일자