CloudFoundry / Diego的下一个版本将提供原生支持Docker容器,这些容器会在多个主机上进行编排[链接]。这听起来与Kubernetes非常相似。
当然,Kubernetes试图解决的问题更加通用,而CloudFoundry更专注于应用程序开发。然而,对我而言,两者看起来都朝着类似的方向发展,并且CloudFoundry在纯编排之上增加了许多功能。
因此,我想知道Kubernetes相比CloudFoundry在哪些使用案例中能够提供更多的价值呢?
CloudFoundry / Diego的下一个版本将提供原生支持Docker容器,这些容器会在多个主机上进行编排[链接]。这听起来与Kubernetes非常相似。
当然,Kubernetes试图解决的问题更加通用,而CloudFoundry更专注于应用程序开发。然而,对我而言,两者看起来都朝着类似的方向发展,并且CloudFoundry在纯编排之上增加了许多功能。
因此,我想知道Kubernetes相比CloudFoundry在哪些使用案例中能够提供更多的价值呢?
随着两个项目的成熟和竞争,它们的相似之处和不同之处也会发生变化。因此,请谨慎参考以下功能比较。
CF和K8s都有许多相似的功能,例如容器化、命名空间、认证等。
Kubernetes的竞争优势:
CloudFoundry的竞争优势:
[x] 这些功能不是Diego或Lattice的一部分。
CloudFoundry的竞争优势之一是其有成熟的部署引擎BOSH,可以实现核心CF组件的扩展、恢复和监控等功能。BOSH还支持许多IaaS层次,具有可插拔的云提供商抽象层。不幸的是,BOSH的学习曲线和部署配置管理比较困难。(作为BOSH提交者,我认为我可以准确地说这个。)
Kubernetes的部署抽象仍处于萌芽阶段。核心库中提供了多个目标环境,但并非所有目标环境都经过良好测试或得到主要开发人员的支持。这主要是因为成熟度问题。随着时间的推移和抽象程度的提高,人们可以预期这种情况会有所改善。例如,在DCOS上运行Kubernetes 可以通过一个命令将Kubernetes部署到现有的DCOS集群中。值得一提的是,CloudFoundry和Warden(其容器引擎)也比Docker早几年。
Kubernetes是一个相对较新的项目,由Google根据多年使用BORG和Omega容器的经验开发而来。在Google,Kubernetes可以被认为是第三代容器编排,就像Diego是Pivotal/VMware的第三代容器编排一样(v1由VMware编写;v2由VMware与Pivotal Labs合作编写;v3在Pivotal接管该项目后编写)。请注意保留HTML标签。Cloud Foundry是一个很棒的工具,前提是您愿意始终在提供的限制范围内工作,因为它非常偏见/预设。Web UI在第一天看起来很酷,但在您开始使用客户端并配置CI / CD管道后,很少使用。我发现Cloud Foundry很棒,直到出现不容易完全支持Cloud Foundry的用例。尝试解决这些问题可能会延误项目,因此您失去了基础设施和支持组件的可见性,这些组件大多在Cloud Foundry之外运行(例如多个数据库、kafka、hadoop、cassandra等)。我怀疑随着时间的推移,Docker的势头和Cloud Foundry的不灵活性将驱使用户转向Kubernetes、Mesos或Docker Swarm/Datacenter。Cloud Foundry有可能追赶这三者,但由于这些开源项目的普及度,这似乎不太可能。
在我看来,一个显著的区别是它们采取的方法:
Cloud Foundry自动从3个组件构建运行时:用户提供的应用程序二进制文件、包含运行应用程序所需中间件的构建包和一个OS镜像(stemcell)。CF用户(开发人员)只需提供应用程序二进制文件(例如可执行jar文件),CF负责其余部分,即打包和运行应用程序。
Kubernetes期望开发人员提供包含中间件和操作系统的Docker镜像,已经构建并准备好运行。为此,Kubernetes“部署清单”(例如Helm图表)不仅描述单个应用程序或服务,还描述了在运行时组成解决方案的所有[微]服务。您提交对运行时的单个声明性描述,Kubernetes负责确保实际运行状态与您提供的描述相匹配。
因此,CF方法使其能够解决诸如“在整个云中替换带有修补安全漏洞的操作系统而无需停机”的用例。但它也专注于逐个服务进行部署,而不是针对系统目标“理想”的运行时的声明性描述。