OpenStack Ussuri : Heat

OpenStack Ussuri : Heat

OpenStack Ussuri : Heat

 -----------------------         -----------------------        -----------------------
|  [ Controller Node ]  |       |    [ Compute Node ]   |      |   [ Network Node ]    | 
|                       |       |        Libvirt        |      |     Open vSwitch      |
| MariaDB    RabbitMQ   |       |      Nova compute     |      |       L2 Agent        |
| Memcached  Keystone   |       |      Open vSwitch     |      |       L3 Agent        |
| httpd      Cinder API |       |       L2 Agent        |      |     metadata agent    |
| Nova-API   Compute    |       |      Cinder-LVM       |      |      Swift-proxy      |
| L2 agent   L3 agent   |       |          NFS          |      |       Heat API        |
| metadata agent        |        -----------------------       |        API-CFN        |
| Neutron Server        |                                      |       Heat Engine     |
 -----------------------                                        -----------------------

 ---------------------------------       
|     [ Storage Node 1, 2, 3 ]    |     
|                                 | 
|      Swift-account-auditor      |
|      Swift-account-replicator   |
|      Swift-account              |
|      Swift-container-auditor    |
|      Swift-container-replicator |
|      Swift-container-updater    |
|      Swift-container            |
|      Swift-object-auditor       |
|      Swift-object-replicator    |
|      Swift-object-updater       |
|      Swift-swift-object         |
 ---------------------------------

OpenStack Ussuri : Heat

  • 클라우딩 컴퓨팅이 꽃인 Orchestaration 기능을 수행하는 Heat 서비스를 설치해보도록 하겠습니다.
  • Heat 설치는 controller, network 노드 순으로 이루어집니다.
  • 단 Heat는 controller에서는 API의 Endpoint만을 제공하며, 대부분의 설정은 network node에서 이루어집니다.
  • Heat*에 대한 설명은 Heat을 참조해주세요.

 

Heat service 및 User 생성

$ controller ~(keystone)> openstack user create --domain default --project service --password qwer1234 heat
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| default_project_id  | b470c69e28db47cdbfc81e06cc67f627 |
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 148bafa480d84f87ba939968edb2585f |
| name                | heat                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

$ controller ~(keystone)> openstack role add --project service --user heat admin

$ controller ~(keystone)> openstack role create heat_stack_owner
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | None                             |
| domain_id   | None                             |
| id          | d46789e4326e4055aa8f6fead7c777bb |
| name        | heat_stack_owner                 |
| options     | {}                               |
+-------------+----------------------------------+

$ controller ~(keystone)> openstack role create heat_stack_user
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | None                             |
| domain_id   | None                             |
| id          | ff45744ddbe247919034cea7c3f309e7 |
| name        | heat_stack_user                  |
| options     | {}                               |
+-------------+----------------------------------+

$ controller ~(keystone)> openstack role add --project admin --user admin heat_stack_owner

$ controller ~(keystone)> openstack service create --name heat --description "Openstack Orchestration" orchestration
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Openstack Orchestration          |
| enabled     | True                             |
| id          | 6cd5b7c7a3234b39998073587c2d9f9a |
| name        | heat                             |
| type        | orchestration                    |
+-------------+----------------------------------+

$ controller ~(keystone)> openstack service create --name heat-cfn --description "Openstack Orchestration" cloudformation
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Openstack Orchestration          |
| enabled     | True                             |
| id          | 2fb2087bf8da472d8c51e9fee39c93ad |
| name        | heat-cfn                         |
| type        | cloudformation                   |
+-------------+----------------------------------+

$ controller ~(keystone)> openstack endpoint create --region RegionOne orchestration public http://network:8004/v1/AUTH_%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | 50481bc9998b454a9f70682132ecb026          |
| interface    | public                                    |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 6cd5b7c7a3234b39998073587c2d9f9a          |
| service_name | heat                                      |
| service_type | orchestration                             |
| url          | http://network:8004/v1/AUTH_%(tenant_id)s |
+--------------+-------------------------------------------+

$ controller ~(keystone)> openstack endpoint create --region RegionOne orchestration internal http://network:8004/v1/AUTH_%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | 1015f4c570a747349109b76b7295876c          |
| interface    | internal                                  |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 6cd5b7c7a3234b39998073587c2d9f9a          |
| service_name | heat                                      |
| service_type | orchestration                             |
| url          | http://network:8004/v1/AUTH_%(tenant_id)s |
+--------------+-------------------------------------------+

$ controller ~(keystone)> openstack endpoint create --region RegionOne orchestration admin http://network:8004/v1/AUTH_%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | ed21251a3f274ba6bb35061cef6cac1d          |
| interface    | admin                                     |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 6cd5b7c7a3234b39998073587c2d9f9a          |
| service_name | heat                                      |
| service_type | orchestration                             |
| url          | http://network:8004/v1/AUTH_%(tenant_id)s |
+--------------+-------------------------------------------+

$ controller ~(keystone)> openstack endpoint create --region RegionOne cloudformation public http://network:8000/v1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | fb2b67b2a13d43e1a55f775857908a5f |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2fb2087bf8da472d8c51e9fee39c93ad |
| service_name | heat-cfn                         |
| service_type | cloudformation                   |
| url          | http://network:8000/v1           |
+--------------+----------------------------------+

