Table des matières

Machines virtuelles

Présentation générale

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 |    |<------------------/
       |____|

Comment créer une VM ?

Les différentes étapes de création d'une VM :

Définir le nom de la VM et son IP

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.

Modifier le fichier de zone DNS

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.

Créer la VM sur le cluster

La commande de création de VM

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

La commande simplifiée

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.

Comment accéder à sa VM ?

À l'installation -> via VNC

Sur le master :

Sur le poste client :

Après l'installation

Sur le master

On peut maintenant arrêter la VM et changer le bootorder.

Sur le poste client

Procédure Administrative

Comment migrer une VM d'un noeud à l'autre ?

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>

Renouvellement des certificats

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

Plus d'info sur Ganeti