- Contenu
- Cluster with libvirt
Cluster with libvirt¶
Creation /destruction d'une VM¶
Intructions détaillées voir le wiki des bénévoles (authentification nécessaire)
https://wiki.tetaneutral.net/adminsys
Tooling¶
# cd /root/tools/libvirt/ # ./autovirsh domuuid gizmo.sileht.net Domain gizmo.sileht.net is on g3 4baace2f-6d7c-4575-8982-bedb6065ab6b # ./where www.tetaneutral.net Domain www.tetaneutral.net is on g1 # ./create-vm --help usage: create-vm --ip IP NAME --image debian-buster-scsi --ram 1 # SIZE in GiB --vcpu 1 --ip <IPV4> --disk 20 # SIZE in GiB --on g1 # short name of the host # ./migrate --help usage: migrate NAME DEST # ./info gizmo.sileht.net Domain gizmo.sileht.net is on g3 Interface Type Source Model MAC ------------------------------------------------------- tap249cbb03-b8 ethernet - virtio fa:16:3e:88:4d:0b Target Source ------------------------------------------------ hda ssds/97c925e4-9f3e-4b92-96b9-6190e0fc4b88_disk.config sda ssds/volume-0973c10d-79c8-4906-9f9c-9ba33118203d sdb disks/volume-3657e47a-07d8-4052-8dcf-cb7a0fb19b20 <config> <tap name="tap249cbb03-b8">91.224.149.214</tap> </config>
Reboot d'une VM¶
Savoir de quel hyperviseur dépend la VM
g1# ./tools/libvirt/where VMNAME.tetaneutral.net
Aller sur l'hyperviseur en question et arreter puis démarrer la VM (ici on considère qu'elle est plantée shutdown ne marche pas -> destroy)
ssh gN gN# virsh destroy VMNAME.tetaneutral.net gN# virsh start VMNAME.tetaneutral.net
Fontionnement¶
Les VM utilisent le mode ethernet de libvirt. En gros libvirt s'attends à trouver un tap tout près pour y accrocher la VM
Just avant le boot de la VM libvirt lance:
/etc/libvirt/hooks/qemu <VM_NAME> prepare begin
Et juste après l'arret de la VM libvirt lance:
/etc/libvirt/hooks/qemu <VM_NAME> release end
Le script /etc/libvirt/hooks/qemu de ttnn se trouve ici: https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster/revisions/master/entry/environments/production/manifests/files/openstack/libvirt-hooks-qemu
Ce script va lire les metadatas TTNN de <VM_NAME> (e.g: virsh metadata <VM_NAME> http://tetaneutral.net/)
$ virsh metadata ns2.tetaneutral.net http://tetaneutral.net/ <config> <network mode="routed"> <tap name="tapb0b4a106-d0">89.234.156.248</tap> <tap name="tapabababab-aa">89.234.156.45</tap> </network> </config>
Ensuite il va créé le tap et configurer les routes dessus avec les infos des metadata.
git¶
https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/openstack-tools
libvirt
Misc¶
Modifier la quantité de RAM ou le nombre de vCPU¶
NB: dans ces deux scripts, un dry-run est diponible en ajoutant "-n"
VM=xxx ./change-ram $VM 4
VM=xxx ./change-cpu $VM 2
Editer le disque d'une VM¶
Mode lecture seule (sans danger) :
VM=xxx virsh shutdown $VM virsh destroy $VM # si shutdown marche pas guestfish --ro -i -d $VM
Pour par exemple desactiver cloud-init qui peut bloquer le boot :
guestfish -i -d $VM ll /etc/cloud touch /etc/cloud/cloud-init.disabled exit
Voir la console graphique sans spice-html5:¶
Copier le script suivant 'ttnn-viewer' sur sa machine:
#!/bin/bash vm=$1 info=$(ssh g1.tetaneutral.net -p 2222 -l root -- "tools/libvirt/where $vm|cut -d' ' -f5") if [ x"${info}" == "x" ]; then echo "Error VM $vm not found" exit 1 fi hypervisor=${info}.tetaneutral.net spice_port=$(ssh ${hypervisor} -p 2222 -l root virsh domdisplay ${vm} | awk -F: '{print $3}') echo "$vm on $hypervisor port $spice_port" ssh -N $hypervisor -p 2222 -l root -L 5910:localhost:${spice_port} & pid=$! cleanup(){ kill $pid } trap cleanup EXIT sleep 2 remote-viewer spice://localhost:5910/
Puis
sudo apt-get install virt-viewer ./ttnn-viewer puppet.tetaeutral.net
Réinstallation/Réparation grub d'un VM¶
Récuperer l'id et l'hyperviseur de la VM
g1# ./tools/libvirt/info VMNAME.tetaneutral.net | grep UUID g1# ./tools/libvirt/where VMNAME.tetaneutral.net
Aller sur l'hyperviseur en question et arreter la VM (ici on considère qu'elle est plantée shutdown ne marche pas -> destroy)
ssh -p 2222 root@gN gN# virsh destroy VMNAME.tetaneutral.net
Bien attendre que la VM soit éteinte et taper (mettre l'UUID trouvé plus haut à la place de UUID)
gN# virt-customize -v -d UUID --run-command 'update-grub ; grub-install /dev/sda;'
Enfin, restart la VM
gN# virsh start VMNAME.tetaneutral.net