BOSH是一个针对大规模分布式系统的部署和生命周期管理的开源工具。BOSH的诞生是出自CloudFoundry的部署难题,但是不仅仅局限于部署CloufFoundry,也可以应用于别的分布式系统,只需要其提供符合要求的Release即可,BOSH现在能够支持的IaaS平台包括VMware vSphere,vCloud Director,Amazon EC2, OpenStack。
Micro BOSH则是一个微型版的BOSH,因为BOSH本身也是分布式的,由若干个虚拟机组成,所以为了部署分布式的BOSH环境,Micro BOSH才诞生了,它只有一个虚拟机,其中包括了BOSH的所有组件,事实上若是小型CF环境的部署,完全可以使用Micro BOSH取代BOSH完成部署操作。
BOSH组件的每个虚拟机中都会运行一个叫做BOSH Agent的进程,这个进程被用于监听虚拟机上BOSH组件的运行状态并负责与BOSH Director进行通信交互,当BOSH Agent接收到BOSH Director发布的任务指令后,会根据此任务指令的要求在虚拟机上进行一系列的动作,例如从BlobStore上获取任务相关的包并执行安装和进行配置,然后使用monit进行启动或者停止任务。
BOSH Director相当与BOSH工具的控制分发器,其他所有的组件都通过BOSH Director进行交互,在Director的协调下,BOSH进行虚拟机创建、安装包编译、部署CF实例以及存储和读取BlobStore中的数据。
BOSH BlobStore是一个基于对象存储的云数据存储工具,用于存储release包中Job和Package的源码以及编译好的安装包,BOSH Direcot会经常从这里读取或者写入数据。
BOSH CLI是BOSH的命令行工具,用于与BOSH Director进行交互,管理员与BOSH的所有交互都是通过BOSH CLI进行,例如创建和管理release、stemcell、执行deploy等。
从BOSH Agent获取虚拟机的运行状态及生命周期中各种类型事件的信息,然后将这些信息通过消息组件反馈给用户。
BOSH Manifest是一个YAML文件,文件以.yml结尾,用于描述部署及配置的任务清单,例如:
部署的JOB所需的虚拟机
挂载到虚拟机上的硬盘大小
绑定到虚拟机上的网络及IP、安全组
每个虚拟机使用的模板
针对每个模板的具体配置信息
Stemcell就是一个Linux(现在的版本中主要用的是Ubuntu)的虚拟机模板,其中还包括一个BOSH Agent,BOSH用它来创建若干虚拟机,用于CF环境或者分布式BOSH环境的部署。
Release包是由若干组件及其配置文件组成的一个集合包,包括下边所述的Job和Package,是一个完整的BOSH或者CloudFoundry的组件的集合体,在实际使用过程中,我们可能只是从其中选择一部分组件进行使用,将release上传到BlodStore后,它会复原成若干个组件形成一个组件池,部署的时候,根据manifest文件的描述,从其中选择一个或者多个组件,安装在从BOSH用stemcell构建的虚拟机池中选择一个或者多个虚拟机之中。
Job是定义在部署配置文件manifest中的一段配置,是用来启动和运行Package的一系列的规则配置,通常会在这段配置中描述例如网络配置、Job模板、部署实例个数、资源限制或者引用的虚拟机资源池等内容。
BOSH中有两中Package,分别是编译前Package和编译后Package,编译前Package中包括了编译、安装一个功能组件所需要的源码和脚本,编译后Package是以二进制形式存储在BlobStore中的针对具体版本的Stemcell可用的功能组件包。Package的编译工作发生在Release部署的时候,Director会在BlobStore中检测是否存在正在部署的Package的二进制文件(注意:对同一个源码Package每个版本的Stemcell都会生成一个对应的二进制Package),若没有,Director会使用对应Stemcell创建一个专门用于编译的虚拟机,然后从BlobStore中读取源码Package,使用其中的编译脚本进行编译,然后再将编译完成的二进制的Package存储到BlobStore中。
Manifest是一个YAML类型的文件,默认名字一般就叫manifest.yml,可以理解为这就是BOSH工具用来执行部署任务的一个任务清单,其中包括了整个部署工作的一些属性定义(如工程名、网络、编译器等)、需要部署的组件及实例数、使用的资源、服务以及各组件的一些具体配置信息。
CPI全称Cloud Provider Interface,是BOSH用来与IaaS通信完成虚拟机实例和模板的创建和管理的一个API接口,CPI目前能够支持VSphere、OpenStack、AWS。