南天一柱 发表于 2015-10-9 13:46:40

在vSphere上通过BOSH工具大规模部署Cloud Foundry(2)

  本文根据Cloud Foundry中国架构师团队的实际部署经验总结而成,共分三个部分,可作为用BOSH部署Cloud Foundry云平台的实施指南。
  同步发布在以下网址:http://cndocs.cloudfoundry.com/deploy/vSphere.html
  作者: VMWare中国研发中心张轩宁 陈实陈威
  


  BOSH CLI 安装完毕后,我们现在便开始安装Micro BOSH。如前文所述,可以将Micro BOSH视作袖珍版的 BOSH。尽管标准的 BOSH各个组件分布在 6 个虚拟机上 ,但Micro BOSH却恰恰相反,它在单个虚拟机中包含了所有组件。它可以轻易的设置,通常用于部署小型的Release,如 BOSH。从这个意义上讲,BOSH 是自部署的。用 BOSH 团队的话说,这叫做“Inception”。
  以下步骤是通过在 BOSH 官方文档基础上添加更多操作细节改编成的。
  1.在 BOSH CLI 虚拟机中,安装 BOSH 部署器 ruby gem。
  $ gem install bosh_deployer
  一旦安装了该部署器,那么您在命令行中键入 bosh 后将会看到一些额外的命令显示出来。
  $ bosh help

...
Micro
micro deployment [<name>]选择要使用的微部署
micro status显示Micro BOSH部署的状态
micro deployments显示部署列表
micro deploy <stemcell>将Micro BOSH实例部署到当前选择的部署
--update更新现有实例
micro delete删除Micro BOSH实例(包括持久磁盘)
micro agent <args>发送代理消息
micro apply <spec>应用规范

  注意:上述 bosh micro 命令必须在Micro BOSH部署目录中运行
  2.在 vCenter 中的“主页”(Home) ->“清单”(Inventory) ->“虚拟机和模板”(VMs and Templates) 视图下,确保用来存放虚拟机和模板的文件夹已经创建(见第 II 部分)。这些文件夹将在部署配置中使用。
  3.从“主页”(Home) ->“清单”(Inventory) ->“数据存储”(Datastores) 视图中,选择我们创建的NFSdatastore数据存储,并浏览该存储。
http://cndocs.cloudfoundry.com/images/deploy/fig25.png
  右键单击根文件夹,创建一个用来存储虚拟机的子文件夹。在本例中,我们将此子文件夹命名为“boshdeployer”。此文件夹名称将成为我们部署清单中的“disk_path”参数的值。
http://cndocs.cloudfoundry.com/images/deploy/fig26.png
  注意:如果您没有共享的 NFS 存储,您可以使用hypervisor的本地磁盘作为数据存储。(注意: 仅建议在试验系统采用本地磁盘。)您可以按如下方式命名这些数据存储:主机 1 的数据存储命名为“localstore1”、主机 2 的数据存储命名为“localstore2”,依此类推。随后在清单文件中,您可以使用诸如“localstore*”之类的通配符模式来指定所有主机的数据存储。应在所有本地数据存储上都创建“boshdeployer”文件夹。
  4.下载公共 stemcell
  $ mkdir -p ~/stemcells
  $ cd stemcells
  $ bosh public stemcells
  输出大致如下 :

&#43;---------------------------------&#43;-------------------------------------------------------&#43;
| Name                            | Url                                                   |
&#43;---------------------------------&#43;-------------------------------------------------------&#43;
| bosh-stemcell-0.5.2.tgz         | https://blob.cfblob.com/rest/objects/4e4e78bca31e1... |
| bosh-stemcell-aws-0.5.1.tgz   | https://blob.cfblob.com/rest/objects/4e4e78bca21e1... |
| bosh-stemcell-vsphere-0.6.4.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca31e1... |
| micro-bosh-stemcell-0.1.0.tgz   | https://blob.cfblob.com/rest/objects/4e4e78bca51e1... |
&#43;---------------------------------&#43;-------------------------------------------------------&#43;
To download use 'bosh download public stemcell<stemcell_name>'.For full url use --full.

  使用下面的命令下载Micro BOSH的 stemcell:
  $ bosh download public stemcell micro-bosh-stemcell-0.1.0.tgz
  注意:此stemcell的大小为 400 至 500 MB。在速度缓慢的网络中可能需要耗费很长时间才能将它下载下来。在这种情况下,您可以使用任何能在出断点续传的工具(如 Firefox 浏览器)进行下载。使用 --full 参数可显示完整的下载 URL。
  5.配置部署 (.yml) 文件,然后将它保存在micro1文件夹下,该文件夹名称在 .yml文件中定义。
  $ cd ~


  $ mkdir deployments


  $ cd deployments


  $ mkdir micro01
  在 yml 文件中,有一节内容是关于 vCenter 的。请在此节中输入我们在第 II 部分中创建的文件夹的名称。“disk_path”应为我们刚刚在数据存储 (NFSdatastore) 中创建的文件夹。datastore_pattern 和persistent_datastore_pattern 的值是共享数据存储的名称 (NFSdatastore)。如果您采用本地磁盘,此值可以是像“localstore*”这样的通配字符串。

