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数据存储,并浏览该存储。
右键单击根文件夹,创建一个用来存储虚拟机的子文件夹。在本例中,我们将此子文件夹命名为“boshdeployer”。此文件夹名称将成为我们部署清单中的“disk_path”参数的值。
注意:如果您没有共享的 NFS 存储,您可以使用hypervisor的本地磁盘作为数据存储。(注意: 仅建议在试验系统采用本地磁盘。)您可以按如下方式命名这些数据存储:主机 1 的数据存储命名为“localstore1”、主机 2 的数据存储命名为“localstore2”,依此类推。随后在清单文件中,您可以使用诸如“localstore*”之类的通配符模式来指定所有主机的数据存储。应在所有本地数据存储上都创建“boshdeployer”文件夹。
4.下载公共 stemcell
$ mkdir -p ~/stemcells
$ cd stemcells
$ bosh public stemcells
输出大致如下 :
+---------------------------------+-------------------------------------------------------+ | Name | Url | +---------------------------------+-------------------------------------------------------+ | 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... | +---------------------------------+-------------------------------------------------------+ 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 ```
Deployment set to “~/deployments/micro01/micro_bosh.yml”
$ bosh micro deploy ~/stemcells/micro-bosh-stemcell-0.1.0.tgz
如果一切都运行顺利,Micro BOSH将在几分钟内部署完毕。您可以通过下面的命令查看部署状态:
$ bosh micro deployments
您将会看到您的Micro BOSH部署已列出 :
+---------+-----------------------------------------+-----------------------------------------+ | Name | VM name | Stemcell name | +---------+-----------------------------------------+-----------------------------------------+ | micro01 | vm-a51a9ba4-8e8f-4b69-ace2-8f2d190cb5c3 | sc-689a8c4e-63a6-421b-ba1a-400287d8d805 | +---------+-----------------------------------------+-----------------------------------------+
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 “FirstnameLastname”
$ gitconfig –global [email protected] ```
7)安装gerrit-cli gem
8)使用Gerrit从 Cloud Foundry 代码库中克隆Release代码。以下命令分别获取 BOSH 和 Cloud Foundry 的代码。
``` $ gerrit clone ssh:// @reviews.cloudfoundry.org:29418/bosh-release.git
$ gerrit clone ssh://<your username>@reviews.cloudfoundry.org:29418/cf-release.git ```
然后我们创建我们自己的 BOSH Release:
``` $ cd bosh-release
$ git submodule update –init
$ 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 +----------------+---------+-------+------------------------------------------+ | Name | Version | Notes | Fingerprint | +----------------+---------+-------+------------------------------------------+ | nginx | 1 | | 1f01e008099b9baa06d9a4ad1fcccc55840cf56e | …… | ruby | 1 | | c79b76fcb9bdda122ad2c52c3604ba950b482681 | +----------------+---------+-------+------------------------------------------+ Jobs +----------------+---------+-------------+------------------------------------------+ | Name | Version | Notes | Fingerprint | +----------------+---------+-------------+------------------------------------------+ | micro_aws | 1.1-dev | new version | fadbedb276f918beba514c69c9e77978eadb65ac | …… | redis | 2 | | 3d5767e5deec579dee61f2c131982a97975d405e | +----------------+---------+-------------+------------------------------------------+ 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 Started 2012-08-12 03:32:24 UTC Finished 2012-08-12 03:52:24 UTC Duration 00:20:00 Deployed `bosh-dev1.yml` to `micro01`
这表示您已成功部署 BOSH。您可以通过执行下面的命令来查看您的部署:
$ bosh deployments
+-------+ | Name | +-------+ | bosh1 | +-------+
您可以通过执行下面的命令来查看所有虚拟机的状态:
$ bosh vms
如果一切都未出问题的话,您将看到大致如下的虚拟机状态:
+------------------+---------+---------------+--------------+ | Job/index | State | Resource Pool | IPs | +------------------+---------+---------------+--------------+ | 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 | +------------------+---------+---------------+--------------+ VMs total: 6