设为首页 收藏本站
查看: 831|回复: 0

[经验分享] 在vSphere上通过BOSH工具大规模部署Cloud Foundry(3) -- 部署Cloud Foundry

[复制链接]

尚未签到

发表于 2015-10-10 07:59:32 | 显示全部楼层 |阅读模式
  本文根据Cloud Foundry中国架构师团队的实际部署经验总结而成,共分三个部分,可作为用BOSH部署Cloud Foundry云平台的实施指南。
  同步发布在以下网址:http://cndocs.cloudfoundry.com/deploy/vSphere.html
  作者: VMWare中国研发中心  张轩宁 陈实  陈威


  


  
  在前面的文章中,我们安装了Micro BOSH和 BOSH。如果一切顺利,我们已经为安装 Cloud Foundry做好准备了。首先,我们为Cloud Foundry的部署制定资源计划。
  在我们编写本文时,完整的 Cloud Foundry 安装包含大约 34 个不同作业(虚拟机)。其中有些作业为核心组件,必须安装至少一个这类作业的实例;例如,Cloud Controller、NATS 和 DEA 等。有些作业应具有多个实例,具体取决于实际需求;例如 DEA 和router等。有些作业是可选的,例如服务网关和服务节点。因此,我们在安装 Cloud Foundry 前,应决定将哪些组件纳入部署范围。我们制定了要部署的组件的清单后,便可以规划每个作业所需的资源。通常,这些资源包括 IP 地址、CPU、内存和存储。下面是一个部署计划示例。

作业
实例数
IP
内存
CPU
磁盘 (GB)
是否为必需的?

debian_nfs_server
1
xx.xx.xx.xx
2 GB
2
16
必需
nats
1
xx.xx.xx.xx
1 GB
1
8
必需
ccdb_postgres
1
xx.xx.xx.xx
1 GB
1
8
必需
uaadb
1
xx.xx.xx.xx
1 GB
1
8
必需
vcap_redis
1
xx.xx.xx.xx
1 GB
1
8
必需
uaa
1
xx.xx.xx.xx
1 GB
1
8
必需
acmdb
1
xx.xx.xx.xx
1 GB
1
8
必需
acm
1
xx.xx.xx.xx
1 GB
1
8
必需
cloud_controller
1
xx.xx.xx.xx
2 GB
2
16
必需
stager
1
xx.xx.xx.xx
1 GB
1
8
必需
router
2
xx.xx.xx.xx
512 MB
1
8
必需
health_manager
1
xx.xx.xx.xx
1 GB
1
8
必需
dea
2
xx.xx.xx.xx
2 GB
2
16
必需
mysql_node
1
xx.xx.xx.xx
1 GB
1
8
可选
mysql_gateway
1
xx.xx.xx.xx
1 GB
1
8
可选
mongodb_node
1
xx.xx.xx.xx
1 GB
1
8
可选
mongodb_gateway
1
xx.xx.xx.xx
1 GB
1
8
可选
redis_node
1
xx.xx.xx.xx
1 GB
1
8
可选
redis_gateway
1
xx.xx.xx.xx
1 GB
1
8
可选
rabbit_node
1
xx.xx.xx.xx
1 GB
1
8
可选
rabbit_gateway
1
xx.xx.xx.xx
1 GB
1
8
可选
postgresql_node
1
xx.xx.xx.xx
1 GB
1
8
可选
postgresql_gateway
1
xx.xx.xx.xx
1 GB
1
8
可选
vblob_node
1
xx.xx.xx.xx
1 GB
1
8
可选
vblob_gateway
1
xx.xx.xx.xx
1 GB
1
8
可选
backup_manager
1
xx.xx.xx.xx
1 GB
1
8
可选
service_utilities
1
xx.xx.xx.xx
1 GB
1
8
可选
serialization_data_server
1
xx.xx.xx.xx
1 GB
1
8
可选
services_nfs
1
xx.xx.xx.xx
1 GB
1
8
可选
syslog_aggregator
1
xx.xx.xx.xx
1 GB
1
8
可选
services_redis
1
xx.xx.xx.xx
1 GB
1
8
可选
opentsdb
1
xx.xx.xx.xx
1 GB
1
8
可选
collector
1
xx.xx.xx.xx
1 GB
1
8
可选
dashboard
1
xx.xx.xx.xx
1 GB
1
8
可选
合计:
36
39 GB
40
320  根据上表,我们便可以确定所需的资源池:

池名称
规模
配置
作业

small
30
RAM:1 GB;CPU:1 个;磁盘:8 GB
nats、ccdb_postgres、uaadb、vcap_redis、uaa、acmdb、acm、stager、health_manager、mysql_node、mysql_gateway、mongodb_node、mongodb_gateway、redis_node、redis_gateway、postgresql_node、postgresql_gateway、vblob_node、vblob_gateway、backup_manager、service_utilities、serialization_data_server、services_nfs、syslog_aggregator、services_redis、opentsdb、collector、dashboard
medium
4
RAM:2 GB;CPU:2 个;磁盘:16 GB
debian_nfs_server、cloud_controller、dea
router
2
RAM:512 M;CPU:1 个;磁盘:8 GB
router  根据上面两个表,我们可以修改清单文件。
  我们将清单文件命名为cf.yml。以下各节详细说明了其中的字段。 完整的Cloud Foundry部署yml文件,请参考:https://github.com/vmware-china-se/bosh_doc/blob/master/cf.yml(注,此yml文件是用来为Cloud Foundry的BOSH部署提供配置信息,与之前介绍的BOSH yml文件不同)
  name
  这是 Cloud Foundry 部署名。我们可以随意对它命名。
  director_uuid
  director UUID 是我们部署的 BOSH Director的 UUID。我们可以通过下面的命令来检索此值:
  $ bosh status
  release
  此Release名称应与您在创建 CF Release时输入的名称相同。版本是在创建Release时自动生成的。
  compilation、update、networks、resource_pools
  这些字段与 bosh.yml 文件中的那些字段类似。有关更多信息,请参考上一部分。
  jobs
  作业是 Cloud Foundry 的组件。每个作业在一个虚拟机上运行。各个作业的说明如下。



