Virtualisation
Création d'une VM
Pour créer une machine la procédure est la suivante :
- Se déplacer dans le dossier
/root/vms-init
- Créer l'image de disque à partir de la base de l'os voulu
qemu-img create -f qcow2 -F qcow2 -b /var/lib/libvirt/images/bases/<variante de l'os>.img /var/lib/libvirt/images/storage/<nom de la vm>.img <taille>
- Modifier le nom de l'instance et l'hostname dans
state/meta-data
:
instance-id: <nom de la vm>
local-hostname: <nom de la vm>.vm.ppsfleet.navy
- Générer le volume de seed pour cloud-init
genisoimage -output /var/lib/libvirt/images/seeds/<nom de la vm>.iso -volid cidata -joliet -rock state/user-data state/meta-data
- Démarrer la vm
virt-install --name <nom de la vm> --memory 2048 --vcpu 2 --import --disk path=/var/lib/libvirt/images/storage/<nom de la vm>.img,format=qcow2 --disk path=/var/lib/libvirt/images/seeds/<nom de la vm>.iso,device=cdrom --os-variant <variante de l'os> --network network=vm-net --wait 0
Script complet:
export vm_name=test01
export os_variant=centos-stream8
cd /root/vms-init
qemu-img create -f qcow2 -F qcow2 -b /var/lib/libvirt/images/bases/${os_variant}.img /var/lib/libvirt/images/storage/${vm_name}.img 20G
cat > state/meta-data <<EOF
instance-id: ${vm_name}
local-hostname: ${vm_name}.vm.ppsfleet.navy
EOF
genisoimage -output /var/lib/libvirt/images/seeds/${vm_name}.iso -volid cidata -joliet -rock state/user-data state/meta-data
virt-install --name ${vm_name} --memory 2048 --vcpu 2 --import --disk path=/var/lib/libvirt/images/storage/${vm_name}.img,format=qcow2 --disk path=/var/lib/libvirt/images/seeds/${vm_name}.iso,device=cdrom --os-variant ${os_variant} --network network=vm-net --wait 0
De manière plus automatiser le scripts /root/vms-init/create.sh
reprend les commandes ci-dessus pour créer une VM avec 20Go de disque, 2 vCPU et 2Go de mémoire :
$ /root/vms-init/create.sh <nom de la vm> <distribution>
Distribution disponibles et testées :
Nom | id (variante) |
---|---|
Ubuntu 20.04 | ubuntu20.04 |
Centos 8 | centos-stream8 |
Connection
L'utilisateur par défaut est roger
(mot de passe à voir dans state/user-data
) et a les droits sudo.
Pour ce connecter en ssh il faut utiliser la clé /root/.ssh/vm
:
ssh roger@${vm_name} -i ~/.ssh/vm
Une entrée A est rajoutée dans le DNS local pour chaque VM dans la zone vm.ppsfleet.navy, qui est défini en tant que domaine de recherche sur alshain et pour les VMs.
Une entrée AAAA est aussi ajoutée pour les machines utilisant SLAAC pour configurer leur IPv6.
Préparation d'une image
Activer le client DHCPv6
- Monter l'image en lecture/écriture
guestmount -a /var/lib/libvirt/images/bases/centos-stream8.img -i -o rw /mnt
- Créer le fichier
/mnt/etc/cloud/cloud.cfg.d/10_network.cfg
avec le contenu suivant (adapter le nom de l'interface par défault en fonction de l'os):
network:
version: 2
ethernets:
eth0:
dhcp4: true
dhcp6: true
- Démonter l'image
umount /mnt