Google PlusFacebookTwitter

Une zone OpenStack dédiée au nested KVM

By on Oct 2, 2015 in Linux, OpenStack | 2 comments

Share On GoogleShare On FacebookShare On Twitter

Qu’est-ce que le nested KVM ?

En informatique, le mot nested signifie imbriqué. Ce mot est souvent utilisé dans le développement (nested structure), pour KVM cela signifie simplement que si cette option est activée alors il sera possible de créer une machine virtuelle dans une autre machine virtuelle, d’où l’utilisation du mot imbriqué.

Par défaut, cette fonctionnalité n’est pas activée, cela signifie donc que seules des instances de type QEMU peuvent-être créées sur des machines virtuelles. Les instances de type QEMU seront beaucoup moins performantes que des instances de type KVM.

Ce billet suppose que le(s) processeur(s) utilisé(s) sur l’hyperviseur/compute est/sont de marque Intel.

Activation du nested pour le module KVM

Bon pour ceux qui n’étaient pas au courant (et qui n’ont pas lu le lien ci-dessus), kvm est un module du noyau Linux. Comme beaucoup de modules noyau, kvm propose quelques options supplémentaires à manipuler en fonction d’un besoin spécifique (ici le nested):

Cette liste d’options/paramètres est accessible via un simple ls dans le répertoire du module ou via la commande systool. La commande systool est disponible via le paquet sysfsutils. Exemples:

# ls -1 /sys/module/kvm_intel/parameters/
# systool -m kvm_intel -a

Le paramètre nested du module kvm_intel devrait donc faire son apparition dans cette liste.

Passons à l’activation de cette option, cette dernière consiste en trois étapes:

  1. Déchargement du module kvm_intel
  2. Création d’un fichier dans /etc/modprobe.d/
  3. Chargement du module kvm_intel

Pour décharger le module kvm_intel, il est impératif qu’aucune machine virtuelle soit en cours d’exécution !

# rmmod kvm_intel
# echo "options kvm-intel nested=y" > /etc/modprobe.d/kvm_intel.conf
# modprobe kvm_intel

Pour s’assurer que le nested a bien été activé, il suffit de le vérifier à l’aide de la commande systool:

# systool -m kvm_intel -A nested

Résultat:

Module = "kvm_intel"

    nested              = "Y"

Une sublime « Y » doit apparaître, si tel est le cas alors c’est GG (spéciale cacedédi aux hardcore gamers) ^^

Availability Zone OpenStack et agrégation d’hôtes

Petit résumé afin d’éviter quelques confusions. OpenStack propose un système d’availability zone (AZ) ainsi qu’un système d’agrégation d’hôtes:

Les agrégats d’hôtes sont uniquement visibles par les administrateurs. Cependant il est tout à fait possible de rendre un agrégat visible aux utilisateurs en lui assignant une availability zone lors de sa création. L’agrégat ne sera pas créé dans une availability zone mais deviendra l’availability zone !

C’est bon, tout va bien, pas trop mal à la tête ? Je sais, je sais, je sais… cela peut vite devenir confus ! C’est bon, vous avez fini de vous plaindre, on peut continuer ? 😈

Création de l’agrégat nested001-aggregate assigné à l’availability zone nested001-az:

$ nova aggregate-create nested001-aggregate nested001-az

Résultat:

+----+---------------------+-------------------+-------+----------------------------------+
| Id | Name                | Availability Zone | Hosts | Metadata                         |
+----+---------------------+-------------------+-------+----------------------------------+
| 5  | nested001-aggregate | nested001-az      |       | 'availability_zone=nested001-az' |
+----+---------------------+-------------------+-------+----------------------------------+

Maintenant que l’agrégat est créé, il reste à ajouter des computes à l’agrégation nested001-aggregate, l’ajout se fait via l’ID de l’agrégat et non via son nom:

$ nova aggregate-add-host 5 cmpt2
$ nova aggregate-add-host 5 cmpt3

Reste à vérifier que les computes aient bien été ajoutés à l’agrégat:

$ nova aggregate-details 5

Résultat:

+----+---------------------+-------------------+------------------+----------------------------------+
| Id | Name                | Availability Zone | Hosts            | Metadata                         |
+----+---------------------+-------------------+------------------+----------------------------------+
| 5  | nested001-aggregate | nested001-az      | 'cmpt2', 'cmpt3' | 'availability_zone=nested001-az' |
+----+---------------------+-------------------+------------------+----------------------------------+

Une nouvelle availability zone nested001-az a du faire son apparition dans Nova:

$ nova availability-zone-list

Résulat:

+--------------------------------+----------------------------------------+
| Name                           | Status                                 |
+--------------------------------+----------------------------------------+
| internal                       | available                              |
| |- ctrl0                       |                                        |
| | |- nova-conductor            | enabled :-) 2015-10-02T21:03:22.000000 |
| | |- nova-scheduler            | enabled :-) 2015-10-02T21:03:13.000000 |
| | |- nova-consoleauth          | enabled :-) 2015-10-02T21:03:16.000000 |
| |- ctrl1                       |                                        |
| | |- nova-conductor            | enabled :-) 2015-10-02T21:03:16.000000 |
| | |- nova-scheduler            | enabled :-) 2015-10-02T21:03:22.000000 |
| | |- nova-consoleauth          | enabled :-) 2015-10-02T21:03:16.000000 |
| |- ctrl2                       |                                        |
| | |- nova-conductor            | enabled :-) 2015-10-02T21:03:16.000000 |
| | |- nova-scheduler            | enabled :-) 2015-10-02T21:03:22.000000 |
| | |- nova-consoleauth          | enabled :-) 2015-10-02T21:03:16.000000 |
| nova                           | available                              |
| | |- nova-compute              | enabled :-) 2015-10-02T21:03:17.000000 |
| |- cmpt1                       |                                        |
| | |- nova-compute              | enabled :-) 2015-10-02T21:03:17.000000 |
| |- cmpt4                       |                                        |
| | |- nova-compute              | enabled :-) 2015-10-02T21:03:19.000000 |
| |- cmpt5                       |                                        |
| | |- nova-compute              | enabled :-) 2015-10-02T21:03:20.000000 |
| |- cmpt6                       |                                        |
| | |- nova-compute              | enabled :-) 2015-10-02T21:03:17.000000 |
| nested001-az                   | available                              |
| |- cmpt2                       |                                        |
| | |- nova-compute              | enabled :-) 2015-10-02T21:03:14.000000 |
| |- cmpt3                       |                                        |
| | |- nova-compute              | enabled :-) 2015-10-02T21:03:14.000000 |
+--------------------------------+----------------------------------------+

Et voilà, c’est terminé ! Ce fut un long, long, long, long, long billet avec tout plein d’informations mais elles furent utiles (tout du moins je l’espère), non ?

Liens

The following two tabs change content below.

Gaëtan Trellu (goldyfruit)

Cloud Technical Advisor chez IBM
Autodidacte en informatique, depuis 2005 je parcours l’écosystème Unix à la recherche de nouvelles connaissances et de nouvelles rencontres.

Derniers articles parGaëtan Trellu (goldyfruit) (voir tous)

CC BY 4.0 Une zone OpenStack dédiée au nested KVM par Gaëtan Trellu (goldyfruit) est sous Licence Creative Commons Internationale Attribution 4.0.