Virtualisation

De Wiki LDN
Aller à : navigation, rechercher
Voir aussi: ARN / LDN - Ipmi

Virtualisation

Puppet labs 150.png Service : kvm (See: todo)

Classes : libvirt.

Params/Files : ..

Notes: ..

Nous utilisons KVM sur la machine services (89.234.141.138) couplé à libvirt et lvm.

Hyperviseur

Installation

Installer les paquets :

Terminal.png services:
apt-get install kvm libvirt-bin virtinst

Décommenter/adapter la ligne dans le ficher /etc/inittab :

T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100

Réseau

La topologie de communication entre la machine Services et Router respecte ce schéma de documentation :

Infra-netns.png

Netns

Une machine virtuelle peut être de 4 types différents, qui correspondent chacun à un netns particulier :

  • Machine d'infra ARN (netns arn)
  • Machine d'infra LDN (netns ldn)
  • VPS pour un adhérent ARN (netns vpsarn)
  • VPS pour un adhérent LDN (netns vpsldn)

Gestion des machines virtuelles

Ajouter

Options

Création de la machine, en root :

Terminal.png services:
vm-create.sh -a <netns> -n <vm-name> -i "<nets-v4>" -j "<nets-v6>" -h <quota-disk-in-GB> -r <quota-ram-in-MB> -k </path/to/pub_ssh_key> -d <distrib_name> -s -p

