Cloud Foundry和 Kubernetes 的区别

文章目录

    • Cloud Foundry是什么
    • Kubernetes是什么
    • 相似点
    • PaaS和IaaS+
      • Cloud Foundry
      • Kubernetes
    • 支持的容器
      • Kubernetes
      • Cloud Foundry
    • 我们以一个开发者需要部署一个Spring Boot Java应用为例。

Cloud Foundry是什么

Cloud Foundry是一个独立于云的平台即服务解决方案。开源的Cloud Foundry由Cloud Foundry基金会开发并支持,基金会包括Pivotal、Dell EMC、IBM、VMWare以及其它许多公司。商业版本的Cloud Foundry,如 IBM Bluemix和Pivotal Cloud Foundry(简称PCF),是基于开源的Cloud Foundry 项目开发的。

Kubernetes是什么

Kubernetes是一个来源于谷歌Borg项目的开源云平台。它由Cloud Native Computing Foundation发起,该基金会的成员包括了许多行业巨头,如AWS、Azure、Intel、IBM、RedHat、Pivotal等许多公司。

Kubernetes通常是被用来运行Docker容器。有一些解决方案基于Kubernetes提供了PaaS体验,比如RedHat OpenShift。

相似点

两者都使用容器的思想来隔离应用和系统其它组件。
两者都可以既运行在公有云(AWS、Azure、GCP)上,也可以运行在预置型云平台,如使用Vmware vsphere的云平台上。
两者都提供了混合环境上的运行能力,允许你在不同的云平台运行应用以提高可用性,甚至支持应用在公有云和私有云上同时运行。
Pivotal Cloud Foundry的最新版本也开始支持Kubernetes作为通用的容器运行时。下文有更多比较。

PaaS和IaaS+

Cloud Foundry

Cloud Foundry最重要的特点是,它是一个PaaS。Kubernetes则不太像PaaS,有些人把它看做IaaS+ ,甚至Kubernetes 的文档也把自己描述为“不是传统的、包罗万象的PaaS”。

作为一个开发者,我觉得最大的区别是,Cloud Foundry如何采取非常Spring化的,固定的方式来开发、部署和管理。

如果你用过Spring Boot,你会知道它的其中一个强项是,通过查找maven/gradle依赖进行自动配置。例如,如果你依赖MySQL JDBC驱动,你的Spring数据框架将自动配置从而能使用MySQL。如果驱动未提供,它会回退成h2这个内存数据库。

正如我们将在本文中看到的,PCF就是采用了相似的方式进行应用部署和服务绑定。

Kubernetes

Kubernetes采用了不同的方式。它从根本上说是一个通用的容器运行时,对应用的内部工作机制知之甚少。它的主要目的是提供一个运行容器的简单基础设施解决方案,其它所有事都由开发者完成。

支持的容器

Kubernetes

Kubernetes运行Docker容器。因此,它支持各种应用,消息代理,Redis数据库,自定义Java应用,以及其它任何你可以在Docker Hub上找到的应用。

每个写过Dockerfile的人都知道,它既可以是几行描述符代码,也可以是一个相当复杂的文件。因为Docker是个通用容器解决方案,它可以运行几乎任何东西。决定容器内的操作系统如何执行你的代码是你作为开发者的任务。它很强大,但是能力越大,责任越大。

Cloud Foundry

Cloud Foundry对容器采用了一个非常固执的方式。它使用了一个叫garden的容器解决方案。PCF的较早版本的原始容器称为warden,它事实上要早于Docker本身。

Cloud Foundry自身事实上也早于Kubernetes,它的第一个版本始于2011年,而Kubernetes直到2014年才出现。
比如何使用容器运行时更重要的是,如何创建容器。

我们以一个开发者需要部署一个Spring Boot Java应用为例。

使用Docker,你需要定义一个Dockerfile以支持运行基于Java的应用。你可以用各种不同方式来定义这个容器。你可以选择不同的基础操作系统,不同服务商提供的不同JDK版本,你可以暴露不同的端口,以支持不同安全级别上的访问。没有一个标准说基于Java的Spring Boot应用该长什么样。

在Cloud Foundry,所有基于Java的应用都有一个基线buildpack,这个buildpack是由供应商提供的。一个buildpack是针对给定语言创建应用运行时的模板。buildpack是由Cloud Foundry自身管理的。

Cloud Foundry把定义容器的部分工作从开发者手上接了过来。它定了一个标准,基于Java的容器应该长什么样,这样所有开发者,不管是DevOps团队还是IT专家,都可以同步这个模板。你可以确信你的容器将和其他开发者提供的容器一样运行,不管在现有的集群内,还是将来有可能转到的公有云平台上。

你可能感兴趣的:(Cloud Foundry和 Kubernetes 的区别)