You are on page 1of 10

kokou Agbedanou

Gestion des machines virtuelles


C’est le module Compute (Nova) qui assure la communication et le déploiement des machines virtuelles
sur les hyperviseurs compatibles (vSphere, RHEV, KVM, Xen...). L’interconnexion de Nova avec le module
Heat permet l’orchestration de la création des VM.

1. La brique de compute Nova

a. Introduction

Nova est la colonne vertébrale d’OpenStack : c’est le composant qui permet d’effectuer le traitement
d’instanciation de machines virtuelles. Nova peut agir sur un host physique qui va servir à héberger
plusieurs VM (il s’agit d’un Compute node) ; dans ce cas, c’est Nova qui va se charger de la relation avec
l’hyperviseur, ce dernier étant installé sur le Compute node via le processus d’installation de Nova.

Nova permet également d’instancier une seule machine virtuelle sur un serveur physique (serveur Bare-
Metal).

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

Schéma de comparaison compute et Bare-Metal

De nombreuses technologies, supportées par OpenStack, peuvent être employées pour le support des
instances de machines virtuelles : des hyperviseurs, des containers ou des machines Bare-Metal :

Hyperviseurs

ˇ
QEMU (Quick EMUlator) : c’est un émulateur et hyperviseur ; il doit être employé lorsque KVM ne
peut pas être utilisé pour incompatibilité hardware. Il est considéré comme le parent pauvre de
KVM car il ne supporte pas la virtualisation native ; il dispose donc de performances non
satisfaisantes pour des environnements de production.
ˇ
KVM (Kernel-based Virtual Machine) : c’est l’hyperviseur par défaut d’OpenStack et celui qui est
le plus utilisé en production.
ˇ
XenServer : c’est la seconde implémentation en production.

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

ˇ
VMware ESXi
ˇ
Microsoft Hyper-V

Containers

ˇ
LXC : Linux Container (via la bibliothèque libvirt).
ˇ
Docker : Linux Container.
ˇ
UML : User Mode Linux (système de virtualisation à part entière mais qui fonctionne sur un
système d’exploitation hôte ; c’est en quelque sorte une virtualisation sous forme de container).

Bare-Metal

Le driver Bare-Metal est apparu dans la version Grizzly sous forme de service baremetal mais avec des
fonctionnalités limitées. Le Metal as a Service (MaaS) est désormais présent dans la version Kilo (avril
2015) sous la forme du composant Ironic. Cependant, toutes les distributions OpenStack propriétaires
n’ont pas encore intégré ce composant.

Dans Nova, l’hyperviseur par défaut est KVM. Pour changer l’hyperviseur, il faut modifier la valeur de la
variable virt_type de la section [libvirt] dans le fichier nova.conf, puis relancer le service nova-compute :

# Libvirt domain type (valid options are: kvm, lxc, qemu, uml,
# xen) (string value)
virt_type=kvm

Pour les autres hyperviseurs, la procédure est plus spécifique et il faut effectuer une configuration dans
nova.conf, en ajoutant le driver de l’hyperviseur et une section spécifique indiquant où trouver
l’environnement d’hébergement (par exemple, l’IP du vCenter pour VMware).

Le choix de l’hyperviseur dépend du contexte du client ; il faut donc tenir compte de nombreux paramètres
: historique, compétences présentes, performances souhaitées, plates-formes existantes...

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

b. Concept

Workflow

Lorsqu’un utilisateur se connecte via Horizon, après s’être authentifié via Keystone, il demande une
création de VM.

Horizon envoie une requête REST API à nova-api qui reçoit la requête et la traite en créant une entrée dans
la base MySQL Nova du Controller node.

nova-api interroge Nova-Scheduler pour savoir sur quel host il faut provisionner la VM.

nova-scheduler envoie la requête de création à nova-compute qui la met en file d’attente et interroge nova-
conductor pour récupérer des informations sur le host-ID et sur le flavor.

nova-conductor envoie les informations à nova-compute qui interroge glance-api pour récupérer l’image.

nova-compute interroge Neutron server pour récupérer les informations de réseau.

Neutron server envoie les informations à nova-compute qui interroge cinder-api pour la fourniture du
volume d’attachement.

Enfin, nova-compute fabrique la VM via libvirt et KVM.

Composants

Nova contient plusieurs sous-modules :

ˇ
nova-api

nova-api est en charge de la gestion des appels API des utilisateurs. Il permet le démarrage des
VM.

ˇ
nova-compute