$ controller ~(keystone)> openstack endpoint create --region RegionOne cloudformation internal http://network:8000/v1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | a8f4517ecf4d4370beecee9e17183c6b |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2fb2087bf8da472d8c51e9fee39c93ad |
| service_name | heat-cfn                         |
| service_type | cloudformation                   |
| url          | http://network:8000/v1           |
+--------------+----------------------------------+

$ controller ~(keystone)> openstack endpoint create --region RegionOne cloudformation admin http://network:8000/v1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 66db714e538545879b7121f7150e72fc |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2fb2087bf8da472d8c51e9fee39c93ad |
| service_name | heat-cfn                         |
| service_type | cloudformation                   |
| url          | http://network:8000/v1           |
+--------------+----------------------------------+


$ controller ~(keystone)> openstack domain create --description "Stack projects and users" heat
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Stack projects and users         |
| enabled     | True                             |
| id          | 36fa9838b2fa43f6a6bbc95f0cdfd0a7 |
| name        | heat                             |
| options     | {}                               |
| tags        | []                               |
+-------------+----------------------------------+

$ controller ~(keystone)> openstack user create --domain heat --password qwer1234 heat_domain_admin
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | 36fa9838b2fa43f6a6bbc95f0cdfd0a7 |
| enabled             | True                             |
| id                  | c77bd90604254f8097aed49ea17f6fb3 |
| name                | heat_domain_admin                |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

$ controller ~(keystone)> openstack role add --domain heat --user heat_domain_admin admin

 

 

Heat 유저의 DB를 생성합니다.

$ controller> mysql -u root -p
$ MariaDB> create database heat;  
$ MariaDB> grant all privileges on heat.* to heat@'localhost' identified by 'qwer1234'; 
$ MariaDB> grant all privileges on heat.* to heat@'%' identified by 'qwer1234'; 
$ MariaDB> flush privileges; 
$ MariaDB> exit;

 

Network Node Heat 설치

$ Network> dnf --enablerepo=centos-openstack-ussuri,powertools,epel -y install openstack-heat-api openstack-heat-api-cfn openstack-heat-engine python3-heatclient
# Heat 및 관련 모듈을 설치합니다.

$ Network> vi /etc/heat/heat.conf

[DEFAULT]
deferred_auth_method = trusts
trusts_delegated_roles = heat_stack_owner

heat_metadata_server_url = http://network:8000
heat_waitcondition_server_url = http://network:8000/v1/waitcondition
heat_watch_server_url = http://network:8003
heat_stack_user_role = heat_stack_user

stack_user_domain_name = heat
stack_domain_admin = heat_domain_admin
stack_domain_admin_password = qwer1234
transport_url = rabbit://openstack:qwer1234@controller

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

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

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

[heat_api]
bind_host = 0.0.0.0
bind_port = 8004

[heat_api_cfn]
bind_host = 0.0.0.0
bind_port = 8000

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

[trustee]
auth_plugin = password
auth_url = http://controller:5000
username = heat
password = qwer1234
user_domain_name = default

$ network> chgrp heat /etc/heat/heat.conf
$ network> chmod 640 /etc/heat/heat.conf
$ network> su -s /bin/bash heat -c "heat-manage db_sync"
$ network> systemctl enable --now openstack-heat-api openstack-heat-api-cfn openstack-heat-engine
# DB를 import 시키고, haet 서비스를 등록 및 시작합니다.

$ network> firewall-cmd --add-port={8000/tcp,8004/tcp} --permanent
$ network> firewall-cmd --reload
# 방화벽을 설정합니다.

 

확인

$ controller ~(keystone)> vi sample-stack.yml
heat_template_version: 2018-08-31

description: Heat Sample Template

parameters:
  ImageID:
    type: string
    description: Image used to boot a server
  NetID:
    type: string
    description: Network ID for the server

resources:
  server1:
    type: OS::Nova::Server
    properties:
      name: "Heat_Deployed_Server"
      image: { get_param: ImageID }
      flavor: "m1.tiny"
      networks:
      - network: { get_param: NetID }

outputs:
  server1_private_ip:
    description: IP address of the server in the private network
    value: { get_attr: [ server1, first_address ] }

$ controller ~(keystone)> openstack stack create -t sample-stack.yml --parameter "ImageID=cirros;NetID=Int_net" Sample-Stack

# controller ~(keystone)> openstack stack list
+--------------------------------------+--------------+----------------------------------+-----------------+----------------------+--------------+
| ID                                   | Stack Name   | Project                          | Stack Status    | Creation Time        | Updated Time |
+--------------------------------------+--------------+----------------------------------+-----------------+----------------------+--------------+
| 4cb88c32-24f9-41cf-a44d-e18593c5eb2f | Sample-Stack | edd7025c02574d3aa2d3ab6e56208320 | CREATE_COMPLETE | 2020-08-13T09:39:16Z | None         |
+--------------------------------------+----

# controller ~(keystone)> openstack server list
+--------------------------------------+----------------------+--------+-----------------------+--------+---------+
| ID                                   | Name                 | Status | Networks              | Image  | Flavor  |
+--------------------------------------+----------------------+--------+-----------------------+--------+---------+
| ab20d06c-955a-404b-9525-11e3e4b09484 | Heat_Deployed_Server | ACTIVE | int_net=192.168.100.6 | cirros | m1.tiny |
+--------------------------------------+----------------------+--------+-----------------------+--------+---------+

 

RSS Feed
마지막 수정일자