datacenters:
- name:vDataCenter
vm_folder:vm_folder
template_folder:template
disk_path:boshdeployer
datastore_pattern:NFSdatastore
persistent_datastore_pattern:NFSdatastore
allow_mixed_datastores:true

  下面是Micro BOSH的一个示例yml文件的链接:
  https://github.com/vmware-china-se/bosh_doc/blob/master/micro.yml
  6.使用以下命令设置此Micro BOSH部署:
  $ cd deployments


  $ bosh micro deployment micro01

部署设置为“~/deployments/micro01/micro_bosh.yml”

  $ bosh micro deploy ~/stemcells/micro-bosh-stemcell-0.1.0.tgz
  如果一切都运行顺利,Micro BOSH将在几分钟内部署完毕。您可以通过下面的命令查看部署状态:
  $ bosh micro deployments
  您将会看到您的Micro BOSH部署已列出 :

&#43;---------&#43;-----------------------------------------&#43;-----------------------------------------&#43;
| Name    | VM name                                 | Stemcell name                           |
&#43;---------&#43;-----------------------------------------&#43;-----------------------------------------&#43;
| micro01 | vm-a51a9ba4-8e8f-4b69-ace2-8f2d190cb5c3 | sc-689a8c4e-63a6-421b-ba1a-400287d8d805 |
&#43;---------&#43;-----------------------------------------&#43;-----------------------------------------&#43;

安装 BOSH
  Micro BOSH准备就绪后,我们就可用它来部署 BOSH。BOSH 是一个包含 6 个虚机的分布式系统。正如上一节所提到的那样,我们需要有三项内容:一个作为虚拟机模板的stemcell、一个作为待部署软件的 BOSH Release,以及一个用来定义部署配置的部署清单文件。我们来逐一准备。
  1)首先,我们将 BOSH CLI 的目标设为Micro BOSH的Director。可以将 BOSH Director视作 BOSH 的控制者或协调者。所有 BOSH CLI 命令均发往该Director加以执行。该Director的 IP 地址在我们用来创建Micro BOSH的 yml 文件中定义。BOSH Director的默认用户/密码为 admin/admin。在我们的示例中,我们使用下面的命令来设定Micro BOSH的目标和进行身份验证:
  $ bosh target 10.60.98.124:25555
  $ bosh login
  2)接下来,我们下载 BOSH stemcell并将其上传到Micro BOSH。这一步与下载Micro BOSH的 stemcell 类似。唯一的差别在于,我们选择的是 BOSH 而非Micro BOSH的stemcell。
  ```$ cd ~/stemcells$ bosh public stemcells


  $ bosh download public stemcell bosh-stemcell-vsphere-0.6.4.tgz $ bosh upload stemcell bosh-stemcell-vsphere-0.6.4.tgz```
  如果您已在第 II 部分中创建了Gerrit帐户,请跳过第 3 步至第 7 步。
  3)在以下位置注册 Cloud Foundry Gerrit服务器:http://reviews.cloudfoundry.org
  4)设置您的 ssh 公钥(接受所有默认值)
  $ ssh-keygen -t rsa
  将您的密钥从 ~/.ssh/id_rsa.pub 复制到您的Gerrit帐户中
  5)在您的Gerrit帐户配置文件中创建并上传自己的 SSH 公钥
  6)设置您的姓名和电子邮件
  $ git config --global user.name &quot;FirstnameLastname&quot;
  $ gitconfig --global user.emailyour_email@youremail.com
  7)安装gerrit-cli gem
  8)使用Gerrit从 Cloud Foundry 代码库中克隆Release代码。以下命令分别获取 BOSH 和 Cloud Foundry 的代码。
  $ gerrit clone ssh://<yourusername>@reviews.cloudfoundry.org:29418/bosh.git


  $ gerrit clone ssh://<your username>@reviews.cloudfoundry.org:29418/cf-release.git
  然后我们创建我们自己的 BOSH Release:
  $ cd bosh-release$ ./update


  $ bosh create release --with-tarball
  如果存在本地代码冲突,您可以添加“–force”选项:
  $ bosh create release --with-tarball --force
  这一步可能需要一些时间才能完成,具体取决于您的网络速度。它首先会从一个 Blob 服务器下载二进制文件。然后它会构建包并生成清单文件。该命令的输出大致如下:

         Syncing blobs…
