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.
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):
- enable_apicv
- enable_shadow_vmcs
- fasteoi
- flexpriority
- nested
- etc…
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:
- Déchargement du module kvm_intel
- Création d’un fichier dans /etc/modprobe.d/
- 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:
- Une availability zone permet de créer des groupes logiques de computes.
- Géographique, datacenter, rack, type de serveurs, agrégation d’hôtes, etc…
- Une agrégation d’hôtes permet de créer des groupes logiques liés à des metadata qui se seront en corrélation avec des flavors Nova.
- Serveurs rapides, disques SSD, réseau fibré, nested KVM, etc…
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
- http://docs.openstack.org/developer/devstack/guides/devstack-with-nested-kvm.html
- http://docs.openstack.org/kilo/config-reference/content/section_compute-scheduler.html
- http://docs.openstack.org/openstack-ops/content/scaling.html
- http://blog.russellbryant.net/2013/05/21/availability-zones-and-host-aggregates-in-openstack-compute-nova/
Gaëtan Trellu (goldyfruit)
Derniers articles parGaëtan Trellu (goldyfruit) (voir tous)
- Qinling, let’s the journey begin! - 23 mai 2019
- systemd-networkd, l’âge de la maturité ? - 13 mars 2018
- Hyper-V, Nova, VxLAN et Open vSwitch, enfin une belle histoire ! - 31 décembre 2017
Une zone OpenStack dédiée au nested KVM par Gaëtan Trellu (goldyfruit) est sous Licence Creative Commons Internationale Attribution 4.0.