如何利用Helm在Kubernetes上快速部署Cloud Foundry?

2018-02-11 19:41:00
Angela
转贴
50


Cloud Foundry是业界领先的PaaS云平台,可以为应用提供高可用的运行平台,现在很多运行商都在使用Cloud Foundry为用户提供应用服务,如IBM、AWS等。自Cloud Foundry面世以来便一直使用BOSH来创建和更新生产服务。BOSH是一条开源工具链,用于对大规模分布式服务进行发行版工程处理、部署和生命周期管理。它包含一个云提供商接口(CPI),如VMWare,通过调用CPI完成整个Cloud Foundry的创建、部署和升级。


Kubernetes经过几年的发展越来越成熟,遍布全球的数百位开发者纷纷投身到Kubernetes的快速迭代中。越来越多的企业开始采用Kubernetes支撑生产业务,实现了高可用的容器化微服务。


但原来用户如果想继续在Kubernetes上使用Cloud Foundry,那该怎么做呢?现在业界没有一个标准的做法。较为正规的方式是开发一套完整的Kubernetes的CPI,然后利用BOSH将Cloud Foundry部署在Kubernetes上。但BOSH设计初衷是面向IaaS的部署工具,它首先需要一个Linux的虚拟机模板 Stemcell,Cloud Foundry的不同组件通过BOSH安装在基于这个Stemcell构建的虚拟机上。这种部署方式在Kubernetes上有一个很大的问题,就是当部署的Cloud Foundry组件,如Cloud Contorller或者Router的Pod因为一些原因坏了或者重启了,那么重启回来的Pod只是一个空的Stemcell,没有任何的组件信息,只能通过BOSH re-create为组件创建新的虚拟机:


使用BOSH在Kubernetes上部署Cloud Foundry还有一些其他问题和弊端:


  1. BOSH现在主要适用于IaaS

  2. 需要开发新的Kubernetes CPI

  3. 部署时间过长

  4. 需要手工执行许多配置,如网络和资源等

现在业界有很多厂商都在研究如何更好更快地将Cloud Foundry部署在Kubernetes上,如SUSE的SCF和Cisco的Container CF等。虽然现在还没有发布用于生产环境的版本,但思路相比BOSH更贴近Kubernetes的使用方式,也更融合Kubernetes。主要的方式就是通过制作相对应的Cloud Foundry组件的Docker Image,部署的时候直接部署对应的Docker Image,然后在运行容器之前,通过配置信息和环境变量,设置容器参数使整个Cloud Foundry组件之间可以相互通信。即使哪个Cloud Foundry组件坏了或者被重启了,组件使用已创建的Docker Image可以快速启动,只是在启动时需要重新配置一下参数。它相对之前BOSH的部署方式,好处显而易见:


那么我们就以SUSE的SCF为例,看看它到底是如何做到的?



  1. 首先我们需要将BOSH的工程通过SUSE的转换工具fissile将其编译并制作成Docker Image。

  2. 之后我们需要通过Helm将预设的参数转换成Helm或者Kubernetes的配置资源文件。

  3. 最后通过Helm将整个CF部署到Kubernetes上。

下图是和传统的BOSH CPI的部署方式的比较,绿色部分为新的Fissile + Helm 方式改变的步骤。但这些绿色步骤只需要管理员执行一次来创建Docker Image,之后就可以重复使用了。最终用户只需要执行橙色步骤,修改自己配置文件,下载相应的Docker Image,部署整个Cloud Foundry。整个部署Cloud Foundry的时间大概在15-20分钟,这和之前BOSH部署4-6个小时相比,快了很多:


接下来我们就来看看如何利用SCF在Kubernetes上快速部署一个Cloud Foundry,如下图:



  1. 首先我们需要一个性能较好的机器并且可以连接外网并安装Vagrant。

  2. 克隆整个SCF的Git项目 https://github.com/SUSE/scf

  3. 执行相应的Vagrant命令启动构建环境。

  4. 进入Vagrant创建的虚拟机,执行 make vagrant-prep 命令创建工程、编译并制作Docker Image,这个过程大概需要2-3个小时,但只需要执行一次。

  5. 上一步正确完成后,执行make kube,根据预设配置,创建Helm或Kubernetes配置资源文件。

  6. 最后执行make run将整个Cloud Foundry部署到Vagrant自带的Kubernetes上。

  7. 你也可以通过它自带的pod-status来观察整个Cloud Foundry的状态。大概15-20分钟之后,所有的Pod都启动了,Cloud Foundry就可以使用了。



所有相关信息都可以在SCF的Git中找到:https://github.com/SUSE/scf。


下图为部署成功后SCF显示的环境信息:

下图为部署在Kubernetes上所有Cloud Foundry组件的Pod的运行状况:


当然,SCF现在做的只能将Cloud Foundry运行在Vagrant创建的Kubernetes上。你也可以把创建的Cloud Foundry组件的Docker Image上传到外部的Docker Hub上,然后使用Kubernetes的配置资源文件将你的Cloud Foundry部署到你自己的Kubernetes上。


发表评论
评论通过审核后显示。
联系我们