피드로 돌아가기
Dev.toInfrastructure
원문 읽기
47MB 단일 바이너리로 구현한 Rust 기반 Raft 합의 기반 Multi-node 오케스트레이터
I Built a Container Orchestrator in Rust Because Kubernetes Was Too Much and Coolify Wasn't Enough
AI 요약
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으로 통합하는 설계 고려