将 Kubernetes 移植到浏览器
作者成功将 Kubernetes 的部分核心功能移植到了浏览器中运行,生成了近 10 万行 TypeScript 代码,涉及 552 次提交和 629 个文件,耗时 2 个月。
项目动机
Kubernetes 已经成为云原生计算的事实标准,但它的学习曲线非常陡峭。作者希望降低 K8s 学习门槛,让开发者在浏览器中就能体验完整的 K8s 集群——不用安装 Minikube、Kind,不需要云服务账号。
此外,在浏览器中运行 K8s 还有以下价值:
- 测试环境:提交 PR 前可以在本地浏览器预演
- 教育工具:K8s 入门教学无需复杂环境配置
- 开发调试:快速验证资源配置和调度行为
技术实现
核心挑战
Kubernetes 是用 Go 编写的,无法直接在浏览器中运行。作者采取了以下策略:
- 将 K8s API 服务器的核心逻辑重写为 TypeScript
- 使用 WebAssembly 运行关键的原生组件(etcd 模拟、容器运行时模拟)
- 实现轻量级的 Pod 调度器(在浏览器中模拟调度逻辑)
项目结构
- API Server:实现了 Kubernetes API 的核心 REST 接口(Pod、Deployment、Service 等)
- Controller Manager:关键控制循环(ReplicaSet、Deployment 控制器)
- Scheduler:基于 node 资源的调度模拟
- kubelet 模拟:用 Web Worker 模拟节点状态上报
- etcd 模拟:基于 IndexedDB 的键值存储
TypeScript 实现要点
Kubernetes 的 core API 类型通过 OpenAPI spec 自动生成 TypeScript 接口定义。核心资源(Pod、Service、Deployment 等)的结构完全遵循原版 K8s API 规范。
Watch API 通过 WebSocket 模拟实现。
功能与限制
已实现:
- 创建/管理 Pod、Deployment、Service
- 水平自动扩缩容
- ConfigMap/Secret 管理
- kubectl 兼容接口
暂未实现:
- 真正的容器运行时(用模拟替代)
- 网络插件(CNI)
- 持久化存储(PV/PVC)
- 多节点集群(限于单节点模拟)
部署和使用
项目开源(webernetes),访问 GitHub 仓库即可在线体验。浏览器中运行无需任何依赖,打开页面即可创建一个"集群"。
总结
将 Kubernetes 移植到浏览器是一次有趣的工程尝试,证明了现代浏览器(WebAssembly + Web Worker + IndexedDB)的能力边界远超想象。虽然不能取代生产环境的 K8s,但在学习、测试和演示场景中提供了极低的入门门槛。
原文出处:https://ngrok.com/blog/i-ported-kubernetes-to-the-browser