OpenStack Heat部署方案
OpenStack Heat部署方案
1 目标与物理网络拓扑
本文主要描述在现有OpenStack(stein版)平台上如何扩展安装Heat功能组件,实验应用程序的编排服务。
涉及物理拓扑,如图1所示:
部署过程中所涉及到的设备、接口及管理网口的IP地址如下表所示:
设备名称 | 接口 | IP地址 | 备注 |
---|---|---|---|
Switch-A | 管理口 | 192.168.0.254 | 三层交换机 |
Switch-B | 管理口 | 192.168.4.1 | 二层交换机 |
Switch-C | 管理口 | 192.168.5.1 | 二层交换机 |
Server-1 | 管理口 | 192.168.4.144 | / |
Server-2 | 管理口 | 192.168.5.145 | / |
表1:设备管理口列表
2 硬件与软件环境
部署环境中涉及到的硬件和软件如表2和表3所示:
名称 | 型号 | 硬件指标 | 数量 | 备注 |
---|---|---|---|---|
服务器 | 1、至少8G内存 2、磁盘不少于500G | 2 | Server-1 计算节点+存储节点 Server-2 控制节点+网络节点 |
表2:硬件环境
名称 | 型号 | 硬件指标 | 数量 | 备注 |
---|---|---|---|---|
服务器 | 1、至少8G内存 2、磁盘不少于500G | 2 | Server-1 计算节点+存储节点 Server-2 控制节点+网络节点 |
表3:软件环境
3 Heat简介
Heat是OpenStack提供的自动编排功能的组件,基于描述性的模板,来编排复合云应用程序。
Heat向开发人员和系统管理员提供了一种简便地创建和管理一批相关的OpenStack资源的方法,并通过有序且可预测的方式对其进行资源配置和更新。
用户可以使用Heat的示例模板或自己创建模板来描述OpenStack资源以及应用程序运行时所需的任何相关依赖项或运行时参数。
当设置完成后,可通过按授权控制、可预测的方式修改和更新OpenStack资源。
用户可以通过OpenStack管理控制台、Heat命令行工具或 API对模板及其相关的资源集进行设置和更新。
引入Heat的两个原因:
- 更快更有效的管理OpenStack的资源
云平台系统在相对比较稳定的情况下,管理成本逐渐变成首要的解决问题。云上自动化能力是一个云平台的刚需,可以有效降低维护难度。
OpenStack原生提供命令行和 Horizon 来供用户管理资源。然而命令行和在浏览器中的点击,费时费力,不利于用户使用 Openstack 来进行大批量的管理以支撑 IT 应用。 Heat在这种情况下应运而生。
Heat 采用了模板方式来设计或者定义编排。为方便用户使用,Heat 还提供了大量的模板例子,使用户能够方便地得到想要的编排。
- 更小的研发成本
引入Heat,对于不了解OpenStack的研发者来说,可以更快的接入现有的业务系统。开发者更关心的是授权认证和对虚拟资源的增删改,而对于底层的状态并不用太多了解。
下面是Heat的架构组成:
主要概念:
- heat command-line client
CLI通过与heat-api通信,来调用API实现相关功能。终端开发者可以直接使用编排REST API。
- heat-api
一个OpenStack本地REST API,通过RPC,把发送来的API请求在发给heat-engine。
heat-api,提供了原生restful API对外使用。用户对API的调用,由heat-api处理之后,最终通过RPC传递给Heat-engine来进一步处理。
- heat-api-cfn
组件提供了Amazon style 的查询 API,可以完全兼容于Amazon的CloudFormation,对于API的请求同heat-api类似,处理之后,通过RPC传递给heat-engine进一步处理。
- heat-engine
heat-engine是heat中的核心模块,处理主要的逻辑业务。
此模块提供heat最主要的功能,执行模板内容,最终完成应用系统的创建和部署,并把执行结果返回给API调用者。 当 heat engine拿到请求后,会把请求解析为各种类型的资源,每种资源都对应OpenStack其它的服务客户端,然后通过发送 REST 的请求给其它服务。通过如此的解析和协作,最终完成请求的处理。
- heat-cfntools
独立于heat组件的一个的工具,需要单独下载。这个工具用来完成虚拟机实例内部的操作配置任务。在创建虚拟机镜像时,需要在镜像中安装heat-cfntools工具。
4 安装步骤
[root@controller ~] 表示在控制节点上执行
[root@compute ~] 表示在计算节点上执行
4.1 创建数据库
- 创建数据库并授权:
[root@controller ~]# mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE heat;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON heat.* TO ‘heat’@'localhost' \
IDENTIFIED BY 'HEAT_PASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON heat.* TO ‘heat’@'%' \
IDENTIFIED BY 'HEAT_PASS';
注:帐号密码根据自己的情况修改
4.2 创建openstack用户、服务凭据、API端点:
在安装和配置Heat之前,必须创建用户、服务凭据和API端点:
[root@controller ~]# . admin-openrc
[root@controller ~]# openstack user create --domain default --password-prompt heat
[root@controller ~]# openstack role add --project service --user heat admin
[root@controller ~]# openstack service create --name heat \
--description "Orchestration" orchestration
[root@controller ~]# openstack service create --name heat-cfn \
--description "Orchestration" cloudformation
[root@controller ~]#openstack endpoint create --region RegionOne \
orchestration public http://controller:8004/v1/%\(tenant_id\)s
[root@controller ~]#openstack endpoint create --region RegionOne \
orchestration internal http://controller:8004/v1/%\(tenant_id\)s
[root@controller ~]# openstack endpoint create --region RegionOne \
orchestration admin http://controller:8004/v1/%\(tenant_id\)s
为了管理栈,在认证服务中Orchestration需要更多信息。为了添加这些信息,完成下面的步骤
- 创建 heat域
[root@controller ~]#openstack domain create --description "Stack projects and users" heat
- 在heat域中创建heat_domain_admin用户
[root@controller ~]# openstack user create --domain heat --password-prompt heat_domain_admin
- 添加admin角色到heat域中的heat_domain_admin用户:
[root@controller ~]# openstack role add --domain heat --user heat_domain_admin admin
- 创建 heat_stack_owner角色:
[root@controller ~]# openstack role create heat_stack_owner
添加heat_stack_owner角色到demo项目和用户:
[root@controller ~]# openstack role add --project demo --user demo heat_stack_owner
- 创建 heat_stack_user 角色:
[root@controller ~]# openstack role create heat_stack_user
4.3 在controller节点上安装Heat服务
- 安装软件包:
[root@controller ~]# yum install openstack-heat-api openstack-heat-api-cfn \
openstack-heat-engine python-heatclient
- 编辑配置文件 /etc/heat/heat.conf
[root@controller ~]#vi /etc/heat/heat.conf
[DEFAULT]
transport_url = rabbit://openstack:tera123@controller
heat_metadata_server_url = http://controller:8000
heat_waitcondition_server_url = http://controller:8000/v1/waitcondition
stack_domain_admin = heat_domain_admin
stack_domain_admin_password = heat_domain_admin
stack_user_domain_name = heat
verbose = False
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = tera123
[database]
connection = mysql+pymysql://heat:HEAT_PASS@controller/heat
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:5000
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = heat
password = heat
[trustee]
auth_plugin = password
auth_url = http://controller:5000
username = heat
password = heat
user_domain_id = default
[clients_keystone]
auth_uri = http://controller:5000
[ec2authtoken]
auth_uri = http://controller:5000/v3
- 同步数据库
[root@controller ~]# su -s /bin/sh -c "heat-manage db_sync" heat
- 启动 Orchestration 服务并将其设置为随系统启动
[root@controller ~]# systemctl enable openstack-heat-api.service \
openstack-heat-api-cfn.service openstack-heat-engine.service
[root@controller ~]# systemctl start openstack-heat-api.service \
openstack-heat-api-cfn.service openstack-heat-engine.service
5 结果验证
- 列出服务组件,以验证是否成功启动并注册了每个进程
[root@controller ~]#source admin-openrc.sh
[root@controller ~]#heat service-list
6 参考资料
https://docs.openstack.org/heat/stein/install/install-rdo.html
如有其它问题,请填写右侧需求表单联系我们。www.asterfusion.com