
토스증권 데이터 인프라팀이 겪은 컨트롤 플레인 설계와 드라이버 무중단 전환 기술 노하우
본 아티클은 쿠버네티스 환경에서 Spark Connect 서버들의 생명주기를 효율적으로 제어하기 위한 Control Plane 구성 방식을 다룹니다. Apache Spark Operator와 자체 개발한 Spark Tenant Operator의 역할을 명확히 나누어 Blue-Green 배포 및 세션 드레인을 구현했습니다. 또한 커스텀 gRPC 헬스체크와 Network IP 우회 설정을 통해 기동 과정의 교착 상태까지 해결한 실무적 인사이트를 제공합니다.
쿠버네티스상에서 대용량 데이터 처리 워크로드를 운영하거나 Stateful한 데이터 분석 서버의 무중단 배포 체계를 고민하는 데브옵스 및 데이터 엔지니어에게 적극 추천합니다.
여러 Spark Connect 서버의 생명주기를 관리할 때, 실행 중인 세션을 끊지 않고 버전을 업데이트하거나 장애를 복구해야 하는 문제가 있었습니다. 또한 Driver Pod의 readiness 판정 오류로 인해 초기화 단계에서 Executor와 Driver 간의 연결 교착 상태가 발생했습니다.
단일 서버 관리는 Apache Spark Operator에 맡기고, 다중 서버 테넌트 관리는 커스텀 Spark Tenant Operator를 구축하여 두 계층으로 역할을 분리했습니다. 신규 세션 목적지만 전환하는 Blue-Green 방식과 세션 드레인 매커니즘을 도입하고, gRPC 기반 readiness probe 및 Driver Pod IP 직접 연결 옵션을 통해 초기화 교착을 해결했습니다.
기존 세션을 안전하게 유지하면서 Spark 서버 설정 및 버전을 무중단으로 적용할 수 있는 Control Plane을 구축했습니다. 테넌트 단위의 가용성과 동작 상태를 분리 표현하여 시스템 운용의 투명성을 확보했습니다.
Trade-off
기존 서버의 세션 종료를 기다리는 드레인 제한 시간이 기본 90분으로 설정되어 있어, 90분을 초과하는 초장기 실행 세션은 서버 삭제 시점에 세션이 단절될 수 있습니다.
용도별 Spark Connect 서버 집합(테넌트)의 목표 개수, 이미지, 자원 설정을 선언적으로 관리하는 오퍼레이터입니다. Deployment와 유사하게 여러 SparkApplication의 생명주기와 세션 전환을 제어합니다.
새로운 버전의 서버들을 목표 수만큼 온전히 준비한 뒤 신규 요청 목적지를 한 번에 전환하는 배포 방식입니다. 기존 서버는 드레인 상태로 전환되어 기존 작업이 끝날 때까지 대기한 후 안전하게 정리됩니다.
Driver Pod가 실제 Connect 요청을 수용할 수 있는지 확인하는 검사 메커니즘과, 초기화 과정에서 DNS 게시 조건이 맞물려 발생하는 대기 상태 문제입니다.