...
Building DEV release
Please enter development release name:bosh-dev1
---------------------------------
Building packages

Generating manifest...

Copying jobs...

  最后,Release创建完毕后,您将看到大致如下的内容。请注意,最后两行指出了清单文件和Release文件。

Generated /home/boshcli/bosh-release/dev_releases/bosh-dev1-6.1-dev.tgz
Release summary
---------------
Packages
&#43;----------------&#43;---------&#43;-------&#43;------------------------------------------&#43;
| Name         | Version | Notes | Fingerprint                              |
&#43;----------------&#43;---------&#43;-------&#43;------------------------------------------&#43;
| nginx          | 1       |       | 1f01e008099b9baa06d9a4ad1fcccc55840cf56e |
……
| ruby         | 1       |       | c79b76fcb9bdda122ad2c52c3604ba950b482681 |
&#43;----------------&#43;---------&#43;-------&#43;------------------------------------------&#43;
Jobs
&#43;----------------&#43;---------&#43;-------------&#43;------------------------------------------&#43;
| Name         | Version | Notes       | Fingerprint                              |
&#43;----------------&#43;---------&#43;-------------&#43;------------------------------------------&#43;
| micro_aws      | 1.1-dev | new version | fadbedb276f918beba514c69c9e77978eadb65ac |
……
| redis          | 2       |             | 3d5767e5deec579dee61f2c131982a97975d405e |
&#43;----------------&#43;---------&#43;-------------&#43;------------------------------------------&#43;
Release version:6.1-dev
Release manifest:/home/boshcli/bosh-release/dev_releases/bosh-dev1-6.1-dev.yml
Release tarball (88.8M):/home/boshcli/bosh-release/dev_releases/bosh-dev1-6.1-dev.tgz

  9)将创建好的Release上传到Micro BOSH的director。
  $ bosh upload release dev_releases/bosh-dev1-6.1-dev.tgz
  10)配置 BOSH 部署清单。首先,我们通过执行以下命令获取该director的 UUID 信息:
  $ bosh status

