Gitpod 是一个云开发环境平台,最近决定在使用了 Kubernetes 六年之后,逐步放弃使用 Kubernetes。这一决定源于他们在为 150 万用户管理开发环境时积累的经验,尤其是在处理大量日常环境时的挑战。
主要观点与背景
- 决策背景:Gitpod 的 CTO 兼联合创始人 Christian Weichel 和工程师 Alejandro de Brito Fontes 在博客中详细阐述了这一决策的历程。他们发现,尽管 Kubernetes 非常适合生产环境,但在开发环境中却面临显著挑战。
- 开发环境的特殊性:开发环境具有高度状态性和交互性,开发人员深度参与源代码和变更。其资源使用模式不可预测,且需要复杂的权限和能力(如 root 访问和安装软件包),这与典型的应用负载不同。
Kubernetes 的挑战
- 初始优势:Kubernetes 最初因其可扩展性、容器编排和丰富的生态系统而被 Gitpod 采用。
扩展后的挑战:
- 资源管理:CPU 和内存分配成为主要问题,开发环境的 CPU 需求波动性大,难以预测。
- 存储优化:Gitpod 尝试了多种存储方案(如 SSD RAID 0、块存储、PVC),但每种方案在性能、可靠性和灵活性上都有权衡。本地磁盘的备份和恢复成本高昂。
- 自动扩展与启动时间优化:Gitpod 探索了多种扩展策略(如“幽灵工作区”、ballast pods、集群自动扩展插件)和镜像拉取优化策略(如 Daemonset 预拉取、层重用、预构建镜像)。
- 网络复杂性:Kubernetes 的网络配置复杂,特别是在开发环境访问控制和网络带宽共享方面。
- 安全与隔离:Gitpod 需要提供安全的环境,同时允许开发人员灵活操作。他们实施了用户命名空间解决方案,包括文件系统 UID 转换、掩码 proc 挂载和自定义网络能力。
探索替代方案
- 微虚拟机技术:Gitpod 尝试了 Firecracker、Cloud Hypervisor 和 QEMU 等微虚拟机技术,这些技术在资源隔离和安全性方面表现出色,但也带来了开销、镜像转换和技术限制等新挑战。
新架构 Gitpod Flex
- 架构设计:Gitpod 开发了新的架构 Gitpod Flex,保留了 Kubernetes 的控制理论和声明式 API,同时简化了架构并提升了安全基础。
核心特性:
- 引入了开发环境相关的抽象层,减少了不必要的基础设施。
- 支持平滑集成 devcontainers,并可在桌面机器上运行开发环境。
- 支持快速自托管部署,并可灵活部署到任何区域,提供更好的合规性和组织边界建模能力。
总结
Gitpod 的旅程强调了选择系统时应基于其对开发者体验的提升、降低运维负担和改善成本效益的能力,而不是简单地选择 Kubernetes 或替代方案。Gitpod Flex 的推出标志着他们在优化开发环境管理方面迈出了重要一步。
延伸阅读
- 对 Gitpod Flex 架构感兴趣的读者可以观看 深度解析会议。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。