原文:https://yq.aliyun.com/articles/292815?utm_content=m_37457
云计算技术的不断成熟和完善,尤其是IaaS平台的不断发展,使得越来越多的企业和用户青睐于将自己的业务和应用不断的从传统IT设施迁移到云上,在灵活、高效管理应用,快速扩展业务的同时不断地降低基础设施的运维和管理成本。然而,随着业务的不断发展和壮大,对IaaS资源管理成本也会不断增加,可否将基础设施的管理成本进一步降低呢?Cloud Foudry就是其中一个非常完美的解决方案,作为工业界标准的 PaaS 平台,它可以随着业务的不断变化实现对应用节点的自动伸缩,降低了应用部署时对配置基础设施的复杂度和成本,让更多的开发人员将更多的时间和精力投入到核心业务的开发上。
Cloud Foundry 作为一个开源 PaaS 平台,不仅支持 Java、Go、Python、Ruby、Node.JS和Scale等多种语言及配套框架,而且提供 MySQL、MongoDB、RabbitMQ、Redis、PostgreSQL等多个后端服务;不仅可以在传统IT基础设施运行上,而且可以部署在多种云计算平台上,如 AWS,Azure,OpenStack等。
值得欣喜的是,今天 Cloud Foundry 已经在阿里云上成功落地。阿里云将帮助更多的国内和国际用户实现对 Cloud Foundry 快速部署。本文将向大家展示如何在阿里云上基于 Bosh 成功部署 Cloud Foundry。
什么是 Bosh?Bosh 是 Bosh Outter SHell 的缩写。与“Outter Shell”相对,被 BOSH 部署和管理的系统称为Inner Shell
。BOSH 起先是在 Cloud Foundry 项目中开发的,不过,它是一个通用的工具,协助大规模分布式服务的部署和生命周期管理。我们使用 BOSH 将Cloud Foundry 的各组件部署到分布的 ECS 节点上。更多 Bosh 内容可查阅 Bosh Docs。
本文将从以下几个方面想大家详细介绍如何在阿里云上部署 Cloud Foundry:
- 搭建 Bosh 运行环境
- 安装和部署 Bosh
- 搭建 Cloud Foundry 运行环境
- 安装和部署 Cloud Foundry
- 部署应用示例 Wordpress
1. 搭建 Bosh 运行环境
从安全性考虑,本文所设计的网络环境是 VPC。为了方便部署 Bosh,首先需要准备一台带有公网 IP 跳板机作为部署命令的执行机器。因此,本节需要准备如下资源:
- VPC(1个):用作整个 Bosh 和 Cloud Foundry 的网络运行环境
- VSwitch(1个): 用作跳板机和 Bosh 的网络运行环境
- Security Group(1个):为网络环境设置访问权限
- ECS(1台):跳板机,用作执行命令来部署 Bosh 和 Cloud Foundry
- EIP(1个):与跳板机绑定,提供公网 IP,用于登录跳板机和部署 Bosh
1.1. 创建 VPC
登录 VPC 控制台,选择一个 Region,如华北2(cn-beijing),点击右上角创建专有网络
按钮,输入专有网络名称、描述,选择网段后点击创建VPC
按钮即可完成一个新的 VPC 的创建。如下图所示:
1.2. 创建 VSwitch
完成 VPC 的创建后,点击下一步
按钮,即可为当前 VPC 创建一个 VSwitch。输入交换机名称、描述,选择一个可用区,输入一个子网网段后,点击创建交换机
按钮即可完成一个新的 VSwitch 的创建。如下图所示:
1.3. 创建 Security Group
登录安全组控制台,点击右上角创建安全组
按钮,输入安全组名称、描述,选择专有网络
,选择刚刚创建的 VPC,点击确定
按钮即可完成一个新的安全组的创建。如下图所示:
完成安全组的创建后,点击立即设置规则
,进入安全组规则页面。在创建安全组之前,首先选定一个 IP 地址作为 Bosh Director 的私网 IP,比如 172.16.0.3,然后点击页面右上角的添加安全组规则,输入端口范围 25555/25555
,选择授权类型为地址段访问
,输入 Director IP,点击确定
按钮,即可实现对 25555 规则的添加,如下图所示:
依据相同的操作,按照下面的参数,完成对所有相关规则的设置:
规则方向 | 协议类型 | 端口范围 | 授权对象 | 优先级 | 描述 |
---|---|---|---|---|---|
入方向 | 自定义 TCP | 6868/6868 | 172.16.0.0/12 | 1 | 允许 BOSH Agent 访问 |
入方向 | 自定义 TCP | 25555/25555 | 172.16.0.3 | 1 | 允许 BOSH Director 访问 |
入方向 | 自定义 TCP | 1/65535 | 0.0.0.0/0 | 10 | 允许其他端口被访问 |
入方向 | 自定义 UDP | 1/65535 | 0.0.0.0/0 | 10 | 允许其他端口被访问 |
出方向 | 全部 | -1/-1 | 0.0.0.0/0 | 1 | 允许访问所有数据 |
1.4. 创建跳板机
登录ECS控制台,选择Region为华北2(cn-beijing),点击右上角创建实例
按钮进入实例创建页面,在该页面中选择本文中创建的 VPC、VSwitch 和安全组,选择实例类型,操作系统镜像(如 Ubuntu 16.04 64位),输入实例名称以及登录密码,点击立即购买
按钮,即可开通一台 ECS 作为跳板机,详情可参见创建 ECS 实例。
1.5. 创建弹性 IP
登录 EIP控制台,选择Region为华北2(cn-beijing),点击右上角申请弹性公网IP
即可进入弹性 IP 创建页面,选择合适的带宽峰值,点击立即购买
按钮,即可创建一条 EIP。
弹性 IP 创建成功后,点击右侧的绑定
按钮,选择刚刚创建的跳板机,点击确定
,即可实现 EIP 与跳板机的绑定,如下图所示:
2. 安装和部署 Bosh
在创建好 Bosh 的运行环境后,即可开始安装和部署 Bosh。Bosh 是一个将分布式系统的部署步骤进行定义和编排的服务器,通过Bosh CLI(指令界面,一个ruby工具)可以与BOSH服务器交互。因此,首先需要在跳板机上安装 Bosh CLI。
2.1. 安装 Bosh CLI
本文所要部署的是 Bosh V2 版本。首先登录跳板机,升级系统并安装 Bosh V2 依赖包。
$ sudo apt update -y
$ sudo apt install build-essential zlibc zlib1g-dev ruby ruby-dev openssl libxslt-dev libxml2-dev libssl-dev libreadline6 libreadline6-dev libyaml-dev libsqlite3-dev libpq-dev libmysqlclient-dev sqlite3 git -y
# 下载 Bosh CLI V2
$ wget -c -P /usr/local/bin/ http://bosh.oss-cn-hangzhou.aliyuncs.com/cli/bosh-cli-2.0.45-linux-amd64
$ chmod 0755 /usr/local/bin/bosh
# 验证 Bosh CLI 安装成功
$ bosh -v
更多 Bosh CLI 安装详情详见 Bosh CLI Install。
2.2. 部署 Bosh
Bosh CLI 安装成功之后,就可以部属 Bosh 了。在开始部署 Bosh 之前,首先需要准备好以下四项内容:
- light stemcell
stemcell
来源于生物学的“干细胞”,指的是可以生长成为不同类型细胞的原始细胞。对于 Bosh 而言,stemcell 指的是可以在 ECS VM 创建时具有相同原始软件配置,启动后,根据不同的实例规格具有不同的配置,如CPU、Memory、Storage 和 Network等。
Stemcell 有 heavy stemcell 和 light stemcell 之分。严格意义上来说,stemcell 就是 heavy stemcell,定义了 VM 的原始软件配置及操作系统等,而 light stemcell 可以看做是 heavy stemcell 的引用,里面定义了 heavy stemcell 的名称,版本,文件格式,操作系统类型,镜像与 region 的映射关系等多种配置。
目前阿里云提供了基于ubuntu-trusty的可用于安装bosh和cloudfoundry的stemcell
- Bosh Release
Bosh Release 定义了一系列 Bosh 所依赖的配置属性,配置模板,启动脚本,源代码,二进制文件以及其他安装和部署软件的依赖。Bosh Release 安装在目标机器上,配置通常包含 IP 地址、商品号、用户名、密码、域名等,这些参数可根据部署文件 Manifest 中的属性来定义。
- Manifest
Manifest 一种遵循 YMAL 语法,定义了部属 Bosh 时所需的实际参数值的文件,如创建 VM 所用到的实例类型,实例名称,磁盘类型,磁盘大小,可用区,VSwitch 以及 安全组等。部属过程中,Bosh 使用这些值替换 Release 中的参数,进而配置软件。
- CPI
CPI是Bosh调用IaaS云服务的接口程序,可参考build-cpi.html,目前阿里云的研发人员已经完成了CPI的适配,并实现了在Github上的开源,目前正在被Cloud Foundry社区接纳中,参见https://github.com/cloudfoundry-incubator/bosh-alicloud-cpi-release
为了方便 Bosh 的部署,以上部分阿里云已经为大家准备好了,大家只需要运行一下几个简单的步骤,即可实现对 Bosh 的部署:
# 下载 Bosh deployment
$ git clone https://github.com/aliyun/bosh-deployment.git
$ cd bosh-deployment
# 切换到阿里云分支
$ git checkout alicloud
# 将前文中选定的 Director IP 设置为环境变量
$ export BOSH_ENVIRONMENT=172.16.0.3
# 运行 Bosh 部署命令
$ bosh create-env bosh-deployment/bosh.yml --state=state.json \
--vars-store=creds.yml \
-o bosh-deployment/alicloud/cpi.yml \
-o bosh-deployment/jumpbox-user.yml \
-o bosh-deployment/misc/powerdns.yml \
-v dns_recursor_ip=8.8.8.8 \
-v director_name=my-bosh \
-v internal_cidr=172.16.0.0/24 \
-v internal_gw=172.16.0.1 \
-v internal_ip=$BOSH_ENVIRONMENT \
-v vswitch_id=... \
-v security_group_id=... \
-v acccess_endpoint=aliyuncs.com \
-v access_key_id=... \
-v access_key_secret=... \
-v region=... \
-v zone=...
参数说明:
- internal_cidr:对应前文中所创建的 VSwitch 的网段,如 172.16.0.0/24
- internal_gw: 对应前文中所创建的 VSwitch 所对应的网关, 如 172.16.0.1
- vswitch_id: 对应前文中所创建的 VSwitch 的 ID,如 vsw-2zeipivdxgnhf4wsay8t9
- security_group_id: 对应前文中所创建的安全组的 ID, 如 sg-2zecizlui4a387u8zju4
- region:对应前文中所创建的 VPC 所在的 Region ID,如 cn-beijing
- zone: 对应前文中所创建的 VSwitch 所在的可用区 ID,如 cn-beijing-a
- access_key_id 和 access_key_secret 是在调用阿里云 Open API 时用于鉴权认证的密钥对,可通过以下方法产生:
登录 AK 管理控制台,如果页面弹出安全风险警告页面:
直接点击“继续使用AccessKey”按钮,进入 Access Key 管理页面,点击页面右上角的创建Access Key
按钮,
阅读并同意《API使用规范》,然后点击同意并创建
按钮后,即可获得一个新的 Access Key,进而可获取页面中的 Access Key ID
和 Access Key Secret
。
整个 Bosh 的部署过程需要花费大概10-20分钟,请耐心等待。
对于国内用户,国区 Region 下的 ECS 下载 bosh-release 可能会比较慢,可以考虑先去官网 bosh.io下载bosh-deployment/bosh.yml
中指定的 bosh-release,并上传到跳板机上(如/root/bosh-263.2.0.tgz
),然后修改bosh.yml中url字段来实现bosh的加速安装,参考如下
releases:
- name: bosh
version: "263.2.0"
# url: https://s3.amazonaws.com/bosh-compiled-release-tarballs/bosh-263.2.0-ubuntu-trusty-3445.7-20170915-052445-759948783-20170915052451.tgz?versionId=3kjVQuRK7JyrnbKEbKhLRi7qyo0wBXZJ
url: file:///root/bosh-263.2.0.tgz
sha1: 37630c636a030454d55703cfdd495d733525353f
除此之外,在国内 Region 上部署 Bosh 时,在命令中可通过指定文件 alicloud/releases-in-china.yml
来实现对 CPI 和 Stemcell 的快速下载,如下所示:
# 在国内 Region 上运行 Bosh 部署命令
$ bosh create-env bosh-deployment/bosh.yml --state=state.json \
--vars-store=creds.yml \
-o bosh-deployment/alicloud/cpi.yml \
-o bosh-deployment/alicloud/releases-in-china.yml \
-o bosh-deployment/jumpbox-user.yml \
-o bosh-deployment/misc/powerdns.yml \
-v dns_recursor_ip=8.8.8.8 \
-v director_name=my-bosh \
-v internal_cidr=172.16.0.0/24 \
-v internal_gw=172.16.0.1 \
-v internal_ip=$BOSH_ENVIRONMENT \
-v vswitch_id=... \
-v security_group_id=... \
-v acccess_endpoint=aliyuncs.com \
-v access_key_id=... \
-v access_key_secret=... \
-v region=... \
-v zone=...
2.3. 登录 Bosh
Bosh 成功部署后,需要登录 Bosh,以便为后续部署 Cloud Foundry 做准备。Bosh 的登录很简单,运行以下命令:
$ bosh int ./creds.yml --path /director_ssl/ca > ca-cert
$ bosh alias-env my-bosh -e $BOSH_ENVIRONMENT --ca-cert ca-cert
$ export BOSH_CLIENT=admin
$ export BOSH_CLIENT_SECRET=`bosh int ./creds.yml --path /admin_password`
$ export BOSH_CA_CERT=`bosh int ./creds.yml --path /director_ssl/ca`
$ bosh -e my-bosh login
其中,“my-bosh” 是为本文中所部属的 Bosh 设置的别名,可自定义。下同。
Bosh 成功登录后,即可开始 Bosh 的操作和使用之旅,Bosh 的使用命令及详情可参见 Bosh CLI V2。
Bosh 部署成功后,在跳板机通过简单的 SSH 命令已经无法实现对 Bosh Director 机器的远程登录了,如果想登录机器查看 Bosh 的运行日志或者进行其他操作,可使用 jump box 的方式:
$ bosh int creds.yml --path /jumpbox_ssh/private_key > jumpbox.key
$ chmod 600 jumpbox.key
$ ssh jumpbox@$BOSH_ENVIRONMENT -i jumpbox.key
到此,整个 Bosh 的安装,部署以及登录的过程已经全部结束。下面开始 Cloud Foundry 的部署和安装。
关于更多的bosh安装、以及cpi的配置信息,请参考bosh.io官方文档,及bosh-alicloud-cpi-release开源项目
3. 搭建 Cloud Foundry 运行环境
和 Bosh 一样,在部署 Cloud Foundry 之前,首先需要准备 Cloud Foundry 的网络运行环境。
3.1. 创建多可用区网络环境
目前,阿里云不仅支持单可用区部署 Cloud Foundry,而且支持多可用区部署,本文将以多可用区部署为例,向大家介绍如何在三个可用区上部署 Cloud Foundry。
多可用区落在网络环境上体现为多个 VSwitch,因此,选择三个可用区(可以相同),按照前文中创建 VSwitch
的操作,创建三个 VSwitch,如172.16.10.0/24,172.16.11.0/24,172.16.12.0/24。创建成功后记录可用区 ID 以及 VSwitch ID。
3.2. 创建负载均衡 SLB
负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台云服务器(ECS)的流量分发控制服务。
为了保证访问流量可以分发到多个服务节点上以及多个服务节点可以对外提供稳定的服务,在部署 Cloud Foundry 之前,需要创建一个可以公网访问的 SLB,并为其配置 HTTP “80-80” 和 TCP “443-443” 的服务监听。
登录 SLB 控制台,选择Region为华北2(cn-beijing),点击右上角创建负载均衡
按钮,进入负载均衡创建页面,选择可用区,实例规格,实例类型(公网,如果选择私网,需要选择前文创建的其中任意一台 VSwitch,并为其分配 EIP),计费方式等配置后,点击立即购买
按钮,即可创建一台负载均衡器。
接着,点击管理
按钮,选择监听
页面,点击右上角的添加监听
按钮,选择前端协议为 HTTP,并输入前端端口:80,后段端口:80:
点击下一步
按钮,使用默认的健康检查配置(或者自行设置配置),点击确认
按钮,完成 80 端口监听的添加。
按照相同的步骤,添加 TCP 443 的监听:
3.3. 申请域名
申请域名是为了给 Cloud Foundry 中的应用提供访问地址。如果您还没有域名,可先通过阿里云域名管理控制台进行域名注册。也可以使用 xip.io、nip.io 等服务将IP映射为域名,但请注意,这两个都不太稳定,可能会影响测试的体验。
域名申请成功之后,需要为该域名设置解析记录,即将负载均衡的公网 IP 地址绑定到域名上。
进入域名解析控制台,点击右上角的添加域名
按钮,输入所申请的域名或者自己的域名,点击确认
按钮,完成域名的添加。
接着点击解析设置
按钮,进入域名管理页面,点击添加解析
按钮,输入主机记录为:*,输入记录值为:<负载均衡公网 IP 或者与其绑定的 EIP 地址>,点击确定
按钮,完成解析记录的添加。
4. 安装和部署 Cloud Foundry
在创建好 Cloud Foundry 的网络环境后,即可开始安装和部署 Cloud Foundry。和 Bosh 一样,Cloud Foundry 通过 CLI 来部署和发布应用的,但Cloud Foundry 的部署依旧依赖于 Bosh CLI。
4.1 安装 Cloud Foundry CLI
Cloud Foundry 部署成功后,使用 Cloud Foundry CLI 来登录 Cloud Foundry 并部署应用。
# 下载 Cloud Foundry CLI 并解压
$ wget https://cli.run.pivotal.io/stable?release=linux64-binary&source=github
$ tar -xzvf cf-cli_6.33.0_linux_x86-64.tgz -C /usr/local/bin
$ sudo curl -o /usr/share/bash-completion/completions/cf https://raw.githubusercontent.com/cloudfoundry/cli/master/ci/installers/completion/cf
# 验证 Cloud Foundry CLI 安装成功
$ cf -v
Cloud Foundry CLI 的使用文档可详见Cloud Foundry CLI Guide
4.2. 准备manifest、stemcell、releases
- Manifest
目前,Cloud Foundry 已经将官方的支持从 cf-release
替换为了 cf-deployment
,我们首先从 github 上获取这个 repo
# 下载 Cloud Foundry Manifest
$ git clone https://github.com/cloudfoundry/cf-deployment.git
$ cd cf-deployment
- Stemcell
可部署Cloud Foundry的stemcell,可从戳这里下载,也可以参照后文直接从链接upload
下载Stemcell后,使用upload-stemcell将stemcell上传至bosh
$ bosh upload-stemcell light-bosh-stemcell-1017-alicloud-kvm-ubuntu-trusty-go_agent.tgz
上传stemcell完成后,需要修改cf-deployment.yml
文件结尾处的stemcells
配置,stemcell的name和version可通过bosh stemcells
指令查看
...
stemcells:
- alias: default
name: bosh-alicloud-kvm-ubuntu-trusty-go_agent
version: 1017
- Cloud Foundry Releases
和 Bosh Release 一样,Cloud Foundry Release 定义了一系列 Cloud Foundry 以及应用运行环境等所依赖的配置属性,配置模板,启动脚本,源代码等。Release 定义的参数通过部署 Cloud Foundry 的 Manifest 获取。
因网络问题,国内Region主机和国外Region主机上传 CF release 方式有所不同。
-
对国内 ECS主机,因为国内ECS直接从海外源下载release会很慢,可能导致安装失败,这里需要先想办法手工下载releases并通过bosh upload-release上传到bosh上,才能显著提高安装速度和成功率。
修改方式为:找到
cf-deployment.yml
结尾处的releases
配置节,针对每个release- 手工下载url链接后的文件
- 将下载后的文件传到跳板机上去,再通过命令
upload-release
, 如bosh upload-release binary-buildpack-release.1.0.14.tgz
,将各个 Release 上传到bosh - 注释url这一行
一共有二十多个文件,这里下载和修改起来会比较累
releases:
- name: binary-buildpack
# url: https://bosh.io/d/github.com/cloudfoundry/binary-buildpack-release?v=1.0.14
version: 1.0.14
sha1: c5ba6b6d99b972ec34dece478302351d8b4f6bbc
...针对这个过程,我们提供了个可能提高一些效率的脚本,参考download-releases.sh 和 upload-releases.sh.
-
对于国外 ECS主机,直接运行如下命令,完成cf-release上传:
$ bosh upload-release https://bosh.io/d/github.com/cloudfoundry/cf-release?v=279
CF-Release版本请详见[下载地址](https://bosh.io/releases/github.com/cloudfoundry/cf-release?all=1)。
4.3. 配置cloud-config.yml
cloud-config.yml 是一个用于描述你的IaaS云环境的文件,需要我们在安装Cloud Foundry前完成编辑,这个模板可以从bosh-deployment
工程的/alicloud/cloud-config.yml
路径获取,这个文件内容如下:
azs:
- name: z1
cloud_properties:
availability_zone: cn-beijing-a
- name: z2
cloud_properties:
availability_zone: cn-beijing-d
- name: z3
cloud_properties:
availability_zone: cn-beijing-e
vm_types:
- name: minimal
cloud_properties:
instance_type: ecs.mn4.small
ephemeral_disk: {size: "51_200"}
- name: small
cloud_properties:
instance_type: ecs.sn2.medium
ephemeral_disk: {size: "51_200"}
- name: default
cloud_properties:
instance_type: ecs.sn2.medium
ephemeral_disk: {size: "51_200"}
- name: small-highmem
cloud_properties:
instance_type: ecs.sn2ne.xlarge
ephemeral_disk: {size: "51_200"}
- name: compiler
cloud_properties:
instance_type: ecs.sn1.large
ephemeral_disk: {size: "51_200"}
disk_types:
- name: 5GB
disk_size: 20_480
- name: 10GB
disk_size: 20_480
- name: 100GB
disk_size: 102_400
vm_extensions:
- name: 5GB_ephemeral_disk
cloud_properties:
ephemeral_disk: {size: "20_480"}
- name: 10GB_ephemeral_disk
cloud_properties:
ephemeral_disk: {size: "20_480"}
- name: 50GB_ephemeral_disk
cloud_properties:
ephemeral_disk: {size: "50_120"}
- name: 100GB_ephemeral_disk
cloud_properties:
ephemeral_disk: {size: "102_400"}
- name: 500GB_ephemeral_disk
cloud_properties:
ephemeral_disk: {size: "512_000"}
- name: 1TB_ephemeral_disk
cloud_properties:
ephemeral_disk: {size: "1024_000"}
- name: cf-router-network-properties
cloud_properties:
slbs: ((http_slb_id_array))
- name: cf-tcp-router-network-properties
cloud_properties:
slbs: ((tcp_slb_id_array))
- name: diego-ssh-proxy-network-properties
networks:
- name: default
type: manual
subnets:
- range: ((az1_vswitch_range))
gateway: ((az1_vswitch_gateway))
az: z1
dns: [8.8.8.8]
cloud_properties:
vswitch_id: ((az1_vswitch_id))
security_group_ids:
- ((security_group_id_1))
- ((security_group_id_2))
- range: ((az2_vswitch_range))
gateway: ((az2_vswitch_gateway))
az: z2
dns: [8.8.8.8]
cloud_properties:
vswitch_id: ((az2_vswitch_id))
security_group_ids:
- ((security_group_id_1))
- ((security_group_id_2))
- range: ((az3_vswitch_range))
gateway: ((az3_vswitch_gateway))
az: z3
dns: [8.8.8.8]
cloud_properties:
vswitch_id: ((az3_vswitch_id))
security_group_ids: [((security_group_id_3))]
- name: vip
type: vip
compilation:
workers: 5
reuse_compilation_vms: true
az: z1
vm_type: compiler
network: default
在这个文件需要根据你在第三章节中创建的云环境来填写以下内容:
-
可用区
azs
- 将
azs
块下的availability_zone
设置为前文中设置的可用区ID,如果你只有一个可用区,也是可以的,就保留一个可用区
- 将
-
服务器类型
vm_types
- 定制cf可能会用到的不同规格的服务器类型,服务器类型请参考实例规格,
-
cloud_properties
用于指定机器的属性,可参考alicloud_cpi.md
-
网络
networks
- 请仔细修改每个
zone
的子网、网关、vswitch_id、security_group_ids确保与前文操作的实际创建的相符, 其中安全组可支持多个
- 请仔细修改每个
- 负载均衡器ID
将vm_extensions
块下的http_slb_id_array
是一个List,里面的值修改为前文中创建的负载均衡器的 ID,如["lb-abc12345"]
-
compilation
节点用于设置有多少台机器用于编译,编译的机器是临时创建的,机器越好越多,装的越快
配置文件修改结束后,运行如下命令,将cloud-config.yml
更新到bosh
$ bosh update-cloud-config cloud-config.yml
4.4. 部署 Cloud Foundry
在最后部署CF前,你还可以打开cf-deployment.yml
,定制一下每个角色的机器数量,参考instance_groups
下面每个角色的azs
和instances
属性
一切就绪后,开始部署 Cloud Foundry
- 设置Cloud Foundry 域名,比如SLB IP 为 123.123.123.123,绑定的域名为
hello-cf.com
,则可进行如下设置:
$ export CF_DOMAIN=hello-cf.com
用以下命令开始部署CF,cf-vars.yml
是用于保存最终cf生成证书和账号的文件,请妥善保存
$ bosh -e my-bosh -d cf deploy cf-deployment.yml \
--vars-store cf-vars.yml \
-v system_domain=$CF_DOMAIN
整个部署过程大概需要 20-40 分钟,请耐心等待。如果不进行裁剪,本文部署的 Cloud Foundry 需要创建27 台 ECS 服务器,请在运行上述命令前优先确认当前账号具有创建 27 台 ECS 的额度。
4.5. 登录 Cloud Foundry
Cloud Foundry 成功部署后,需要登录后才可继续部署应用,运行以下命令:
$ cf login -a http://api.$CF_DOMAIN --skip-ssl-validation -u admin -p `bosh int ./cf-vars.yml --path /cf_admin_password`
登录成功后,表明 Cloud Foundry 已经在阿里云上实现了成功部署。
5. 部署应用示例 Wordpress
本文将以部署 Wordpress 为例,基于已经部署好的 Cloud Foundry 向大家展示如何快速部署应用。
在部署应用前,首先需要理解一个“buildpack”的概念。buildpack 可以看作是 Cloud Foundry 用来部署和运行应用的引擎的集合。部署应用时,Cloud Foundry 首先将用户要发布的应用程序与自己所有语言和框架的 buildpack 进行适配,当找到第一个可以运行应用代码的 buildpack 后,将该 buildpack 解压,然后与这些应用代码打进一个新的应用包(即 Cloud Foundry 中的 droplet),接着按照 buildpack 指定的运行环境参数生成一个容器,并将 droplet 扔进容器中,最后按照 buildpack 指定的启动命令,启动应用。
# 罗列当前 Cloud Foundry 的所有 buildpacks
$ cf buildpacks
这是的输出是这样的,
Getting buildpacks...
buildpack position enabled locked filename
staticfile_buildpack 1 true false staticfile-buildpack-v1.4.16.zip
java_buildpack 2 true false java-buildpack-v4.6.zip
ruby_buildpack 3 true false ruby-buildpack-v1.7.3.zip
dotnet_core_buildpack 4 true false dotnet-core-buildpack-v1.0.27.zip
nodejs_buildpack 5 true false nodejs-buildpack-v1.6.8.zip
go_buildpack 6 true false go-buildpack-v1.8.11.zip
python_buildpack 7 true false python-buildpack-v1.5.26.zip
php_buildpack 8 true false php-buildpack-v4.3.42.zip
binary_buildpack 9 true false binary-buildpack-v1.0.14.zip
对于国内的用户,需要注意的是,因为默认的cf-release提供的buildpack并非完整的buildpack,在用户push程序的时候,需要在线按需去buildpack的实际内容,但这一点在国内ECS主机上非常的慢,几乎无法在超时时间内完成,所以我们需要手工下载离线buildpacks并update到cf上,这一点我们制作并提供了一部分离线buildpacks的下载,如下:
- staticfile_buildpack
- java_buildpack
- ruby_buildpack
- dotnet_core_buildpack
- nodejs_buildpack
- go_buildpack
- python_buildpack
- php_buildpack
- binary_buildpack
当下载所需的buildpacks后,需要使用如下指令将buildpack更新至cf中,-i表示buildpack的序号,这个序号表示buildpack在cf中的调用顺序,这个不要弄乱,海外主机不需要这一步
$ cf update-buildpack php_buildpack -p php_buildpack-cached-v4.3.46.zip -i 8
(国外 ECS 主机可忽略 buildpack 的手动上传过程)。
当准备好buildpack之后,就可以部署应用了,带manifest的应用会自动判断buildpack的类型,如果需要自行指定或无法判断buildpack,可通过-b
参数指定buildpack
# 下载 wordpress 并解压
$ wget https://wordpress.org/latest.zip
$ unzip latest.zip && cd wordpress
# 创建应用空间
$ cf create-space wordpress -o system
# 指定目标组织
$ cf target -o "system" -s "wordpress"
# 查看已经存在的应用空间
$ cf spaces
# 发布 wordpress
$ cf push wordpress -b php_buildpack
应用部署成功后,在浏览器中直接输入:wordpress.<$CF_DOMAIN>,如 wordpress.123.123.123.123.hello-cf.com,即可实现对 Wordpress
的访问。
6. 写在最后
当部署 Wordpress 简化为几条简单的命令后,你会发现,部署 Cloud Foundry 过程中的付出都是值得的。Cloud Foundry 大大降低了开发者对基础设施的管理和运维的成本,他们无需再为每个应用运行环境付出重复的搭建,管理和运维的工作,而将更多的精力投入到应用和核心业务的开发上,大大简化了应用发布的流程,缩短应用发布的进度。
我们将不断地完善 Cloud Foundry 在阿里云上落地,尽可能降低在阿里云上的安装和部署成本,让 Cloud Foundry 在阿里云上开更多的花,结更多的果,也欢迎大家在阿里云上部署,使用和 Cloud Foundry。
7. 参考资料
Bosh Docs: https://bosh.io/docs
Cloud Foundry Docs: https://docs.cloudfoundry.org/concepts/overview.html
Bosh Alicloud CPI: https://github.com/cloudfoundry-incubator/bosh-alicloud-cpi-release
Bosh Deployment: https://github.com/aliyun/bosh-deployment
Cloud Foundry Deployment: https://github.com/cloudfoundry/cf-deployment