피드로 돌아가기
I Built a Container Orchestrator in Rust Because Kubernetes Was Too Much and Coolify Wasn't Enough
Dev.toDev.to
Infrastructure

47MB 단일 바이너리로 구현한 Rust 기반 Raft 합의 기반 Multi-node 오케스트레이터

I Built a Container Orchestrator in Rust Because Kubernetes Was Too Much and Coolify Wasn't Enough

Sharang Parnerkar2026년 4월 10일6advanced

Context

Docker Compose의 단일 노드 제약과 Kubernetes의 과도한 운영 복잡성 사이의 간극 발생. 소규모 팀(1~5인)이 2~20대 서버에서 20~100개 서비스를 효율적으로 관리하기 위한 가벼운 제어 평면 필요성 증대.

Technical Solution

  • etcd 의존성을 제거하고 openraft와 redb를 조합하여 Control Plane의 Raft consensus 직접 구현
  • bidirectional WebSocket 기반의 Agent 통신 구조를 통한 실시간 상태 동기화 및 Self-healing 메커니즘 구축
  • wasmtime 통합으로 5ms 수준의 Cold Start와 인스턴스당 2MB 메모리 점유를 달성한 WebAssembly 런타임 지원
  • unresolved config template 기반의 Reconciler 설계를 통한 불필요한 서비스 재시작 방지 및 롤링 업데이트 최적화
  • ACME 클라이언트 및 Reverse Proxy 내장으로 외부 의존성 없는 자동 TLS 인증서 관리 체계 구축
  • Infra Webhook 기반의 GitOps 파이프라인을 내장하여 CI Runner 없이 설정 변경 사항을 즉시 반영하는 구조 설계

- 인프라 규모가 20노드 미만인 경우 K8s 대신 단일 바이너리 기반 오케스트레이터 검토 - 설정 변경 시 전체 재시작을 방지하기 위해 Resolved Value가 아닌 Template 기반의 상태 비교 로직 적용 - 운영 복잡성을 줄이기 위해 API 서버, 프록시, 스케줄러를 하나의 Control Plane으로 통합하는 설계 고려

원문 읽기