在Keystoen v2的Mitaka上部署HEAT服务

背景

这段时间总是被各种申请虚拟机的流程整得昏头黑暗,有时候来一批虚拟机申请,总还是要频繁的去重复一些操作,例如创建虚拟机、数据卷、然后再挂载卷等等。

时间久了总觉得时间被浪费在无意义的事情上不说,数量多了还容易出错。其实很早之前我就在关注HEAT项目,一直没有去研究。项目刚上线的时候,考虑到时间和学习成本就没上HEAT,现在想想自己眼光还是比较局限。

最近听说业内的一个传闻,居然有公司为招聘HEAT工程师,推荐费居然高达2W多。这件事让我感觉挺后悔,还是应该找机会学下。毕竟现在系统已经相对比较稳定,管理成本逐渐变成首要的解决问题。

Heat 是OpenStack项目下的一个模板编排服务。其中包含heat-apiheat-engine两个重要的服务。简单来说heat-api服务接受用户提交的编排模板,验证通过后通过AMQP异步给heat-engine处理。而heat-engine就具体与OpenStack的各个服务交互。

由于heat正好处于对openstack资源的抽象层,所以现在一些新的项目例如Magnum就能更方便的接入进来。

heat在OS中的位置

操作

简单介绍下环境,由于我是在开发环境的AllInOne里创建的,所以相对来说简单点,后面会根据情况推到线上使用。

创建数据库

> CREATE DATABASE heat;

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

安装包

$ yum install openstack-heat-api openstack-heat-api-cfn openstack-heat-engine
$ yum install python-barbicanclient python-magnumclient python-manilaclient python-mistralclient python-senlinclient python-zaqarclient

Keystoner认证与服务

$ openstack user create --password-prompt heat    #这里设置heat的密码为magine
$ openstack role add --project services --user heat admin
$ openstack role create heat_stack_owner
$ openstack role create heat_stack_user
$ openstack service create --name heat  --description "Orchestration" orchestration
$ openstack service create --name heat-cfn  --description "Orchestration" cloudformation
$ openstack endpoint create  --publicurl http://192.168.68.58:8004/v1/%\(tenant_id\)s  --internalurl http://192.168.68.58:8004/v1/%\(tenant_id\)s  --adminurl http://192.168.68.58:8004/v1/%\(tenant_id\)s  --region RegionOne  orchestration
$ openstack endpoint create  --publicurl http://192.168.68.58:8000/v1  --internalurl http://192.168.68.58:8000/v1  --adminurl http://192.168.68.58:8000/v1  --region RegionOne  cloudformation

Heat配置文件

[DEFAULT]
heat_metadata_server_url = http://192.168.68.58:8000
heat_waitcondition_server_url =  http://192.168.68.58:8000/v1/waitcondition
stack_user_domain_name = heat_user_domain
stack_domain_admin = heat_domain_admin
stack_domain_admin_password = magine
rpc_backend = rabbit
[database]
connection = mysql://heat:magine@192.168.68.58/heat
[keystone_authtoken]
auth_uri = http://192.168.68.58:5000/v2.0
identity_uri = http://192.168.68.58:35357
admin_tenant_name = services
admin_user = heat
admin_password = magine
[ec2authtoken]
auth_uri = http://192.168.68.58:5000/v2.0
[oslo_messaging_rabbit]
rabbit_host = 192.168.68.58
rabbit_port = 5672
rabbit_userid = guest
rabbit_password = guest
[trustee]
auth_type = password
auth_url = http://192.168.68.58:35357
username = heat
password = magine

注册服务

heat-keystone-setup-domain \
--stack-user-domain-name heat_user_domain \
--stack-domain-admin heat_domain_admin \
--stack-domain-admin-password magine

初始化数据库

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

启动服务

$ 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

验证

$ openstack orchestration service list

