17.OpenStack-Ocata heat编排服务

Heat是一个基于模板来编排复合云应用的服务。Heat 目前支持两种格式的模板,一种是基于 JSON 格式的 CFN 模板,另外一种是基于 YAML格式的 HOT 模板。CFN 模板主要是为了保持对 AWS 的兼容性。HOT 模板是Heat 自有的,资源类型更加丰富,更能体现出 Heat 特点的模板。

我们在控制节点进行部署。

数据和角色准备

创建数据库

root用户登录数据库:

mysql -u root -p

创建heat数据库:

CREATE DATABASE heat;

heat数据库授予访问权限:

GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' IDENTIFIED BY 'HEAT_DBPASS';
GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' IDENTIFIED BY 'HEAT_DBPASS';

替换HEAT_DBPASS为合适的密码。

退出数据库

图片[1]-17.OpenStack-Ocata heat编排服务-萨林博客

. admin-openrc

创建服务凭证

创建heat用户:

openstack user create --domain default --password HEAT_PASS heat

图片[2]-17.OpenStack-Ocata heat编排服务-萨林博客

admin角色添加到heat用户:

openstack role add --project service --user heat admin

创建heatheat-cfn服务实体:

openstack service create --name heat --description "Orchestration" orchestration

图片[3]-17.OpenStack-Ocata heat编排服务-萨林博客

openstack service create --name heat-cfn --description "Orchestration"  cloudformation

图片[4]-17.OpenStack-Ocata heat编排服务-萨林博客

创建编排服务 API 端点

openstack endpoint create --region RegionOne orchestration public http://controller:8004/v1/%\(tenant_id\)s

图片[5]-17.OpenStack-Ocata heat编排服务-萨林博客

openstack endpoint create --region RegionOne orchestration internal http://controller:8004/v1/%\(tenant_id\)s

图片[6]-17.OpenStack-Ocata heat编排服务-萨林博客

openstack endpoint create --region RegionOne orchestration admin http://controller:8004/v1/%\(tenant_id\)s

图片[7]-17.OpenStack-Ocata heat编排服务-萨林博客

openstack endpoint create --region RegionOne cloudformation public http://controller:8000/v1

图片[8]-17.OpenStack-Ocata heat编排服务-萨林博客

openstack endpoint create --region RegionOne cloudformation internal http://controller:8000/v1

图片[9]-17.OpenStack-Ocata heat编排服务-萨林博客

openstack endpoint create --region RegionOne cloudformation admin http://controller:8000/v1

图片[10]-17.OpenStack-Ocata heat编排服务-萨林博客

身份服务管理堆栈

为堆栈创建heat包含项目和用户的域:

openstack domain create --description "Stack projects and users" heat

图片[11]-17.OpenStack-Ocata heat编排服务-萨林博客

创建heat_domain_admin用户来管理heat域中的项目和用户:

openstack user create --domain heat --password HEAT_DOMAIN_PASS heat_domain_admin

图片[12]-17.OpenStack-Ocata heat编排服务-萨林博客

admin角色添加到域中的heat_domain_admin用户 heat,以启用用户的管理堆栈管理权限heat_domain_admin

openstack role add --domain heat --user-domain heat --user heat_domain_admin admin

创建heat_stack_owner角色:

openstack role create heat_stack_owner

图片[13]-17.OpenStack-Ocata heat编排服务-萨林博客

heat_stack_owner角色添加到demo项目和用户以启用用户的堆栈管理demo

openstack role add --project demo --user demo heat_stack_owner

创建heat_stack_user角色:

openstack role create heat_stack_user

图片[14]-17.OpenStack-Ocata heat编排服务-萨林博客

安装和配置组件

安装软件包:

yum install -y openstack-heat-api openstack-heat-api-cfn openstack-heat-engine

编辑/etc/heat/heat.conf文件:

可选操作

备份文件

cp /etc/heat/heat.conf /etc/heat/heat.conf.bak

输入 cat 文件 | grep -v '^#' | grep -v '^$' > 文件.bak 删除注释行和空行

cat /etc/heat/heat.conf.bak | grep -v '^#' | grep -v '^$' > /etc/heat/heat.conf
vim /etc/heat/heat.conf

[database]部分中,配置数据库访问:

[database]
connection = mysql+pymysql://heat:HEAT_DBPASS@controller/heat

图片[15]-17.OpenStack-Ocata heat编排服务-萨林博客

[DEFAULT]部分中,配置RabbitMQ消息队列访问:

[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller

图片[16]-17.OpenStack-Ocata heat编排服务-萨林博客

[keystone_authtoken][trustee][clients_keystone][ec2authtoken]部分中,配置身份服务访问:

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = heat
password = HEAT_PASS

找一处自己将[keystone_authtoken]添加

图片[17]-17.OpenStack-Ocata heat编排服务-萨林博客

[trustee]
auth_type = password
auth_url = http://controller:35357
username = heat
password = HEAT_PASS
user_domain_name = default

图片[18]-17.OpenStack-Ocata heat编排服务-萨林博客

[clients_keystone]
auth_uri = http://controller:35357

图片[19]-17.OpenStack-Ocata heat编排服务-萨林博客

[ec2authtoken]
auth_uri = http://controller:5000

图片[20]-17.OpenStack-Ocata heat编排服务-萨林博客

在该[DEFAULT]部分中,配置元数据和等待条件 URL:

[DEFAULT]
heat_metadata_server_url = http://controller:8000
heat_waitcondition_server_url = http://controller:8000/v1/waitcondition

图片[21]-17.OpenStack-Ocata heat编排服务-萨林博客

在该[DEFAULT]部分中,配置堆栈域和管理凭据:

[DEFAULT]
stack_domain_admin = heat_domain_admin
stack_domain_admin_password = HEAT_DOMAIN_PASS
stack_user_domain_name = heat

图片[22]-17.OpenStack-Ocata heat编排服务-萨林博客

填充编排数据库:

su -s /bin/sh -c "heat-manage db_sync" heat

图片[23]-17.OpenStack-Ocata heat编排服务-萨林博客

图片[24]-17.OpenStack-Ocata heat编排服务-萨林博客

完成安装

启动 Orchestration 服务并将它们配置为在系统启动时启动:

systemctl enable openstack-heat-api.service openstack-heat-api-cfn.service openstack-heat-engine.service
systemctl start openstack-heat-api.service openstack-heat-api-cfn.service openstack-heat-engine.service

图片[25]-17.OpenStack-Ocata heat编排服务-萨林博客

验证操作

在控制器节点上执行这些命令。

获取admin租户凭据:

. admin-openrc

列出服务组件以验证每个进程的成功启动和注册:

openstack orchestration service list

图片[26]-17.OpenStack-Ocata heat编排服务-萨林博客

图片[27]-17.OpenStack-Ocata heat编排服务-萨林博客

启动实例

查看实例类型

openstack flavor list

如下图为 m1.nano记住它,我们要用。

图片[28]-17.OpenStack-Ocata heat编排服务-萨林博客

查看密钥

openstack keypair list

如下图为 mykey2记住它,我们要用。

图片[29]-17.OpenStack-Ocata heat编排服务-萨林博客

创建模板

创建demo-template.yml并且修改它:

注意汉字标注!!

heat_template_version: 2015-10-15
description: Launch a basic instance with CirrOS image using the
             ``刚才查到的类型 我的是m1.nano`` flavor, ``刚才查到的密钥 我的是mykey2`` key,  and one network.

parameters:
  NetID:
    type: string
    description: Network ID to use for the instance.

resources:
  server:
    type: OS::Nova::Server
    properties:
      image: cirros
      flavor: 刚才查到的类型 我的是m1.nano
      key_name: 刚才查到的密钥 我的是mykey2
      networks:
      - network: { get_param: NetID }

outputs:
  instance_name:
    description: Name of the instance.
    value: { get_attr: [ server, name ] }
  instance_ip:
    description: IP address of the instance.
    value: { get_attr: [ server, first_address ] }

注意上面只是说明!

vim demo-template.yml

完整的:

heat_template_version: 2015-10-15
description: Launch a basic instance with CirrOS image using the
             ``m1.nano`` flavor, ``mykey2`` key,  and one network.

parameters:
  NetID:
    type: string
    description: Network ID to use for the instance.

resources:
  server:
    type: OS::Nova::Server
    properties:
      image: cirros
      flavor: m1.nano
      key_name: mykey2
      networks:
      - network: { get_param: NetID }

outputs:
  instance_name:
    description: Name of the instance.
    value: { get_attr: [ server, name ] }
  instance_ip:
    description: IP address of the instance.
    value: { get_attr: [ server, first_address ] }

创建堆栈

确定可用网络。

openstack network list

图片[30]-17.OpenStack-Ocata heat编排服务-萨林博客

此输出可能与您的环境不同,只创建了提供者网络。

设置NET_ID环境变量以反映网络的 ID。例如,使用提供商网络:

export NET_ID=$(openstack network list | awk '/ provider / { print $2 }')

图片[31]-17.OpenStack-Ocata heat编排服务-萨林博客

在提供商网络上创建一个包含一个 CirrOS 实例的堆栈:

openstack stack create -t demo-template.yml --parameter "NetID=$NET_ID" stack

图片[32]-17.OpenStack-Ocata heat编排服务-萨林博客

验证:

openstack stack list

图片[33]-17.OpenStack-Ocata heat编排服务-萨林博客

显示实例的名称和 IP 地址,并与 OpenStack 客户端的输出进行比较:

openstack stack output show --all stack
openstack server list

图片[34]-17.OpenStack-Ocata heat编排服务-萨林博客

图片[35]-17.OpenStack-Ocata heat编排服务-萨林博客

删除堆栈。

openstack stack delete --yes stack

图片[36]-17.OpenStack-Ocata heat编排服务-萨林博客

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容