debian_nfs_server、services_nfs
这两个作业在 Cloud Foundry 中用作 NFS 服务器。由于它们是文件服务器,因此我们应确保“persistent_disk”属性确实存在。
syslog_aggregator
此作业用于收集系统日志并将它们存储在数据库中。
nats
NATS 是 Cloud Foundry 的消息总线。它是 Cloud Foundry 中的核心组件之一。
opentsdb
这是用来存储日志信息的数据库。由于它是数据库,因此它也需要“persistent_disk”属性。
collector
此作业用于收集系统信息并将它们存储在数据库中。
dashboard
这是基于 Web 的控制台工具,用来监视和报告 Cloud Foundry 平台的情况。
cloud_controller、ccdb
cloud_controller负责控制 Cloud Foundry 的所有组件。“ccdb”是Cloud Controller的数据库。“persistent_disk”属性在ccdb中是必需的。
uaa、uaadb
uaa用于进行用户身份验证和授权。uaadb是用来存储用户信息的数据库。“persistent_disk”属性对uaadb而言是必需的。
vcap_redis、services_redis
这两个作业用于存储 Cloud Foundry 的内部键值对。
acm、acmdb
acm是访问控制管理器 (Access Control Manager) 的简写形式。ACM 是一项服务,借助这项服务,Cloud Foundry 组件可以实现访问控制功能。“acmdb”是acm的数据库。“acmdb”也需要“persistent_disk”属性。
stager
stager 这个作业负责将用户应用程序的源代码及所有必需包打包。暂存完成后,便会将该应用程序传递给dea加以执行。
router
用于将用户的请求路由到 Cloud Foundry 中的正确目标位置。
health_manager、health_manager_next
health_manager这个作业负责监视所有用户的应用程序的运行状况。health_manager_next是health_manager的下一代版本。它们将共存一些时日。
dea
“dea”是 Droplet Execution Agent 的简写形式。所有用户的应用程序都在dea中执行。
mysql_node、mysql_gateway、mongodb_node、mongodb_gateway、redis_node、redis_gateway、rabbit_node、rabbit_gateway、postgresql_node、postgresql_gateway、vblob_node、vblob_gateway
这些作业全都是给 Cloud Foundry提供服务的。每项服务都有一个负责置备资源的节点。对应的网关位于cloud_controller与服务节点之间,担当每项服务的管理功能。
backup_manager
用于备份用户的数据和数据库。
service_utilities
服务管理实用程序。
serialization_data_server
用于在 Cloud Foundry 中对数据进行序列化的服务器。  properties:
  这是 cf.yml 文件中的另一个重要部分。我们应注意,此节中的 IP 地址应与 jobs 字段中的那些地址要一致。您应将此节中的密码和令牌替换成您自己的安全密码和令牌。
  domain:这是供用户访问的域的名称。我们还应创建一个 DNS 服务器来将该域解析为负载均衡器的 IP 地址。在我们的示例中,我们将域名设置为cf.local,以便用户在推送应用程序时可以使用vmc target api.cf.local。
  cc.srv_api_uri:此属性通常采用以下&#26684;式:http://api.<您的域名>。例如,如果我们将域设置为cf.local,那么srv_api_uri将为http://api.cf.local。
  cc.password:此密码必须包含至少 16 个字符。
  cc. allow_registration:如果它为 True,则用户可以使用vmc命令注册帐户。将它设置为 False 则禁止此行为。
  cc.admins:管理员用户的名单。即使allow_registration标志设置为 False,管理员用户也可以通过vmc命令进行注册。
  这些属性中的大多数“nfs_server”都应设置为“services_nfs”作业的 IP 地址。
  mysql_node.production:如果它为 True,则mysql_node的内存必须至少为 4 GB。在试验环境中,我们可以将它设置为 False,这样mysql_node的内存便可以设置为小于 4 GB。
  由于yml文件可能会随着 Cloud Foundry 新Release的问世而发生演变,因此提供了使用 BOSH 命令验证yml文件的选项。键入“bosh help”后,您便可以看到“bosh diff”的用法和解释:
  $ bosh diff [<template_file>]
  此命令会将您当前的部署清单与指定的部署清单模板进行对比。它可更新部署配置文件。最新的开发模板可以在deployment repo 中找到。
  例如,您可以运行下面的命令来将yml文件与模板文件进行对比。首先,您必须切换到您的 cf.yml 文件和模板文件所在的目录,然后运行下面的命令:
  $ bosh diff dev-template.erb
  此命令将显示 cf.yml 文件中的错误。如果缺少某些字段,此命令将自动帮您填入这些字段。如果有拼写错误或其他错误,此命令将报告存在语法错误。
  您可以从以下位置下载部署Cloud Foundry的示例yml文件:
  https://github.com/vmware-china-se/bosh_doc/blob/master/cf.yml
  此清单文件完成后,我们就可以开始安装 Cloud Foundry 了。
  1) 在之前的步骤中,我们已经通过以下命令从Gerrit克隆了 CF 代码库:
  $ gerrit clone ssh://<your username>@reviews.cloudfoundry.org:29418/cf-release.git
  2) 切换到上述目录,然后创建一个 CF Release。
  $ cd cf-release$ bosh create release
  这将下载部署所需的所有包、blob 数据及其他资源。下载过程将耗费若干分钟,主要取决于网络速度。
  注意:
  1.如果您编辑了 CF Release中的代码,那么您可能需要在命令 bosh create release 中添加 –force 选项。
  2.在运行此命令时系统一定要直接连接Internet。
  3.如果您的网络速度慢或者您未与 Internet 建立直接连接,那么您可能需要在一个更好的环境中完成创建Release的操作。您可以在有良好 Internet 连接的机器上使用–with-tarball选项创建此Release。然后,您需要将所生成的 tar 包复制到所需系统。
  如果一切都未出问题的话,您可以看到此Release的摘要,大致如下:

