如何利用Helm在Kubernetes上快速部署CloudFoundry


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为组件创建新的虚拟机:
1.png

使用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的部署方式,好处显而易见:
2.png

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

  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个小时相比,快了很多:
4.png

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

  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显示的环境信息:
6.png

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

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

作者:张涛 IBM 高级工程师

0 个评论

要回复文章请先登录注册