开源PaaS工具CloudFoundry落地阿里云

原文: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等。

开源PaaS工具CloudFoundry落地阿里云

值得欣喜的是,今天 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

开源PaaS工具CloudFoundry落地阿里云

本文将从以下几个方面想大家详细介绍如何在阿里云上部署 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 的创建。如下图所示:

开源PaaS工具CloudFoundry落地阿里云

1.2. 创建 VSwitch

完成 VPC 的创建后,点击下一步按钮,即可为当前 VPC 创建一个 VSwitch。输入交换机名称、描述,选择一个可用区,输入一个子网网段后,点击创建交换机按钮即可完成一个新的 VSwitch 的创建。如下图所示:

开源PaaS工具CloudFoundry落地阿里云

1.3. 创建 Security Group

登录安全组控制台,点击右上角创建安全组按钮,输入安全组名称、描述,选择专有网络,选择刚刚创建的 VPC,点击确定按钮即可完成一个新的安全组的创建。如下图所示:

开源PaaS工具CloudFoundry落地阿里云

完成安全组的创建后,点击立即设置规则,进入安全组规则页面。在创建安全组之前,首先选定一个 IP 地址作为 Bosh Director 的私网 IP,比如 172.16.0.3,然后点击页面右上角的添加安全组规则,输入端口范围 25555/25555,选择授权类型为地址段访问,输入 Director IP,点击确定按钮,即可实现对 25555 规则的添加,如下图所示:

开源PaaS工具CloudFoundry落地阿里云

依据相同的操作,按照下面的参数,完成对所有相关规则的设置:

规则方向 协议类型 端口范围 授权对象 优先级 描述
入方向 自定义 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 与跳板机的绑定,如下图所示:

开源PaaS工具CloudFoundry落地阿里云

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 管理控制台,如果页面弹出安全风险警告页面:

开源PaaS工具CloudFoundry落地阿里云

直接点击“继续使用AccessKey”按钮,进入 Access Key 管理页面,点击页面右上角的创建Access Key按钮,

开源PaaS工具CloudFoundry落地阿里云

阅读并同意《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:

开源PaaS工具CloudFoundry落地阿里云

点击下一步按钮,使用默认的健康检查配置(或者自行设置配置),点击确认按钮,完成 80 端口监听的添加。

按照相同的步骤,添加 TCP 443 的监听:

开源PaaS工具CloudFoundry落地阿里云

3.3. 申请域名

申请域名是为了给 Cloud Foundry 中的应用提供访问地址。如果您还没有域名,可先通过阿里云域名管理控制台进行域名注册。也可以使用 xip.ionip.io 等服务将IP映射为域名,但请注意,这两个都不太稳定,可能会影响测试的体验。

域名申请成功之后,需要为该域名设置解析记录,即将负载均衡的公网 IP 地址绑定到域名上。

进入域名解析控制台,点击右上角的添加域名按钮,输入所申请的域名或者自己的域名,点击确认按钮,完成域名的添加。

接着点击解析设置按钮,进入域名管理页面,点击添加解析按钮,输入主机记录为:*,输入记录值为:<负载均衡公网 IP 或者与其绑定的 EIP 地址>,点击确定按钮,完成解析记录的添加。

开源PaaS工具CloudFoundry落地阿里云

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

    1. 手工下载url链接后的文件
    2. 将下载后的文件传到跳板机上去,再通过命令upload-release, 如bosh upload-release binary-buildpack-release.1.0.14.tgz,将各个 Release 上传到bosh
    3. 注释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下面每个角色的azsinstances属性 
一切就绪后,开始部署 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的下载,如下:

当下载所需的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

上一篇:使用MQTT.fx客户端接入阿里云


下一篇:Android-保你能记住的生命周期教程