cloud foundry是业界第一个开源的paas,号称工业界唯一的云应用平台。
本文重点讲述cloud foundry在阿里云上的部署方案,对于cloud foundry介绍的部分简单略过。
关键词:paas、开源
cloud foundry是一种平台即服务(paas),兼容多种基础设施云,提供多种开发框架和应用服务。目前开源支持部署cloud foundry的基础设施云包括aws、azure、openstack等等,cf在开发框架上支持java、.net、ruby等等,有很强的灵活性。
iaas帮助开发者和客户解决了基础设施的问题,cloud foundry作为paas,在云上让开发者的视角更高,开发者只需要关注应用和数据。

cloud foundry是由相对独立的多个模块构成的分布式系统,每个模块单独存在和运行,各模块之间通过消息机制进行通信。
cloud foundry目前最新的架构为v3版本,各个组件的功能,官网有详细的介绍,这边不再赘述。
(本文使用软件版本和环境的说明,涉及到的概念下文会详细解释)
阿里云region:华东1
ruby 版本:2.3.0
bosh-init 版本:0.0.96
bosh cli 版本:1.3262.4.0
cf cli 版本:6.21.0
在阿里云上部署cloud foundry,部署流程分为三大部分,分别为:
开通阿里云环境资源:包括准备阿里云账号,开通相关云产品资源等等
部署bosh:安装bosh-init,使用bosh-init部署bosh
部署cloud foundry:使用bosh部署cloud foundry
本文后续内容会根据三步部署流程详细讲述。
cloud foundry需要部署在vpc环境下,需要开通vpc资源,并创建虚拟交换机,规划好部署cloud foundry的内网网段。
同时,也需要创建一对access key id和access key secret,也可以使用现有的access key id和access key secret对。
网段没有限制,笔者选择了10.0.0./8网段
可用区和网段没有限制,方便起见,笔者选择了华东1可用区e,网段为10.0.0.0/25
bosh是一个统一了平台即服务软件(如cloud foundry)的发布、部署和生命周期管理的自动化配置部署工具。简单的说,bosh的作用之一就是部署cloud foundry,部署cloud foundry之前,首先要部署bosh。
在讲怎么在阿里云上部署bosh之前,首先需要了解bosh中的几个基本概念。
cpi全称cloud platform interface,是bosh对外开放的一组标准化接口,在iaas上部署bosh,需要实现这组接口,bosh用cpi对iaas的资源进行管理,包括创建虚拟机,释放虚拟机,等等......
在阿里云上部署bosh,需要用阿里云openapi实现cpi。
cpi api v1完整接口列表:
bosh-init是bosh官网提供的一个开源工具,它的作用就是用来部署bosh。
stemcell是虚拟机镜像,预装了部署过程中需要的组件(其中最重要的组件是bosh agent),官方的描述是:a stemcell is a versioned operating system image wrapped with iaas specific packaging. bosh用cpi创建的虚拟机,用stemcell镜像启动。
release是bosh中一个安装部署包的概念,包含了所有安装分布式系统需要的源代码、配置文件、脚本文件等等,官网描述为:a release is a versioned collection of configuration properties, configuration templates, start up scripts, source code, binary artifacts, and anything else required to build and deploy software in a reproducible way.
例如,安装bosh,我需要一个bosh-release;用bosh安装cloud foundry,我需要一个cf-release。
所有release都有版本迭代,都可以在bosh官网找到。
一个deployment是一组vm的集合,由指定的stemcell镜像启动,用于部署对应release的系统。官方描述为:a deployment is a collection of vms, built from a stemcell, that has been populated with specific releases and disks that keep persistent data. these resources are created based on a manifest file in the iaas and managed by the bosh director, a centralized management server.
在bosh的概念里,一个deployment对应一个release,deployment的具体配置,写在deployment manifest里,在部署过程中提供。
通过阿里云控制台创建一个ecs(包年包月、按量均可),用于安装bosh-init。方便起见,下文以bosh-init指代这台ecs。
推荐配置:
规格:2核4g及以上
镜像:ubuntu 14.04 64位
系统盘:40gb以上,高效云盘
网络类型:vpc实例,选择在上一步创建好的vpc和虚拟交换机,公网ip可以选择不分配。
因为bosh-init是vpc实例,需要给bosh-init绑定弹性公网ip,让bosh-init可以通过公网访问。
按需购买弹性公网ip,并给bosh-init绑定弹性公网ip
ssh登陆到bosh-init这台ecs
执行权限
<code>chmod +x ~/downloads/bosh-init-*</code>
移动到/usr/local/bin
<code>sudo mv ~/downloads/bosh-init-* /usr/local/bin/bosh-init</code>
验证安装成功
<code>bosh-init -v</code>
安装对应环境,笔者使用的是ubuntu的机器
<code>sudo apt-get install -y build-essential zlibc zlib1g-dev ruby ruby-dev openssl libxslt-dev libxml2-dev libssl-dev libreadline6 libreadline6-dev libyaml-dev libsqlite3-dev sqlite3</code>
确保已经安装ruby 2+环境
bosh-release是开源的,可以从bosh官网下载:
<a href="https://bosh.io/releases/github.com/cloudfoundry/bosh?all=1">https://bosh.io/releases/github.com/cloudfoundry/bosh?all=1</a>
笔者使用的是255.3版本的bosh-release
cpi近期会开源,请关注:
<a href="https://github.com/alibaba/opstools">https://github.com/alibaba/opstools</a>
根据以下模板,新建一个manifest文件bosh.yml,在模板中填充阿里云资源相关的内容。
执行部署命令:
<code>bosh-init deploy bosh.yml</code>
一个部署过程的示例:
我们用bosh cli验证bosh是否部署成功。
bosh cli是bosh官方提供的,用于和bosh交互的命令行工具。在部署完成bosh之后,用bosh cli和bosh交互,执行相关命令,进行下一步cloud foundry的部署。
bosh cli可以安装在任意一台ecs上,或者本地主机上。
执行bosh cli命令:
<code>bosh target 10.0.0.2</code>
笔者的bosh cli安装在同一个安全组的ecs上,因此可以和部署bosh的ecs进行内网通讯,直接通过内网ip,target到bosh。如果需要通过公网通讯,需要给部署bosh的ecs绑定弹性公网ip,或者使用nat网关产品,保证网络能通。
如图显示,成功连接到目标bosh,验证bosh成功。
<code>bosh releases</code>、<code>bosh stemcells</code>这两条命令,使用bosh部署cloud foundry的时候会用到,我们下节细讲。
首先我们也需要了解用bosh部署cloud foundry过程中的几个基本概念。
上一节讲到,我们需要使用已经部署成功的bosh来部署cloud foundry,通过bosh cli和bosh进行交互,执行相关部署命令。因此,使用bosh部署cloud foundry之前,首先需要了解bosh cli命令的使用。
bosh cli几个基本命令:
1.连接到指定bosh
<code>bosh target [director_url]</code>
2.列出当前release仓库中所有的release
<code>bosh releases</code>
3.上传release到bosh的release仓库,只有仓库里的release可以用于部署
<code>bosh upload release [release_file]</code>
4.列出当前stemcell仓库里的所有stemcell
<code>bosh stemcells</code>
5.上传stemcell到bosh的stemcell仓库,只有仓库里的stemcell可以用于部署
<code>bosh upload stemcell stemcell_path</code>
<code>bosh upload stemcell stemcell_url</code>
6.列出当前所有的deployment
<code>bosh deployments</code>
7.列出当前deployment的信息
<code>bosh deployment</code>
8.切换到指定manifest对应的deployment
<code>bosh deployment [manifest_path]</code>
9.执行部署当前deployment
<code>bosh deploy</code>
在上一步部署bosh中,已经部署好的bosh中已经包含了cpi组件,因此在部署cloud foundry中不再需要cpi-release
和上一步部署bosh中类似。
cloud foundry官网提供的压缩包,包含cloud foundry所有组件的源码。
deployment的配置文件,主要描述了用哪个stemcell,用哪个cf-release,需要部署哪些cf组件,需要多少vm,vm规格信息,vm的ip信息,具体哪个vm部署哪个cf组件,等等......
cf-release是开源的,可以从bosh官网下载:
<a href="http://bosh.io/releases/github.com/cloudfoundry/cf-release?all=1">http://bosh.io/releases/github.com/cloudfoundry/cf-release?all=1</a>
笔者部署用的是215版本的cf-release
我们需要用bosh cli和bosh进行交互,执行部署cloud foundry命令
上传下载完成的cf-release,执行以下bosh cli命令:
<code>bosh upload release <release_file></code>
根据以下模板,新建一个manifest文件cf.yml,在模板中填充阿里云资源相关的内容。
<code>bosh deployment cf.yml</code>
部署完成之后,执行以下命令,查看cloud foundry部署详情:
<code>bosh vms</code>
至此,cloud foundry在阿里云上部署成功。