Updating director data... done
Target         micro01 (http://10.60.98.124:25555) Ver: 0.4 (00000000)
UUID         7d72eb71-9a98-4081-9857-ad7c7ff4ee33
User         admin
Deployment   /home/boshcli/bosh-dev1.yml

  现在我们将进入此安装过程中最为复杂的环节:修改部署清单文件。由于大多数 BOSH 部署错误都是因为清单文件中的设置不正确而造成的,因此我们详细地对此环节进行说明。
  首先,我们从以下位置获取清单模板:https://github.com/cloudfoundry/oss-docs/blob/master/bosh/tutorial/examples/bosh_manifest.yml
  由于 BOSH 官方文档提供了该清单文件的规范,因此我们假定您在阅读本篇文章前,已经通读了此文档。我们将不会对该文件进行全面的介绍;而是讨论该清单文件中的一些重要项目。
  网络(networks)
  下面是网络一节的一个示例。

networks:#定义网络
- name:default
subnets:
- reserved:#您不希望分配的 IP
- 10.60.98.121 - 10.60.98.254
static:#您将使用的 IP
- 10.60.98.115 - 10.60.98.120
range: 10.60.98.0/24
gateway: 10.60.98.1
dns:
- 10.40.62.11
- 10.135.12.101
cloud_properties:#与所有其他虚拟机都相同的网络。
name:VM Network

  static:包含 BOSH 虚拟机的 IP 地址。
  reserved:BOSH 不应使用的 IP 地址。请务必要排除所有已经分配给同一网络中其他设备(例如存储设备、网络设备、Micro BOSH和 vCenter 主机)的 IP 地址。在安装期间,Micro BOSH可能会创建一些临时虚拟机(工作者虚拟机)来执行编译。如果我们不指定预留的地址,这些临时虚拟机可能会与现有设备或主机存在 IP 地址冲突。
  cloud_properties:name 是我们在 vSphere 中定义的网络名称(见第 II 部分)。
  资源池(resource_pools)
  此节定义作业使用的虚拟机配置(CPU、内存、磁盘和网络)。通常,应用程序的各个作业在资源使用方面各异。例如,有些作业需要较多的内存量,而有些作业则需要更多的vCPU来执行计算密集型任务。根据实际需要,我们应创建一个或多个资源池。需要注意的是,所有池的总规模应等于在清单文件中定义的作业实例的总数。部署 BOSH 时,由于总共有 6 个虚拟机(6 个作业),因此所有池的规模加起来应等于 6。
  在我们的清单文件中,我们有 3 个资源池:

Resource Pool
Size
VM Configuration
Job

small
3
RAM:512 MB;CPU:1 个;磁盘:2 GB
nats、redis、health_monitor
medium
2
RAM:1 GB;CPU:1 个;磁盘:8 GB
postgres、blobstore
director
1
RAM:2 GB;CPU:2 个;磁盘:8 GB
director  编译(compilation)
  此节定义为编译包而创建的工作者虚拟机。在资源有限的系统中,我们应减少并发工作者虚拟机的数目,以确保编译成功。在我们的示例中,我们定义 4 个工作者虚拟机。
  更新(update)
  此节包含一个非常有用的参数:max_in_flight。此参数用于向 BOSH 告知最多可以并行安装的作业数。在运行速度缓慢的系统中,请设法减小此数目。如果将此数目设置为 1,则表示作业将按顺序部署。对于 BOSH 部署,我们建议将此数目设置为 1,以确保 BOSH 可以成功安装。
  作业(jobs)
  在 BOSH Release中有六个作业。每个作业占用一个虚拟机。根据作业的性质和资源使用情况,我们将作业分配给各个资源池。需要注意的一点是,我们需要向以下三个作业分配持久磁盘:postgres、director 和blobstore。若无持久磁盘,这些作业将无法正常运行,因为它们的本地磁盘很快就会被占满。
  最好填写一张像下面这样的电子表格来对您的部署进行规划。您可以根据该电子表格修改部署清单。

作业
资源池
IP

nats
small
10.60.98.120
postgres
medium
10.60.98.119
redis
small
10.60.98.118
director
director
10.60.98.117
blob_store
medium
10.60.98.116
health_monitor
small
10.60.98.115  我们基于上表创建了一个示例部署清单,您可以从这里下载:
  https://github.com/vmware-china-se/bosh_doc/blob/master/bosh.yml
  11)更新完部署清单文件后,我们便可以通过运行以下命令开始实际部署:
  $ bosh deployment bosh_dev1.yml
  $ bosh deploy
  此过程可能需要等待一段时间才能完成,具体取决于您的网络条件以及可用的硬件资源。您也可以在 vCenter 控制台查看创建、配置并销毁虚拟机的过程。

Preparing deployment
…..
Compiling packages
……
Binding instance VMs
postgres/0 (00:00:01)                                                                           
director/0 (00:00:01)                                                                           
redis/0 (00:00:01)                                                                              
blobstore/0 (00:00:01)                                                                           
nats/0 (00:00:01)                                                                              
health_monitor/0 (00:00:01)                                                                     
Done                  6/6 00:00:01                                                               
Updating job nats
nats/0 (canary) (00:01:14)                                                                     
Done                  1/1 00:01:14
……
Updating job director
director/0 (canary) (00:01:10)                                                                  
Done                  1/1 00:01:10   
……

  如果一切运行顺利,您最终将会看到大致如下的结果:

Task 14 done
Started2012-08-12 03:32:24 UTC
Finished2012-08-12 03:52:24 UTC
Duration00:20:00
Deployed `bosh-dev1.yml` to `micro01`

  这表示您已成功部署 BOSH。您可以通过执行下面的命令来查看您的部署:
  $ bosh deployments

&#43;-------&#43;
| Name|
&#43;-------&#43;
| bosh1 |
&#43;-------&#43;

  您可以通过执行下面的命令来查看所有虚拟机的状态:
  $ bosh vms
  如果一切都未出问题的话,您将看到大致如下的虚拟机状态:

&#43;------------------&#43;---------&#43;---------------&#43;--------------&#43;
| Job/index      | State   | Resource Pool | IPs          |
&#43;------------------&#43;---------&#43;---------------&#43;--------------&#43;
| blobstore/0      | running | medium      | 10.60.98.116 |
| director/0       | running | director      | 10.60.98.117 |
| health_monitor/0 | running | small         | 10.60.98.115 |
| nats/0         | running | small         | 10.60.98.120 |
| postgres/0       | running | medium      | 10.60.98.119 |
| redis/0          | running | small         | 10.60.98.118 |
&#43;------------------&#43;---------&#43;---------------&#43;--------------&#43;
VMs total: 6



版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: 在vSphere上通过BOSH工具大规模部署Cloud Foundry(2)