Generating manifest...
----------------------
Writing manifest...
Release summary
---------------
Packages
&#43;---------------------------&#43;---------&#43;-------&#43;------------------------------------------&#43;
| Name                      | Version | Notes | Fingerprint                              |
&#43;---------------------------&#43;---------&#43;-------&#43;------------------------------------------&#43;
| sqlite                    | 3       |       | e3e9b61f8cdc2610480c2aa841e89dc0bb1dc9c9 |
| ruby                      | 6       |       | b35a5da6c214d9a97fdd664931bf64987053ad4c |
… …
| debian_nfs_server         | 3       |       | c1dc860ed6ab2bee68172be996f64f9587e9ac0d |
&#43;---------------------------&#43;---------&#43;-------&#43;------------------------------------------&#43;
Jobs
&#43;---------------------------&#43;----------&#43;-------------&#43;------------------------------------------&#43;
| Name                      | Version  | Notes       | Fingerprint                              |
&#43;---------------------------&#43;----------&#43;-------------&#43;------------------------------------------&#43;
| redis_node                | 19       |             | 61098860eaa8cfb5dc438255ebe28db74a1feabc |
| rabbit_gateway            | 13       |             | ddcc0901ded1e45fdc4f318ed4ba8d8ccca51f7f |
… …
| debian_nfs_server         | 7        |             | 234fabc1a2c5dfbfd7c932882d947fed331b8295 |
| memcached_gateway         | 4        |             | 998623d86733a633c789849721e00d85cc3ebc20 |
Jobs affected by changes in this release
&#43;------------------&#43;----------&#43;
| Name             | Version  |
&#43;------------------&#43;----------&#43;
… …
| cloud_controller | 45.1-dev |
&#43;------------------&#43;----------&#43;
Release version:95.10-dev
Release manifest:/home/boshcli/cf-release/dev_releases/cf-def-95.10-dev.yml

  正如您可以看到的那样,dev-releases 目录包含此Release的 yml 清单文件(如果启用了 –with-tarball 选项,则还包含一个 tar 包文件)。
  3) 将 BOSH CLI 的目标设为 BOSH 的director。如果您不记得该director的 IP,您可以在第 III 部分中的 BOSH 部署清单中找到它。
  $ bosh target 10.60.98.117:25555
  Target set to 'bosh_director (http://10.60.98.117:25555) Ver:0.5.1 (release:abb3e7a4 bosh:2c69ee8c)'
  4) 通过生成的清单(manifest)文件(例如,示例中的 cf-def-95.10-dev.yml)上传 CF Release。
  $ bosh upload release cf-def-95.10-dev.yml
  这一步将复制安装包和作业,并将它们构建成一个 tar 包,然后对此Release进行验证以确保文件和依赖项正确无误。验证完毕后,它会上传Release并创建新的作业。最后,会看到Release已上传的信息:

Task 317 done
Started2012-08-28 05:35:43 UTC
Finished2012-08-28 05:36:44 UTC
Duration00:01:01
Release uploaded

  您可以通过以下命令验证上传的Release:
  $ bosh releases
  您可以查看列表中所有新上传的Release:

&#43;--------&#43;------------------------------------------------------------------------&#43;
| Name   | Versions                                                               |
&#43;--------&#43;------------------------------------------------------------------------&#43;
| cf-def | 95.1-dev, 95.8-dev, 95.9-dev, 95.10-dev                                |
| cflab  | 92.1-dev                                                               |
&#43;--------&#43;------------------------------------------------------------------------&#43;

  5) 在我们已经上传了Release和stemcell(就是第 III 部分中的那个stemcell)后,部署清单(deployment manifest)也已准备就绪,那么就将BOSH的部署配置设置为此部署清单吧:
  $ bosh deployment cf-dev.yml
  设置完毕:
  Deployment set to '/home/boshcli/cf-dev.yml'
  现在我们就可以部署 Cloud Foundry 了:
  $ bosh deploy
  这将为每个作业创建虚拟机、编译包并安装依赖项。此过程将耗费十几分钟到几小时,快慢取决于服务器的硬件条件。您可以看到大致如下的输出:

Preparing deployment
binding deployment (00:00:00)                                                                     
binding releases (00:00:01)                                                                       
… …
Preparing package compilation
… …
Compiling packages
… …
Preparing DNS
binding DNS (00:00:00)   
Creating bound missing VMs
… …                                                            
Binding instance VMs
… …                                                                     
Preparing configuration
binding configuration (00:00:03)                                                                  
… …
Creating job cloud_controller
cloud_controller/0 (canary) (00:02:45)        
… …                                                   
Done                    1/1 00:08:41                                                               
Task 318 done
Started2012-08-28 05:37:52 UTC
Finished2012-08-28 05:49:43 UTC
Duration00:11:51
Deployed 'cf-dev.yml' to 'bosh_director'

  要查看您的部署,可以使用下面的命令:
  $ bosh deployments

&#43;----------&#43;
| Name     |
&#43;----------&#43;
| cf.local |
&#43;----------&#43;
Deployments total: 1

  您还可以验证每个虚拟机的运行状态:
  $ bosh vms

