피드로 돌아가기
I ported Kubernetes to the browser
Hacker NewsHacker News
Infrastructure

WebAssembly 한계를 극복한 140KiB 규모의 Browser-native Kubernetes 포팅

I ported Kubernetes to the browser

2026년 6월 30일17advanced

Context

Kubernetes를 브라우저 환경에서 실행하여 인터랙티브한 교육 콘텐츠를 제공하려는 목적의 프로젝트. 기존 Go 기반 Kubernetes를 WebAssembly(Wasm)로 컴파일할 경우 시스템 API 의존성으로 인한 런타임 에러와 540KiB 이상의 과도한 바이너리 크기가 발생하는 제약 존재.

Technical Solution

  • Wasm 컴파일 대신 TypeScript를 통한 Partial Porting 방식으로 브라우저 환경 최적화
  • kubelet 및 Scheduler, kube-proxy 등 핵심 Controller의 기능을 TypeScript로 재구현하여 제어 평면 구축
  • 브라우저 기반 Container Runtime Interface(CRI) 및 Container Network Interface(CNI) 설계를 통한 Pod 간 가상 네트워크 통신 구현
  • Docker Hub 의존성을 제거하고 TypeScript API 기반의 자체 Browser-based Registry를 구축하여 이미지 크기 최소화
  • LLM Agent 군단을 활용한 의존성 체인 분석 및 코드 생성으로 대규모 포팅 작업의 개발 속도 가속화

Impact

  • Gzipped 기준 약 140KiB의 경량 크기 달성 (단순 Go-Wasm Hello World의 540KiB 대비 약 74% 감소)
  • 2개월의 개발 기간 동안 629개 파일, 약 100,000라인의 코드 생성 및 552회 커밋 수행
  • 최대 주간 1,811.64달러의 LLM 토큰 비용 투입을 통한 복잡한 컨트롤러 로직 포팅 완료

Key Takeaway

특정 환경(Browser)의 시스템 제약이 명확할 때 전체 컴파일보다 핵심 도메인 로직만 추출하여 재구현하는 Partial Porting이 리소스 효율성과 실행 가능성 측면에서 유리함.


1. 타겟 환경에서 사용 불가능한 시스템 API 의존성을 먼저 파악하고 추상화 계층 설계

2. 바이너리 크기가 임계치(Critical Path)일 경우 Wasm 등 컴파일 방식보다 Native 언어 재작성 검토

3. 대규모 레거시 코드 포팅 시 LLM Agent를 이용한 의존성 그래프 분석 및 단계적 구현 전략 적용

원문 읽기