0% ont trouvé ce document utile (0 vote)
57 vues10 pages

Guide d'Orchestration OpenStack Heat

Transféré par

emile lovi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
57 vues10 pages

Guide d'Orchestration OpenStack Heat

Transféré par

emile lovi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

kokou Agbedanou

Service d’orchestration Heat


Heat est le service d’orchestration d’OpenStack. Il a pour but de fournir un service d’automate pour
effectuer des actions : provisionning de nouvelles instances en cas de pic de charge d’une instance par
exemple.

 Les actions suivantes sont à effectuer sur le Controller node.

1. Création de la base de données heat

Comme pour les autres services, il faut créer la base heat dans MySQL.

#mysql -u root -p
MariaDB [(none)]> CREATE DATABASE heat;
GRANT ALL PRIVILEGES ON heat.* TO 'heatUser'@'localhost'
IDENTIFIED BY 'HEAT_DBPASS';
GRANT ALL PRIVILEGES ON heat.* TO 'heatUser'@'%' IDENTIFIED BY
'heatPass';

 Remplacez heatPass par le vrai mot de passe.

2. Gestion des credentials

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -1-
kokou Agbedanou

# source ~/admin_creds.sh

3. Création de l’utilisateur heatUser dans la base Keystone

# keystone user-create --name heatUser --pass heatPass


+ ----------+----------------------------------+
| Property | Value |
+ ----------+----------------------------------+
| email | |
| enabled | True |
| id | 7d29a7d4eac048dda5f75edecae0e608 |
| name | heatUser |
| username | heatUser |
+ ----------+----------------------------------+

4. Ajout du rôle admin et du tenant service pour l’utilisateur


heatUser

# keystone user-role-add --user heatUser --tenant service --role


admin

5. Création du rôle heat_stack_owner

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -2-
kokou Agbedanou

Un rôle particulier est nécessaire (heat_stack_owner) si l’utilisateur admin souhaite déléguer la gestion
des stacks déployées par Heat.

# keystone role-create --name heat_stack_owner


+ ----------+----------------------------------+
| Property | Value |
+ ----------+----------------------------------+
| id | 77706edc3f504afaac546625b58a278c |
| name | heat_stack_owner |
+ ----------+----------------------------------+

6. Ajout du rôle heat_stack_owner au tenant demo et à l’utilisateur


demo

Dans cet exemple, c’est l’utilisateur demo qui va gérer la stack Heat :

# keystone user-role-add --user demo --tenant demo --role


heat_stack_owner

7. Création du rôle heat_stack_user

Lorsqu’un utilisateur effectue un déploiement de stack Heat, il se voit attribuer le rôle de heat_stack_user.
Il faut donc créer ce rôle :

# keystone role-create --name heat_stack_user


+ ----------+----------------------------------+
| Property | Value |

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -3-
kokou Agbedanou

+ ----------+----------------------------------+
| id | 8287fc57a4904d8cb2d89794638369b5 |
| name | heat_stack_user |
+ ----------+----------------------------------+

8. Création des services d’entités (heat et heat-cfn)

Deux types de services sont nécessaires : le service d’orchestration et le service de cloud-formation.

# keystone service-create --name heat --type orchestration


--description "Orchestration"
+ -------------+----------------------------------+
| Property | Value |
+ -------------+----------------------------------+
| description | Orchestration |
| enabled | True |
| id | 0a000fb4cc8d488c861950901d7aa1a0 |
| name | heat |
| type | orchestration |
+ -------------+----------------------------------+

# keystone service-create --name heat-cfn --type cloudformation


--description "Orchestration"
+ -------------+----------------------------------+
| Property | Value |
+ -------------+----------------------------------+
| description | Orchestration |
| enabled | True |
| id | bd9646f8862d4859b649c47b7c71aa7d |
| name | heat-cfn |

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -4-
kokou Agbedanou

| type | cloudformation |
+-------------+----------------------------------+

9. Création des services API endpoints

# keystone endpoint-create --service-id $(keystone service-list |


awk '/ orchestration / {print $2}') --publicurl http://srv-
openstack-controller:8004/v1/%\(tenant_id\)s --internalurl
http://srv-openstack-controller:8004/v1/%\(tenant_id\)s --adminurl
http://srv-openstack-controller:8004/v1/%\(tenant_id\)s --region
regionOne
+-------------+-------------------------------------------------------+
| Property | Value |
+-------------+-------------------------------------------------------+
| adminurl | http://srv-openstack-controller:8004/v1/%(tenant_id)s |
| id | 5 ab64e05b5134e1b89a7677116dbe676 |
| internalurl | http://srv-openstack-controller:8004/v1/%(tenant_id)s |
| publicurl | http://srv-openstack-controller:8004/v1/%(tenant_id)s |
| region | regionOne |
| service_id | 0 a000fb4cc8d488c861950901d7aa1a0 |
+-------------+-------------------------------------------------------+

Le port 8004 est le port utilisé par Heat.

# keystone endpoint-create --service-id $(keystone service-list |


