Virtualisation

Qu'est-ce que Nested virtualisation ?

Définition

Nested virtualisation lets a virtual machine itself run virtual machines, by exposing the processor virtualisation extensions to the guest. It is required for Proxmox VE, VM-based CI jobs and some Docker configurations. Many providers disable it, which is the usual reason those workloads fail elsewhere.

Pourquoi Nested virtualisation est important

Elle est requise pour Proxmox VE, les travaux d'intégration continue basés sur des machines virtuelles et certaines configurations Docker. De nombreux fournisseurs la désactivent, ce qui est la raison habituelle pour laquelle ces charges de travail échouent ailleurs.

Nested virtualisation en pratique

Lorsque vous exécutez de la virtualisation imbriquée, vous démarrez un hyperviseur dans un invité KVM et transmettez les extensions de virtualisation du processeur hôte. Vous vérifierez /proc/cpuinfo dans l'invité pour les drapeaux svm ou vmx. S'ils sont absents, votre hyperviseur interne retombe à l'émulation logicielle, ce qui peut réduire les performances d'un ordre de grandeur. Vous devrez peut-être aussi activer le type de CPU 'host' plutôt qu'un modèle générique pour obtenir ces drapeaux. Se tromper et vos charges de travail Proxmox ou CI rampent.

Ce qu'on comprend mal à propos de Nested virtualisation

Les gens supposent que la virtualisation imbriquée ne compte que pour exécuter des systèmes d'exploitation complets comme Windows dans une VM. La correction : elle casse aussi la mise en réseau par défaut en overlay de Docker et certains modules du noyau, car ceux-ci dépendent des fonctionnalités de virtualisation dans l'invité. Ainsi, une charge de travail conteneurisée peut échouer chez un fournisseur qui désactive l'imbrication, même si vous n'aviez jamais prévu d'exécuter une VM.

Nested virtualisation — questions fréquentes

Puis-je exécuter Docker dans une VM imbriquée ?

Oui, et c'est la raison la plus courante pour laquelle les gens ont besoin de la virtualisation imbriquée. La mise en réseau par défaut de Docker utilise iptables et des modules du noyau qui peuvent se comporter différemment sans extensions de virtualisation CPU exposées. Nos plans KVM incluent la virtualisation imbriquée, donc vos conteneurs Docker fonctionnent comme prévu.

Comment vérifier si la virtualisation imbriquée est activée ?

Dans votre VM, exécutez grep -E '(svm|vmx)' /proc/cpuinfo. Si vous voyez les drapeaux, l'imbrication est disponible. Sinon, l'hyperviseur ne les expose pas, ce qui signifie généralement que le fournisseur l'a désactivée.

Plus de virtualisation

KVM
KVM est une virtualisation matérielle complète intégrée au noyau Linux, donnant à chaque invité son propre noyau et une isolation renforcée par le matériel vis-à-vis des autres locataires.
OpenVZ
OpenVZ est une virtualisation par conteneurs dans laquelle chaque instance partage le noyau hôte, de sorte que les invités ne peuvent pas charger de modules noyau ni exécuter un système d'exploitation différent.
LXC
LXC est la conteneurisation native de Linux qui isole les processus avec des espaces de noms et des cgroups tout en partageant le noyau hôte.
Hyperviseur
Un hyperviseur est la couche logicielle qui crée et exécute des machines virtuelles, allouant les CPU physiques, la mémoire et les entrées-sorties entre elles.
vCPU
Un vCPU est un processeur virtuel présenté à un invité, adossé au temps d'ordonnancement sur un cœur ou un thread physique.
cloud-init
cloud-init est le mécanisme standard pour configurer une machine virtuelle au premier démarrage, en utilisant des métadonnées fournies par la plateforme.