Créer une VM
Avec Nanocl, démarrez rapidement des machines virtuelles compatibles avec cloud-init .
La plupart des images cloud Linux l’intègrent, ce qui permet de configurer le réseau, les utilisateurs et les clés SSH dans la VM.
Installer l’environnement d’exécution VM par défaut
Pour faciliter le réseau, Nanocl démarre une VM dans un conteneur avec l’image par défaut nanocl-qemu .
Télécharger Ubuntu et créer un disque VM avec un conteneur d’initialisation
Nanocl utilise directement le chemin de l’image VM. Dans Nanocl 0.18, utilisez le
InitContainer de la VM pour télécharger l’image cloud Ubuntu et créer un disque
qcow2 indépendant avec qemu-img avant le démarrage du conteneur QEMU. Le téléchargement
et la préparation du disque restent ainsi dans le cycle de vie de la VM, sans étape
manuelle de préparation sur l’hôte.
Le Statefile suivant crée le disque de web-01 dans
/var/lib/nanocl/vm. Le conteneur d’initialisation télécharge Ubuntu Server 24.04, puis
utilise qemu-img convert pour créer la copie inscriptible web-01.qcow2. L’environnement VM
démarre uniquement après la fin de cette commande avec le code 0.
ApiVersion: v0.18
VirtualMachines:
- Name: web-01
Image: /var/lib/nanocl/vm/web-01.qcow2
InitContainer:
# Omit Image to use Nanocl's default nanocl-qemu runtime image.
Entrypoint: ["sh", "-ec"]
Cmd:
- |
mkdir -p /images
test ! -e /images/web-01.qcow2 || {
echo "VM disk already exists: /images/web-01.qcow2" >&2
exit 1
}
curl -fL \
-o /images/ubuntu-24.04-base.img \
https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
qemu-img convert -p -O qcow2 \
/images/ubuntu-24.04-base.img \
/images/web-01.qcow2
HostConfig:
Binds:
- /var/lib/nanocl/vm:/imagesqemu-img convert crée une copie qcow2 complète et indépendante ; utilisez
un nom de fichier de sortie différent pour chaque VM. Le contrôle d’existence empêche une
nouvelle exécution du conteneur d’initialisation d’écraser le disque. Le démon et l’environnement VM
doivent avoir le droit d’écrire dans /var/lib/nanocl/vm.
Exécuter une VM
Pour exécuter une VM, utilisez cette commande simple :
nanocl vm run web-01 /var/lib/nanocl/vm/web-01.qcow2Voici les options employées :
web-01- nom de la machine virtuelle./var/lib/nanocl/vm/web-01.qcow2- chemin complet de la copie inscriptible de son disque.
Sans options, la VM démarre avec les paramètres suivants :
- 1 CPU
- 500 MB de RAM
Le premier démarrage prend environ 90 secondes avec les paramètres par défaut. Activez KVM et allouez davantage de ressources pour l’accélérer.
Nanocl ne crée pas automatiquement de snapshot du disque. Utilisez le chemin de la copie pour la VM et conservez l’image de base téléchargée uniquement comme source de futures copies.
Suivez son état en vous y attachant avec :
nanocl vm attach web-01Cette commande vous attache à la VM active pour y exécuter des commandes et d’autres opérations.
Vous devriez voir une sortie semblable à ceci :
[ OK ] Finished Permit User Sessions.
[ OK ] Started Serial Getty on ttyS0.
[ OK ] Reached target Login Prompts.
[ OK ] Finished Record successful boot for GRUB.
Starting GRUB failed boot detection...
[ OK ] Started LSB: automatic crash report generation.
[ OK ] Finished GRUB failed boot detection.
[ OK ] Finished Pollinate to seed…seudo random number generator.
Starting OpenBSD Secure Shell server...
[ OK ] Started User Login Management.
[ OK ] Started Unattended Upgrades Shutdown.
[ OK ] Started OpenBSD Secure Shell server.
[ OK ] Started Dispatcher daemon for systemd-networkd.
cloud-init[494]: Cloud-init v. 23.1.2-0ubuntu0~22.04.1 running 'modules:config' at Tue, 04 Jul 2023 12:36:13 +0000. Up 78.27 seconds.
cloud-init[517]: Cloud-init v. 23.1.2-0ubuntu0~22.04.1 running 'modules:final' at Tue, 04 Jul 2023 12:36:18 +0000. Up 83.19 seconds.
cloud-init[515]: The system is finally up, after 93.54 seconds
[ OK ] Finished Execute cloud user/final scripts.
[ OK ] Reached target Cloud-init target.
Ubuntu 22.04.2 LTS 91daefd21c1b ttyS0
91daefd21c1b login: Par défaut, le nom d’utilisateur et le mot de passe sont cloud:cloud.
Vous pouvez définir ces identifiants au premier démarrage de la VM.
Pour renforcer la sécurité, vous pouvez aussi configurer des clés SSH.
Attendez la fin de cloud-init avant de pouvoir vous connecter.
Modifier une VM
Ajustez les performances d’une VM en modifiant ses ressources, comme la mémoire et les CPU.
Pour cela, utilisez :
nanocl vm patch myvm --kvm --cpu 4 --mem 2048Voici les options utilisées dans cette commande :
myvm- nom de la VM à modifier.--kvm- active l’accélération KVM.--cpu- définit le nombre de CPU.--mem- définit la quantité de mémoire allouée.
Si KVM n’est pas activé sur votre système, retirez —kvm. Après la modification, vous pouvez vous rattacher à la VM.
Modifier une VM provoque son arrêt et son redémarrage.
Connexion SSH
Sans Docker Desktop, connectez-vous à la VM par son adresse IP. Obtenez-la avec :
nanocl vm inspect myvmRécupérez IPAddress, ici 10.2.0.2.
Connectez-vous ensuite par SSH avec les identifiants par défaut cloud:cloud.
Statefile
Vous pouvez définir une VM dans un Statefile. Voici un exemple :
ApiVersion: v0.18
Namespace: global
# See all options:
# https://docs.next-hat.com/references/nanocl/objects/virtual-machine
VirtualMachines:
- Name: myvm
Image: /var/lib/nanocl/vm/myvm.qcow2
HostConfig:
Cpu: 2
Memory: 2048Exposer votre VM
Utilisez une ProxyRule pour exposer un port précis de la VM.
Voici un exemple complet exposant le port SSH 22 de la VM sur le port public 5555 :
ApiVersion: v0.18
Namespace: global
# See all options:
# https://docs.next-hat.com/references/nanocl/objects/resource
Resources:
- Name: myvm.ssh
Kind: ncproxy.io/rule/v0.15
Data:
Rules:
- Protocol: Tcp
Network: Public
Port: 5555
Target:
Key: global.myvm.v
Port: 22
# See all options:
# https://docs.next-hat.com/references/nanocl/objects/virtual-machine
VirtualMachines:
- Name: myvm
Image: /var/lib/nanocl/vm/myvm.qcow2
HostConfig:
Cpu: 2
Memory: 2048