在openstack上使用Bosh部署cloudfoundry集群(上)

长平狐 发布于 2013/11/25 18:27
阅读 2K+
收藏 0

本文所要讨论的是如何在openstack上使用Bosh部署cloudfoundry集群,并分为上下两个部分。在第一部分中主要涉及stemcell和bosh自部署的内容,第二部分是有关cloudfoundry的集群搭建配置和最终部署。

    在openstack上部署cloudfoundry国外已经有了很多的成功案例,最近我们也在尝试。但是由于处于测试阶段以及文档的不足,搭建的难度还是不小的。虽然问题存在,但是在openstack的实践过程中,我们能够总结出一条第三方IaaS(指的是除了AWS和vsphere的其他IaaS)通过bosh部署cloudfoundry集群的思路。这种思路远比问题本身来的重要。这里的参考资料主要有:

  1. 本文主要参考Dr. Nic Williams's bosh-getting-started series:https://github.com/drnic/bosh-getting-started
  2. 之前EMC的大牛们对此进行过他们的尝试,并在openstack大会上做了题为CloudFoundry弹性架构和基于OpenStack的部署实践》的专题演讲。其中内容包括了根据开源的openstack cpi,使用bosh进行cloudfoundry的集群部署实践。视频传送门:http://vdisk.weibo.com/s/aicnt ppt:http://vdisk.weibo.com/s/aicpv?t=file 
  3. cloudfoundry官方给出的在vsphere上部署cloudfoundry集群的中文文档:http://cloudfoundry-doc.csdn.net/deploy/vSphere.html
如果刚刚开始接触BOSH,可以先读下我的另外一篇博文:《Cloudfoundry的部署工具BOSH介绍》

    一 部署准备

      在部署之前,首先要对bosh自部署有一个认识。可能会有很多人不太理解,既然bosh是个部署工具,那为何自身还要部署自己呢? 这像是一个悖论。实际上,对这个理解可以从为何出现bosh说起。我们知道,cloudfoundry提供了良好的弹性扩展能力而广受开发者青睐,但如果使用dev_setup进行部署会浪费很多的时间人力,同时CF的版本也无法控制。bosh的出现也正是由于cloudfoundry的自动化部署需求,使用bosh能够快速有效的部署cloudfoundry集群,这给PaaS运维带来极大的便利。
      由于cloudfoundry的生产集群规模庞大,因此针对其开发的部署工具bosh结构上必须是多节点的。其最少的节点数是6个,分别部署着不同的组件。既然bosh是分布式的,那么其自身必须是分布式部署的。如果手动去每一台机器上跑脚本当然可以,但是这也为背了bosh的设计初衷,所以bosh提供的方法是通过micro bosh进行部署。micro bosh是跑在单节点上的,但包含了bosh的所有组件,它适合部署规模较小的集群,比如bosh。这样,就出现了micro bosh到bosh,bosh在到cloudfoundry的过程。
      有关micro bosh详细说明,会在后文部署过程中详细说明。
  • 软件:openstack当然是必须的。这里我们使用的是 OpenStack Essex (2012.1),在裸机部署完整版的openstack可以使用这些资源:
  1. Devstack
  2. hastexo! tutorial

搭建并测试好openstack集群后,还有一步工作。你必须上传一个 Ubuntu 10.04 LTS 64-bit的镜像,因为接下来我们会使用该镜像创建一个虚拟机。

  • 硬件:这一部分主要是依据参考资料2,也就是cloudfoundry官方给出的配置。 抛开openstack的节点,这里只计算bosh及cf的节点。


节点数目

操作系统

可否是物理机

BOSH CLI

1

Ubuntu

可以(我们用的是VM)

Micro BOSH

1

Ubuntu

不可以

BOSH

6

Ubuntu

不可以

Cloud Foundry

34

Ubuntu

不可以

合计:

42

 

 

这个节点配置是针对大规模的生产环境,因此对cloudfoundry的节点数分配的数量较多。这个规模是自己定的,如果在实验环境中资源不足,可以根据CF节点特点适当减少。(保证cf的每一种节点能够达到bosh的效果就可以)

       二 部署步骤

  1. inception VM创建及配置
  2. 配置部署micro bosh
  3. 使用micro bosh配置部署bosh
  4. 使用bosh配置部署cloudfoundry

       三  详细部署过程

1.inception VM创建及配置

  首先说明下什么是inception VM。这个VM在openstack的BOSH部署中扮演了如下角色:

  • 用于创建一个自定义的micro bosh stemcell
  • 存储了micro bosh的registry,并运行跟踪openstack组件
  • 安装了bosh cli,部署bosh release和cf release都是在这个VM上运行
  • 存储了bosh cli和各release之间的交互日志文件
  了解了inception VM的作用,我们就着手开始创建。首先在openstack使用上文提到的ubuntu镜像创建一个VM。完成后ssh到这台VM,设置root密码,并使用root用户运行一个打包好的脚本:
curl https://github.com/Superalan/bosh-deployment/scripts/prepare_inception_openstack.sh | bash
source /etc/profile
  这个脚本必须使用root权限才能运行正常,其中包括了ruby环境的安装,bosh cli、deployer、agent以及openstack registry的安装。此外还下载bosh-release,为制作stemcell做准备。
  脚本运行成功后,就可以在终端调用bosh cli了。这里我们查看micro指令的help:
$ bosh help micro
micro deploy <stemcell>   Deploy a micro BOSH instance to the currently 
                          selected deployment 
                          --update   update existing instance 
micro delete              Delete micro BOSH instance (including 
                          persistent disk) 
micro deployment [<name>] Choose micro deployment to work with 
micro agent <args>        Send agent messages 
micro apply <spec>        Apply spec 
micro status              Display micro BOSH deployment status 
micro deployments         Show the list of deployments 