nova-compute est un processus qui doit être installé et lancé sur tous les serveurs hôtes qui
vont héberger des VM (les nodes de Compute). Il assure la gestion de la vie des VM en faisant
le lien avec l’API des hyperviseurs concernés.

ˇ
nova-network

nova-network s’occupe initialement de la gestion des réseaux ; il est remplacé

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

par le module Neutron.

ˇ
nova-scheduler

nova-scheduler s’occupe de la planification du provisionning des VM ; il est au courant de


toutes les demandes de création de VM et il oriente la création sur les hôtes. Il est en couplage
fort avec le service de gestion du bus de message.

ˇ
nova-console, nova-vncproxy, nova-consoleauth

Ces processus permettent à un utilisateur d’accéder à une VM via sa console.

ˇ
nova-bare-metal

Ce composant permet à Nova de pouvoir également provisionner des instances sur des
serveurs physiques.

c. Architecture

Modèle de base de données

La base de données de Nova stocke toutes les informations relatives au module Nova et notamment l’état
des objets sur les multiples serveurs de compute : instances disponibles, en cours d’exécution…

La base Nova peut fonctionner sous MySQL, PostgreSQL ou SQLite3 ; elle contient 108 tables (version
Juno).

La liaison entre Nova API et la base de données s’effectue via l’ORM (Object-Relational Mapper)
SQLAlchemy.

Back-ends hyperviseurs

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

Hyperviseur/ container Éditeur Type

QMenu www.qmenu.org Hyperviseur

KVM www.linux-kvm.org Hyperviseur

Xen www.xenproject.org/ Paravirtualiseur-hyperviseur

Xen Server Citrix Paravirtualiseur-hyperviseur

ESXi VMware Hyperviseur

Hyper-V Microsoft Hyperviseur

LXC Linux Container

Docker Docker Container

UML Linux Paravirtualiseur

Bare-Metal Ironic OpenStack Physique

Back-ends RPC

Les back-ends RPC pour l’échange de messages sont les suivants :

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

Produit Origine Protocole Langage

RabbitMQ Rackspace AMQP, MQTT, HTTP... Erlang, très rapide à installer et


à utiliser

QPID Red Hat, Apache AMQP Java, C++

ZeroMQ ZeroMQ 0MQ Python, C++

ActiveMQ Apache AMQP, MQTP, REST, Java, très consommateur


XMPP...

 Le back-end RabbitMQ sera utilisé tout au long des chapitres Installation


OpenStack : services de base et Installation OpenStack : services avancés.

Back-ends SQL

Les back-ends SQL permettent de réaliser le stockage des informations en base de données.

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

Base de données Écriture simultanée Haute disponibilité Client Python natif

SQLite Non Non Non

MySQL Oui Oui Oui

MongoDB Oui Oui Non

PostgreSQL Oui Oui Non

Remarques :

ˇ
SQLite est à utiliser pour un POC, en développement mais pas en production.
ˇ
PostgreSQL ne dispose pas de client Python natif.
ˇ
MySQL assure la haute disponibilité grâce à des outils comme Galera cluster, MySQL
Management ou Extra cluster.

 Le back-end SQL MySQL, MariaDB, sera utilisé tout au long des chapitres
Installation OpenStack : services de base et Installation OpenStack : services
avancés.

2. Les commandes Nova

Commande Utilité Paramètres Exemple

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

nova list Affichage de nova list


la liste des
VM

nova image- Affichage de nova image-list


list la liste des
images

nova flavor-list Affichage de nova flavor-list


la liste des
flavors

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

nova boot Création [--flavor < flavor> ] nova boot


d’une VM [--image < image> ] --image MyFirst-Image
basée sur [--image-with < key=value> ] --flavor m1.tiny
une image [--boot-volume < volume_id> ] MyFirstVM
[--snapshot < snapshot_id> ]
[--min-count < number> ]
[--max-count < number> ]
[--meta < key=value> ]
[--file < dst-path=src-path> ]
[--key-name < key-name> ]
[--user-data < user-data> ]
[--availability-zone
< availability-zone> ]
[--security-groups
< security-groups> ]
[--block-device-mapping
< dev-name=mapping> ]
[--block-device key1=value1
[,key2=value2...]]
[--swap < swap_size> ]
[--ephemeral size=< size>
[,format=< format> ]]
[--hint < key=value> ]
[--nic < net-id=net-uuid,
v4-fixed-ip= ip-addr,v6-fixed-
ip= ip-addr,port-id= port-uuid> ]
[--config-drive < value> ]
[--poll] < name>

nova delete Suppression Nom ou id de la VM nova delete <VM_name>


d’une VM

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

You might also like