awk '/ cloudformation / {print $2}') --publicurl http://srv-
openstack-controller:8000/v1 --internalurl http://srv-openstack-
controller:8000/v1 --adminurl http://srv-openstack-
controller:8000/v1 --region regionOne
+-------------+-----------------------------------------+
| Property | Value |

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -5-
kokou Agbedanou

+-------------+-----------------------------------------+
| adminurl | http://srv-openstack-controller:8000/v1 |
| id | ceda466df0d241d2b8f55996cf8fb498 |
| internalurl | http://srv-openstack-controller:8000/v1 |
| publicurl | http://srv-openstack-controller:8000/v1 |
| region | regionOne |
| service_id | bd9646f8862d4859b649c47b7c71aa7d |
+-------------+----------------------------------------+

Le port 8000 est le port utilisé par Heat-cloudformation.

10. Installation et configuration des composants d’orchestration

Installation des paquets Heat

# yum install openstack-heat-api openstack-heat-api-cfn


openstack-heat-engine python-heatclient

Modification du fichier /etc/heat/heat.conf

[DEFAULT]
...
Verbose = True
rpc_backend = rabbit
rabbit_host = srv-openstack-controller
rabbit_password = RABBIT_PASS

heat_metadata_server_url = http://srv-openstack-controller:8000
heat_waitcondition_server_url = http://srv-openstack-
controller:8000/v1/waitcondition

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -6-
kokou Agbedanou

[database]
...
connection = mysql://heatUser:heatPass@srv-openstack-
controller/heat

[keystone_authtoken]
...
auth_uri = http://srv-openstack-controller:5000/v2.0
identity_uri = http://srv-openstack-controller:35357
admin_tenant_name = service
admin_user = heatUser
admin_password = heatPass

[ec2authtoken]
...
auth_uri = http://srv-openstack-controller:5000/v2.0

 Remplacez RABBIT_PASS et heatPass par les vrais mots de passe.

Peuplement de la base de données Heat

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

Cette commande crée les tables MySQL de la base heat sur le Controller node.

Opérations post-installation

# systemctl enable openstack-heat-api.service openstack-heat-api-

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -7-
kokou Agbedanou

cfn.service openstack-heat-engine.service

# systemctl start openstack-heat-api.service openstack-heat-api-


cfn.service openstack-heat-engine.service

Test de l’installation

Ensuite, il faut créer un fichier template au format YAML contenant les informations pour déployer une
stack Heat à base des éléments suivants : une instance à partir de l’image cirros-0.3.3-x86_64 avec un
flavor m1.tiny et une adresse IP privée obtenue dans le range du subnet int-net (ce subnet a été créé au
préalable dans le chapitre Installation OpenStack : services de base - section Gestion des réseaux
virtuels).

#vi /etc/heat/templates
Création d'un template de test test-stack.yml
Heat_template_version: 2013-05-23
description: Test Template

# paramètres en entrée pour instancier le template


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

# déclaration des ressources du template


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

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -8-
kokou Agbedanou

# paramètres de sortie disponibles pour l'utilisateur


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

Gestion des credentials de l’utilisateur demo

Il faut au préalable sourcer les credentials du tenant demo.

# su demo
$ source ~/demo_creds.sh

Récupération d’une adresse réseau dans int-net

$ NET_ID=$(nova net-list | awk '/ int-net / { print $2 }')


# echo $NET_ID
5 ed881ff-77fe-4276-9c8b-b9fb0657d5d4

La commande nova net-listretourne le résultat suivant :

# nova net-list
+ --------------------------------------+---------+------+
| ID | Label | CIDR |
+ --------------------------------------+---------+------+
| 5ed881ff-77fe-4276-9c8b-b9fb0657d5d4 | int-net | None |
| 8935ce5f-2011-4f8d-8586-4bbd1ff98a2f | ext-net | None |
+ --------------------------------------+---------+------+

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -9-
kokou Agbedanou

Déploiement de la stack teststack

$ heat stack-create -f test-stack.yml -P "ImageID=cirros-0.3.3-


x86_64;NetID=$NET_ID" testStack
+ --------------------------------------+------------+-----------
---------+----------------------+
| id | stack_name |
stack_status | creation_time |
+ --------------------------------------+------------+-----------
---------+----------------------+
| 40116b63-4f0f-469b-a433-fe4bb43efabe | testStack |
CREATE_IN_PROGRESS | 2015-06-24T20:27:52Z |
+ --------------------------------------+------------+-----------
---------+----------------------+

Vérification de fonctionnement

# heat stack-list
+ --------------------------------------+------------+--------------
+ ---------------+------------------------+
| id | stack_name |
stack_status | creation_time |
+ --------------------------------------+------------+--------------
+ ---------------+------------------------+
| 40116b63-4f0f-469b-a433-fe4bb43efabe | testStack |
CREATE_COMPLETE | 2015-06-24T 20:27:52Z |
+ --------------------------------------+------------+--------------
+ ---------------+------------------------+

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 10 -

Vous aimerez peut-être aussi