OverCloud部署解析

把物理网络配置好,镜像以及裸机信息录入系统,设置好Metadata,一切准备好之后,就可以开始部署OverCloud了,部署OverCloud非常简单,只需要执行一条命令:

  1. openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates/ \
  2. -r /home/stack/templates/roles/roles_data.yaml \
  3. -e /home/stack/templates/environments/low-memory-usage.yaml \
  4. -e /home/stack/templates/environments/environment.yaml

—template指定了模板的位置,-r指定了服务器角色以及每个角色包含的服务,-e指定了Heat的环境变量,这条命令背后到底发生了什么?在前面概览中介绍了部署OverCloud的过程其实是在跑Heat Template的过程,反映到Heat里,就是要创建一个stack,所以这个命令做的大部分工作都是在为创建这个stack做准备,创建环境变量,解析Template,生成自定义的Role,传递各种参数,然后创建stack,整体的数据流如下图:

OverCloud部署解析 - 图1

在部署OverCloud之前,首先会生成一个Plan,在前面介绍过,Heat的模板是在tripleo-heat-templates这个项目中定义的,这个里面有一些模板里面是有模板变量的,比如自定义的Role,需要根据参数进行解析,这些模板被解析完之后,会被上传到Swift里一个以将要创建的Heat Stack的名字命名的container里,默认为overcloud,在创建Heat Stack时,Heat所用到的模板,就是直接从Swift里获取的,所以这个过程大致如下:

  • 客户端先调用Mistral里面的tripleo.plan.create_container这个workflow,在Swift里创建了一个名称为overcloud的container;
  • 然后客户端直接调用swift接口,将原始模板上传到这个container里;
  • 然后开始执行tripleo.plan_management.v1.create_deployment_plan这个workflow,这个workflow定义了3个action:
    • tripleo.plan.create,将tripleo-heat-templates里的root_templateroot_environment存储到Mistral的Environment里,所谓root_template就是overcloud.yaml这个文件,它是创建这个stack里的最上层的stack,这个stack里又嵌套了非常多的stack,每一个stack都负责做一块事情;root_environment则是指的overcloud-resource-registry-puppet.yaml这个文件,这个文件是Heat里用到的Environment,定义了Heat里的Resource对应的模板文件;
    • tripleo.parameters.generate_passwords,这个action生成了各个服务的密码,即每个服务都会在Keystone里生成一个账户,后面会被配置到各个服务的配置文件中,比如Nova会创建一个名为nova的用户,它的密码就是在这个阶段生成的,这些密码也被上传到了Mistral的Environment里;
    • tripleo.templates.process,这个action主要是处理模板,根据指定的变量渲染模板,生成本次部署特定的模板,比如生成自定义的Role,这些Role由命令行中的-r参数指定,此外,再结合前面的几个action生成的结果,这个action最终生成了创建stack需要使用的参数;
  • 上面的准备工作做好之后,就开始执行tripleo.deployment.v1.deploy_plan这个workflow,这个workflow就是要实施前面定义的Plan了,其实就是调用heat,结合在这个Plan中定义的模板以及环境变量,开始创建这个stack了,部署整个overcloud的过程就是创建这个stack的过程,这个stack又嵌套了非常多的子stack,比如创建裸机,部署系统,配置系统,这些都被封装成了stack,通过执行这一个个stack,来完成部署过程。
  • 等Heat Stack创建完成之后,会上传overcloudrc文件到各个服务器,整个部署过程就完成了。

可以看到,创建stack的过程,也就是tripleo-heat-templates这个项目,是整个TripleO的最核心部分,它决定了最终部署出来的集群是什么样子,应该如何配置各个服务,后面我们会专门介绍下TripleO的Template。