作为 CloudFoundry(过去)和 Kubernetes(现在)的提交者,我可能是唯一有资格回答这个问题的人。
类 PaaS
我喜欢将 CloudFoundry 称为“应用程序 PaaS”,将 Kubernetes 称为“容器 PaaS”,但两者之间的区别是相当微妙和流动的,因为这两个项目会随着时间的推移而变化以在相同的市场中竞争。
两者之间的区别在于 CF 有一个暂存层,它接受一个(12 因子)用户应用程序(例如 jar 或 gem)和一个 Heroku 样式的构建包(例如 Java+Tomcat 或 Ruby)并生成一个 droplet(类似于 Docker 映像)。 CF 不会向用户公开容器化接口,但 Kubernetes 会。
观众
CloudFoundry 的主要受众是希望使用 Heroku 样式构建包部署 12 要素无状态应用程序的企业应用程序开发人员。
Kubernetes 的受众范围更广一些,包括提供自己的容器的无状态应用程序和有状态服务开发人员。
这种区别将来可能会改变:
功能比较
随着两个项目的成熟和竞争,它们的异同会发生变化。因此,将以下特征与一粒盐进行比较。
CF 和 K8s 都有许多相似的特性,比如容器化、命名空间、身份验证,
Kubernetes 竞争优势:
- 对共享网络堆栈的容器 pod 进行分组和扩展,而不仅仅是独立扩展
- 自带容器
- 有状态的持久层
- 更大、更活跃的 OSS 社区
- 具有可替换组件和第 3 方插件的更多可扩展架构
- 免费的网络图形用户界面
CloudFoundry 竞争优势:
- 成熟的身份验证、用户分组和多租户支持 [x]
- 自带应用
- 包括负载平衡器
- 由 BOSH [x] 部署、扩展和保持活动状态
- 强大的日志记录和指标聚合 [x]
- 企业 Web GUI [x]
[x] 这些功能不属于 Diego 或 Lattice。
部署
CloudFoundry 的竞争优势之一是它拥有成熟的部署引擎 BOSH,它支持扩展、复活和监控核心 CF 组件等功能。 BOSH 还支持许多具有可插拔云提供商抽象的 IaaS 层。不幸的是,BOSH 的学习曲线和部署配置管理是噩梦般的。 (作为 BOSH 提交者,我想我可以准确地说出来。)
Kubernetes 的部署抽象仍处于起步阶段。核心 repo 中提供了多个目标环境,但它们并非全部正常工作、经过良好测试或得到主要开发人员的支持。这主要是成熟的事情。人们可能期望这会随着时间的推移而改进并增加抽象。例如,Kubernetes on DCOS 允许使用单个命令将 Kubernetes 部署到现有的DCOS 集群。
历史背景
Diego 是对 CF 的 Droplet Execution Agent 的重写。它最初是在 Kubernetes 发布之前开发的,随着竞争格局的发展,它具有更多的功能范围。它最初的目标是生成液滴(用户应用程序 + CF buildpack)并在 Warden(用 Go 重写时重命名为 Garden)容器中运行它们。自成立以来,它也被重新包装为Lattice,这有点像CloudFoundry-lite(尽管该名称是由existing project 取的)。出于这个原因,Lattice 有点像玩具,因为它故意减少了用户的受众和范围,明确地缺少使其“为企业做好准备”的功能。 CF 已经提供的功能。这部分是因为 Lattice 用于测试核心组件,没有来自更复杂 CF 的一些开销,但您也可以在安全性和多租户不太关注的内部高信任环境中使用 Lattice .
还值得一提的是,CloudFoundry 和 Warden(其容器引擎)也比 Docker 早了几年。
另一方面,Kubernetes 是一个相对较新的项目,由 Google 基于多年来与 BORG 和 Omega 的容器使用情况开发。 Kubernetes 可以被认为是 Google 的第三代容器编排,就像 Diego 是 Pivotal/VMware 的第三代容器编排一样(v1 在 VMware 编写;v2 在 VMware 的 Pivotal Labs 帮助下;在 Pivotal 接管项目后的 v3) .