&#43;-----------------------------&#43;---------&#43;---------------&#43;-------------&#43;
| Job/index                   | State   | Resource Pool | IPs         |
&#43;-----------------------------&#43;---------&#43;---------------&#43;-------------&#43;
| acm/0                       | running | small         | 10.60.98.58 |
| acmdb/0                     | running | small         | 10.60.98.57 |
| cloud_controller/0          | running | medium        | 10.60.98.59 |
… … …
&#43;-----------------------------&#43;---------&#43;---------------&#43;-------------&#43;
VMs total: 40

  此时,Cloud Foundry 已经完全安装好了。如果您迫不及待地想要验证此安装,您可以使用vmc命令将其中一个router的 IP 地址设为目标,然后在该目标上部署一个测试用的 Web 应用程序(见后一节)。由于此时没有配置 DNS 服务,因此,在vmc客户端以及运行浏览器来测试的机器的 hosts 文件需包含至少以下两行内容:

<router的 IP 地址>  api.yourdomain.com  
<router的 IP 地址>  <youapp>.yourdomain.com  

  如果上述测试顺利通过,则说明您的 Cloud Foundry 实例正常工作。最后要做的是部署负载均衡器和 DNS服务。它们不属于 Cloud Foundry 的组件,但在生产环境中往往需要正确地设置它们。我们简要地介绍一下如何设置。
  您可以部署一个硬件或软件负载均衡器 (LB) 来均匀地向多个router实例分配负载。在我们的示例部署中,我们有两个router。对于软件 LB,您可以使用Stingray 流量管理器。可从以下位置下载该软件:https://support.riverbed.com/download.htm?filename=public/software/stingray/trafficmanager/9.0/ZeusTM90_Linux-x8664.tgz
  要解析 Cloud Foundry 实例所属的域名,需要有 DNS 服务器。基本而言,DNS 服务器会将像 *.yourdomain.com 这样带通配符的域名解析为负载均衡器的 IP 地址。如果您没有 LB,您可以设置 DNS Rotation,从而以循环方式将域解析为各个router的地址。
  LB 和 DNS 设置妥善后,您便可以开始在您的实例上部署应用程序。
  VMC 是使用Cloud Foundry的命令行工具。它可以执行 Cloud Foundry 上的大多数操作,例如配置应用程序、将应用部署到 Cloud Foundry 以及监控应用程序的状态。要安装 VMC,需要先安装 Ruby 和RubyGems( Ruby Gem管理器)。目前支持 Ruby 1.8.7 和 1.9.2。接着,您可以通过下面的命令安装 VMC(有关 VMC 安装的更多信息,请参见http://docs.cloudfoundry.com/tools/vmc/installing-vmc.html):
  $ sudo gem install vmc
  现在,可指定该 Cloud Foundry 实例的目标,相应的 URL 应形如 api.yourdomain.com,例如:
  $ vmc target api.cf.local
  使用管理员用户和密码(部署清单中指定了该凭据)登录:
  $ vmc login
  起初,系统将要求您为自己的帐户设置密码。登录后,您可以获得自己 Cloud Foundry 实例的信息:
  $ vmc info
  现在,我们来创建并部署一个简单的 Hello World Sinatra 应用程序以验证该实例。
  $ mkdir ~/hello
  $ cd ~/hello
  创建一个名为hello.rb且包含以下内容的 Ruby 文件:
  require 'sinatra'
  get '/'


    do&quot;Hello from Cloud Foundry&quot;
  end
  保存此文件,接下来我们要上传此应用程序:
  $ vmc push
  回答提示问题,如下所示

Would you like to deploy from the current directory?[Yn]:
Application Name:hello
Detected a Sinatra Application, is this correct?[Yn]:
Application Deployed URL [hello.cf.local]:
Memory reservation (128M, 256M, 512M, 1G, 2G) [128M]:
How many instances? [1]:
Bind existing services to 'hello'?[yN]:
Create services to bind to 'hello'?[yN]:
Would you like to save this configuration?[yN]:

  稍等片刻后,您将看到以下内容:

Creating Application:OK
Uploading Application:
Checking for available resources:OK
Packing application:OK
Uploading (0K):OK   
Push Status:OK
Staging Application 'hello':OK                                                
Starting Application 'hello':OK   

  现在,到浏览器中访问该应用程序的 URL:hello.cf.local。如果您可以看到下面的文本,则说明您的应用程序已成功部署。

  恭喜!您的 Cloud Foundry 实例已经完全设置好了。它在功能上与 cloudfoundry.com 完全相同。



版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-124838-1-1.html 上篇帖子: 使用vSphere Client 上传文件到EXSI服务器 下篇帖子: vsphere学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表