Notre infrastructure de VM est basée sur Ganeti, c'est un outil de gestion de machines virtuelles qui sont réunies au sein d'un cluster (une ou plusieurs machines physiques).
Le cluster Ganeti est composé de noeuds (ce sont des ordinateurs physiques avec un hyperviseur (Xen ou Kvm) installé dessus). Les VM sont crées sur le cluster. Une VM tourne sur un des noeuds du cluster.
Il est possible de déplacer une VM d'un noeud du cluster à un autre tout en la laissant tourner.
Dans un cluster, un noeud est élu Master. Lorsque l'on doit discuter avec le cluster, il faut se connecter à la machine maître, pour le moment il s'agit de Mutine. Ce master est l'unique noeud sur lequel des commandes gnt-* peuvent être exécutées. Si on utilise ces commandes sur les autres noeuds, Ganeti nous invite à nous connecter sur le master :)
____ |====| | | 89.234.176.129/28 __mutine__ __zephyr__ vm | |<-----------------------[_...__...°]<-----------------------[_...__...°] 89.234.176.1/28 |____| /89.234.176.2/28 10.10.30.0/32 | ____ / | |====| / | | | 89.234.176.13O/28 / | vm | |<-------------------/ | |____| | ____ | service vm : 89.234.176.128/27 |====| 89.234.176.131/28 ____dh____ 10.10.30.0/32 | | |<-----------------------[_...__...°]<----------------------------- vm | | /89.234.176.3/28 |____| / ____ / |====| / | | 89.234.176.132/28 / vm | |<------------------/ |____|
Les différentes étapes de création d'une VM :
Pour trouver l'IP de la nouvelle VM, consultez la page wiki Adressage dans la partie 'Adresses publiques' → 'VM (adhérents et services)'. Quand vous l'avez, inscrivez votre VM sur cette page.
Ensuite, les hyperviseurs doivent pouvoir résoudre un nom de machine, c'est à dire un nom = une IP
Pour les premières VM créées, on modifiait manuellement le fichier /etc/hosts sur les DEUX hyperviseurs, mais si les fichiers ne sont pas identiques ⇒ Ganeti hurle.
La bonne façon de faire est donc d'ajouter un enregistrement A/AAAA à la zone DNS faimaison.net, pour cela rendez-vous sur la page DNS du wiki.
→ Il faudrait mettre une convention en place : VM-01.faimaison.net IP, VM-02.faimaison.net etc.
gnt-instance add -s 10G -t drbd --net 0:ip=<adresse ip vm>,mode=routed,mac=generate -H kvm:boot_order=cdrom,cdrom_image_path=/srv/ganeti/isos/debian-8.3.0-amd64-netinst.iso -o debootstrap+default -n mutine.faimaison.net:dramm-hud.faimaison.net <nom-vm.faimaison.net > -s : espace disque -t : type de stockage pour le disque -- net : 0 = première interface réseau de la vm mode routé, on génère une nouvelle adresse mac -H : paramètre à passer à l'hyperviseur, on veut démarrer sur le CDrom CDrom dont l'ISO est celle d'une Debian Jessie -o : template de VM (à personnaliser à l'avenir) -n : nœuds primaires et secondaires sur lesquels la VM doit tourner -la vm : nom de la vm tel que déclaré dans la zone dns
gnt-instance add -s 10G --net 0:ip=<adresse ip vm>,mode=routed,mac=generate -o debootstrap+default -n mutine.faimaison.net:dramm-hud.faimaison.net <nom-vm.faimaison.net>
Après avoir lancé cette commande, notre VM est démarrée et boot sur notre ISO. On peut alors y accéder via VNC.
Sur le master :
gnt-instance list -o +network_port <nom_vm>
adduser <user>
su -l <user>
mkdir .ssh; chmod 700 .ssh
cd .ssh; nano authorized_keys; chmod 600 authorized_keys
Sur le poste client :
ssh <primary node> -L <vnc port>:localhost:<vnc port>
On peut maintenant arrêter la VM et changer le bootorder.
gnt-instance shutdown <nom-vm.faimaison.net>
gnt-instance modify -H boot_order=disk <nom-vm.faimaison.net>
gnt-instance modify -H boot_order=cdrom <nom-vm.faimaison.net>
gnt-instance startup <nom-vm.faimaison.net>
ssh-copy-id -i ~/.ssh/votre_clef votre_user@votre_IP
Host nom_de_la_machine HostName nom-vm.faimaison.net User votre_user IdentityFile ~/.ssh/votre_clef
ssh nom_de_la_machine
# Change to no to disable tunnelled clear text passwords PasswordAuthentication no
On peut afficher le nœud sur lequel une instance tourne de la façon suivante :
gnt-instance list <nom-vm>
La migration d'une vm sur un autre nœud se fait de la façon suivante :
gnt-instance migrate <nom-vm>
On peut préciser le nœud sur lequel migrer la vm de la façon suivante :
gnt-instance migrate -n <nœud-cible> <nom-vm>
Si on sait à l'avance que les certificats vont expirer:
gnt-cluster renew-crypto --new-cluster-certificate --new-node-certificates --new-rapi-certificate --new-spice-certificate --reason="renew expiring certificate"
Si on s'en rend compte trop tard…
# Sur mutine.faimaison.net (master) chmod 0600 /var/lib/ganeti/server.pem && openssl req -new -newkey rsa:1024 -days 1825 -nodes \ -x509 -keyout /var/lib/ganeti/server.pem \ -out /var/lib/ganeti/server.pem -batch && chmod 0400 /var/lib/ganeti/server.pem # Copie du certs sur les autres nodes du cluster scp /var/lib/ganeti/server.pem dramm-hud.faimaison.net:/var/lib/ganeti/server.pem ssh dramm-hud.faimaison.net chmod 0400 /var/lib/ganeti/server.pem # Relancer ganeti sur les autres nodes du cluster ssh dramm-hud.faimaison.net /etc/init.d/ganeti restart # Relance ganeti sur le master /etc/init.d/ganeti restart