2.配置部署micro bosh

  • 首先在inception VM中配置micro_bosh.yml

    micro bosh的部署参数是通过一个叫做micro_bosh.yml的文件进行配置的。这其中配置了openstack的连接参数,micro bosh的网络属性,以及agent和registry属性。如果通过上面我们提供的脚本配置的inception VM,该配置文件位置位于:/var/vcap/deployments

   这里有一点需要注意,openstack中必须提供配置文件里设置的IPADDRESS。这个ip是一个floating ip,在openstack中可以设置添加。
    这里是一个openstack的micro bosh配置文件模板:

 
name: microbosh-openstack
env:
  bosh:
    password: SALTED_PASSWORD

logging:
  level: DEBUG

network:
  type: dynamic
  label: private
  vip: IPADDRESS

resources:
  persistent_disk: 4096
  cloud_properties:
    instance_type: m1.small

cloud:
  plugin: openstack
  properties:
    openstack:
      auth_url: OS_AUTH_URL
      username: OS_USERNAME
      api_key: OS_PASSWORD
      tenant: OS_TENANT_NAME
      default_key_name: inception
      default_security_groups: ["default"]
      private_key: /home/vcap/.ssh/inception.pem

apply_spec:
  agent:
    blobstore:
      address: IPADDRESS
    nats:
      address: IPADDRESS
  properties:
    openstack_registry:
      address: IPADDRESS

  • 制作自定义的openstack-bosh-micro-stemcell

做完上述工作,我们就要进入制作micro stemcell的工作。这一部分的工作仍然是在inception VM中完成。首先创建bosh-release:

cd /var/vcap/releases/bosh-release
bosh create release --with-tarball
这会在/var/vcap/releases/bosh-release/dev_releases/下生成bosh的一个release。我们先把之前的ubuntu镜像放到inception VM的root下,然后我们在agent目录(/var/vcap/bootstrap/bosh/agent)下执行:
export UBUNTU_ISO=/root/ubuntu-10.04.4-LTS-amd64.iso
rake stemcell2:micro["openstack",/var/vcap/releases/bosh-release/micro/openstack.yml,/var/vcap/releases/bosh-release/dev_releases/bosh-x.y-dev.tgz]
这样我们就得到了自定义的stemcell。一切正常的话会输出:
Generated stemcell: /var/tmp/bosh/agent-x.y.z-nnnnn/work/work/micro-bosh-stemcell-openstack-x.y.z.tgz

  • micro bosh的部署

到这为止,我们应该是完成了micro bosh所有要求用到的组件。执行部署命令:

$ cd /var/vcap/deployments
$ bosh micro deployment microbosh-openstack
$ bosh micro deploy /var/vcap/stemcells/micro-bosh-stemcell-openstack-x.y.z.tgz

这里执行bosh micro deployment microbosh-openstack时,所在的deployments目录必须包含microbosh-openstack文件夹,这个文件夹下必须包括micro_bosh.yml。一切顺利的话会显示:

Verifying stemcell...
File exists and readable OK
Manifest not found in cache, verifying tarball...
Extract tarball OK
Manifest exists OK
Stemcell image file OK
Writing manifest to cache...
Stemcell properties OK
Stemcell info
-------------
Name: micro-bosh-stemcell
Version: 0.6.4
Deploy Micro BOSH
unpacking stemcell (00:00:43)
uploading stemcell (00:32:25)
creating VM from 5aa08232-e53b-4efe-abee-385a7afb9421 (00:04:38)
waiting for the agent (00:02:19)
create disk (00:00:15)
mount disk (00:00:07)
stopping agent services (00:00:01)
applying micro BOSH spec (00:01:20)
starting agent services (00:00:00)
waiting for the director (00:02:21)
Done 11/11 00:53:15
WARNING! Your target has been changed to `http://172.17.13.1:25555'!
Deployment set to '/var/vcap/deployments/microbosh-openstack/micro_bosh.yml'
Deployed `microbosh-openstack/micro_bosh.yml' to `http://microbosh-openstack:25555', took 00:44:30 to complete
下面我们就可以target到micro bosh节点了,默认的用户名密码都是admin。

$ bosh target http://172.17.13.1
Target set to `microbosh-openstack (http://172.17.13.1:25555) Ver: 0.6 (release:ce0274ec bosh:0d9ac4d4)'
Your username: admin
Enter password: *****
Logged in as `admin'

还可以通过bosh micro status以及bosh micro deployments查看状态和部署信息。

  • 关于micro bosh的认识

  通过上述的步骤,可能对bosh比较熟悉的读者会马上看出,micro bosh的stemcell里存在bosh-release,这和bosh的stemcell是不同的。这一点官方文档没有说明,因为AWS和Vsphere的stemcell都是通过bosh public stemcell指令下载的,stemcell里面有什么东西其实看不到。后面我们会讲到,部署bosh的时候我们需要一个作为虚拟机模板的bosh stemcell、一个作为待部署软件的 BOSH Release,以及一个用来定义部署配置的部署清单文件。所以bosh的stemcell里是不存在bosh的release的。在这一点上两者有着不同。

    这也很好理解,bosh部署每个节点的时候,使用的是统一的stemcell模板,然后在配置文件中得到该部署bosh release的那个组件。micro bosh部署的时候是单一的节点,因此它的过程简单很多,就直接把整个bosh-release给预加载进去了。

    至此,micro bosh的搭建工作就已完成,接下来会在下部分中部署bosh以及在bosh中部署cloudfoundry。

(未完待续。。)




原文链接:http://blog.csdn.net/alan90121/article/details/8181962
加载中
返回顶部
顶部