+--------------------------+-------------+--------------------------------------+--------------------------+--------+----------------------------+--------+
| hostname                 | binary      | engine_id                            | host                     | topic  | updated_at                 | status |
+--------------------------+-------------+--------------------------------------+--------------------------+--------+----------------------------+--------+
| l-192168068058-mitaka.st | heat-engine | 163d6004-18e1-4689-a028-8dd33427bd93 | l-192168068058-mitaka.st | engine | 2017-04-20T09:20:08.000000 | up     |
| l-192168068058-mitaka.st | heat-engine | d50b4666-2853-4697-857d-a68e631a7029 | l-192168068058-mitaka.st | engine | 2017-04-20T09:19:54.000000 | up     |
| l-192168068058-mitaka.st | heat-engine | d29f741e-c571-49bf-894e-185635a07424 | l-192168068058-mitaka.st | engine | 2017-04-20T09:20:08.000000 | up     |
| l-192168068058-mitaka.st | heat-engine | 5007fcb8-fca4-4075-bd21-c3249747ca0b | l-192168068058-mitaka.st | engine | 2017-04-20T09:20:08.000000 | up     |
| l-192168068058-mitaka.st | heat-engine | 0c484b96-70e5-491a-b19e-e9f27d598c40 | l-192168068058-mitaka.st | engine | 2017-04-20T09:19:54.000000 | up     |
| l-192168068058-mitaka.st | heat-engine | e9575f3f-89de-449b-a975-16d8ac166275 | l-192168068058-mitaka.st | engine | 2017-04-20T09:19:54.000000 | up     |
| l-192168068058-mitaka.st | heat-engine | 327c3e1c-6bcb-490f-bc46-18693bb404ac | l-192168068058-mitaka.st | engine | 2017-04-20T09:20:08.000000 | up     |
| l-192168068058-mitaka.st | heat-engine | 4a574d30-44dd-4a12-933a-3fd219f0420f | l-192168068058-mitaka.st | engine | 2017-04-20T09:19:54.000000 | up     |
+--------------------------+-------------+--------------------------------------+--------------------------------+--------+----------------------+--------+

测试

这里简单测试下,用例就用官网提供的编排文件。

demo.yaml

heat_template_version: 2015-10-15
description: Launch a basic instance with Debian image using the
             ``m1.mediumtiny`` flavor``  one network.

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

resources:
  server:
    type: OS::Nova::Server
    properties:
      image: Debian-Wheezy-7.11
      flavor: m1.medium
      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 ] }

stack

$ openstack network list
+--------------------------------------+-----------+--------------------------------------+
| ID                                   | Name      | Subnets                              |
+--------------------------------------+-----------+--------------------------------------+
| 163df3b0-13f2-4f2e-8401-e82088e8dc07 | privite01 | 06284618-c1be-497a-80a6-40d143eaacac |
+--------------------------------------+-----------+--------------------------------------+

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

#创建stack
$ openstack stack create -t demo.yaml --parameter "NetID=$NET_ID" stack
+---------------------+-------------------------------------------------------------------------------------+
| Field               | Value                                                                               |
+---------------------+-------------------------------------------------------------------------------------+
| id                  | 5c12fb4d-5a2e-47e9-939a-997fdfec90af                                                |
| stack_name          | stack                                                                               |
| description         | Launch a basic instance with De image using the ``m1.medium`` flavor``one network.  |
| creation_time       | 2017-04-20T08:12:34                                                                 |
| updated_time        | None                                                                                |
| stack_status        | CREATE_IN_PROGRESS                                                                  |
| stack_status_reason | Stack CREATE started                                                                |
+---------------------+-------------------------------------------------------------------------------------+

#查看创建的虚拟机
$ openstack server list
+--------------------------------------+---------------------------+--------+--------------------------+
| ID                                   | Name                      | Status | Networks                 |
+--------------------------------------+---------------------------+--------+--------------------------+
| 44bbb2b4-9df9-4cef-b3f0-bd032d718ee5 | stack-server-dmasib6fne2x | ACTIVE | privite01=192.168.17.252 |
+--------------------------------------+---------------------------+--------+--------------------------+

#删除stack
$ openstack stack delete --yes stack
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容

  • 第一章 OpenStack基础 OpenStack管理的资源及提供的服务OpenStack做为一个操作系统,...
    sgt_tiger阅读 12,908评论 4 72
  • OpenStack简介 OpenStack版本发展 OpenStack版本系列字母以A~Z命名,从2010年发布的...
    糯米藕阅读 5,023评论 0 17
  • Why Heat 关于Heat是什么东西,我已经在前面的文章《在Keystoen v2的Mitaka上部署HEAT...
    魔哈Moha阅读 4,109评论 4 5
  • 本文遵循「知识共享许可协议 CC-BY-NC-SA 4.0 International」,未经作者书面许可,不允许...
    laiwei阅读 11,784评论 1 24
  • 看过一段话: 你把性格交给星座, 把努力交给鸡汤, 把运气交给鲤鱼, 然后,对自己说, 听过许多道理,却依然过不好...
    一个苞谷阅读 1,021评论 1 2