Explication des options :

  • netns : doit correspondre à l'un des netns disponibles listés ci-dessus selon le type de machine ;
  • vm-name : nom de la machine à créer avec 16 caractères alpha-numériques (ainsi que le tiret et l'underscore) maximum. On ne précise pas le nom du netns ici : « -a vpsarn -n vpsarn-glucas » est incorrect, « -a vpsarn -n glucas » suffit ;
  • nets-v4 : liste des adresses IPv4 attribués à la future machine avec leur masque et séparés par des espaces s'il y en a plusieurs (ex. "1.2.3.4/32 1.2.3.5/32") ;
  • nets-v6 : idem que nets-v4 mais avec des adresses IPv6 (ex. "a:b:c::1/64 a:b:d::1/64"), et le masque de la première adresse doit obligatoirement être un multiple de 4 (et les autres aussi parce que sinon c'est drôlement crade) plus petit ou égal à 64 ;
  • -s donne la possibilité à l'utilisateur de se connecter sur le port série en ssh (une clé ssh publique doit être donnée)
  • -k /path/to/pub_ssh_key chemin vers un clé ssh publique (une seule clé doit être mise dans le fichier). Paramètre obligatoire (on invite les abonnés à faire de l'auth' par clé uniquement).
  • -p donne à l'utilisateur plus de choix à l'installation (partitionning, language, locales...)
  • distrib_name quelle distribution ? (pour l'instant: debian, gentoo) par défaut: debian.

Exemple sans donner de console à l'utilisateur

Exemple de création d'un VPS pour John Doe qui est tenté par l'hébergement en asso chez ARN, avec 10Go d'espace disque et 256Mo de RAM :

Terminal.png services:
vm-create.sh -a vpsarn -n jdoe -i "89.234.141.96/32" -j "2a00:5881:8110:100::1/64" -h 10 -r 256 -k glucas.pub

Une fois que l'installation est terminée, le script propose de rentrer dans la machine en mode console. Il suffit d'indiquer l'utilisateur root sans mot de passe.. Non, le compte root est verrouillé (passwd -l en postinstall) et Debian-Installer n'accepte pas un mot de passe vide. Pour se connecter à la VM : ssh + clé de l'utilisateur (si -k a été utilisé) ou ssh + clé d'install (/etc/libvirt/confinstallvps/ ;) ).

Warning.png Attention

Si la machine change de conf réseau par la suite (ajout/modification/suppression d'une IP), il faut bien penser à mettre à jour le fichier /etc/libvirt/<netns>/<vm-name>.conf à la main sur l'hyperviseur pour préserver la cohérence des confs. Cette tâche ne peut pas être automatisée parce que nous ne souhaitons pas imposer de clé SSH par défaut sur les machines.

Exemple en donnant une console à l'utilisateur

Exemple de création d'un super VPS qui sera hébergé chez LDN, avec une clé ssh en paramètre et la possibilité pour l'utilisateur de se connecter en serial over ssh. Pour ce genre d'installation, qui peut prendre un certain temps, il vaut mieux lancer la commande avec un nohup et rediriger la sortie vers un fichier de log qui peut être consulté par la suite.

Terminal.png services:
nohup vm-create.sh -a ldn -n monsupervps -i "89.234.141.90/32" -j "2a00:5881:8100:10fd::1/64" -p -s -h 100 -r 4096 -k /chemin/de/ma/clé/ssh > /var/log/libvirt/qemu/arn-monsupervps-install.log &

L'utilisateur pourra alors se connecter avec la commande

Terminal.png laptop:
ssh serialproxy@services.ldn-fai.net -p 2222

Renommer et/ou changer de netns

Renommage et/ou déplacement d'une machine, en root :

Terminal.png services:
vm-move.sh -a <netns> -A <new-netns> -n <vm-name> -N <new-vm-name>

Les contraintes sur les arguments du nouveau nom et/ou netns sont les mêmes que pour vm-create.sh.

Spécificités :

  • les arguments netns & new-netns ainsi que vm-name & new-vm-name peuvent être identiques (changement uniquement de nom ou de netns) ;
  • penser à mettre à jour le hostname de la machine si le nom change ;
  • penser à mettre à jour la passerelle IPv4 dans le fichier interfaces de la machine si le netns change, ainsi que les IPv4 et IPv6 pour les changer de range (il faudra alors également mettre à jour le fichier /etc/libvirt/<netns>/<vm-name>.conf sur l'hyperviseur).

Les mises à jour de hostname et de gateway ne peuvent pas être automatisées parce que nous ne souhaitons pas imposer de clé SSH par défaut sur les machines.

Exemple avec John Doe qui se casse de ARN pour aller chez LDN parce que c'est vachement mieux, et qui a également retrouvé ses origines (il s'appelle en fait Martin Smith) :

Terminal.png services:
vm-move.sh -a vpsarn -A vpsldn -n jdoe -N msmith

Supprimer

Suppression d'une machine, en root :

Terminal.png services:
vm-destroy.sh -a <netns> -n <vm-name>

Exemple de suppression du VPS de cette enflure de Martin Smith (adhérent LDN) qui trouve finalement que y'a pas mieux que OVH :

Terminal.png services:
vm-destroy.sh -a vpsldn -n msmith

Utilisation des machines

Lister les machines

Terminal.png services:
virsh list --all

Démarrer

Terminal.png services:
virsh start <netns>-<vm-name>

Se connecter via une console

Terminal.png services:
virsh console <netns>-<vm-name>

Redémarrer

Terminal.png services:
virsh reboot <netns>-<vm-name>

Éteindre

Terminal.png services:
virsh shutdown <netns>-<vm-name>

Cloner

TODO : Johndescs, créer un script vm-clone.sh pour que ça se fasse bien avec nos règles ?

Créer un nouveau volume LVM comme précédemment, puis adapter :

virt-clone --original vm01 --name vm02 --file /dev/mapper/services-vm02

Pour renommer la machine par la suite :

vim /etc/hosts
vim /etc/hostname
vgrename vm01 vm02
vim /etc/fstab
update-grub (pour le root=)
vim /etc/initramfs-tools/conf.d/resume (pour la partition swap d'hibernation)
update-initramfs -u

gestion des LV des VPS

Remonter un lv sur le Dom0 services

Refaire la table des partitions avec le VG d'un KVM

Terminal.png services:
kpartx -av /dev/services/arn-nomlv

Faire apparaitre tous les lv du vg précédent

Terminal.png services:
vgchange -a y nomvg

Monter le lv :

Terminal.png services:
mount /dev/nomlvkvm/nomlvlxc /mnt

Démonter le lv

Terminal.png services:
umount /mnt
Terminal.png services:
vgchange -a n nomlvkvm
Terminal.png services:
kpartx -dv /dev/services/arn-nomlvkvm

Augmenter le VG d'un VPS

Il vaut mieux que la VM soit éteinte, puis:

Terminal.png services:
lvresize -L+10000 /dev/services/arn-nomlvkvm

Redémarrer la VM.

Documentation