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 :
- Récupérer le port VNC de la VM :
gnt-instance list -o +network_port <nom_vm>
- Récupérer le Primary node (c'est le node où tourne la VM)
- Ajouter un compte utilisateur avec une clé ssh (pour le tunnel SSH pour l'accès VNC)
- Se connecter le primary node en ssh
- Ajouter l'utilisateur
adduser <user>
- Se connecter avec cet utilisateur
su -l <user>
- Créer le dossier ~/.ssh et appliquer les droits
mkdir .ssh; chmod 700 .ssh
- Créer le fichier authorized_keys, coller la clé, et appliquer les droits
cd .ssh; nano authorized_keys; chmod 600 authorized_keys
Sur le poste client :
- Installer un client VNC (remina, gvncviewer, Gnome VNC, …)
- Faire un transfert de port TCP via un tunnel SSH, pour cela il y a 2 méthodes :
- Se connecter en SSH sur le primary node et forwarder le numéro de port VNC récupéré avec la commande suivante :
ssh <primary node> -L <vnc port>:localhost:<vnc port>
- Se connecter sur localhost:<vnc port> avec un client VNC comme Remmina qui peut faire le tunnel via l'onglet SSH, il faut juste penser à activer le “tunnel via loopback address”
- Effectuer l'installation via VNC
- Pour la configuration IP, il n'y a pas de serveur DHCP, il faut donc configurer manuellement : utiliser l'IP et le masque (le /quelque-chose) choisit.
- Pour la gateway, garder la valeur par défaut.
- Pour les serveurs DNS, vous pouvez utiliser les notres (89.234.176.137, 91.224.149.120) ou ceux de LDN et FDN (80.67.188.188, 80.67.169.12) https://www.faimaison.net/category/actualites2.html#methode-1-ignorer-les-mensonges-de-son-fai
Après l'installation
Sur le master
On peut maintenant arrêter la VM et changer le bootorder.
- Arrêter la VM :
gnt-instance shutdown <nom-vm.faimaison.net>
- Changer le périphérique sur lequel la VM démarrera par défaut (pour booter sur le disque donc) :
gnt-instance modify -H boot_order=disk <nom-vm.faimaison.net>
- Pour booter à nouveau sur le cdrom :
gnt-instance modify -H boot_order=cdrom <nom-vm.faimaison.net>
- Relancer la VM :
gnt-instance startup <nom-vm.faimaison.net>
Sur le poste client
- Installer openssh-server (soit via le package manager soit directement lors de l'installation de l'OS comme sous Debian)
- Ajouter sa clé SSH :
ssh-copy-id -i ~/.ssh/votre_clef votre_user@votre_IP
- Configurer le fichier ~/.ssh/config en rajoutant les lignes :
Host nom_de_la_machine HostName nom-vm.faimaison.net User votre_user IdentityFile ~/.ssh/votre_clef
- Se connecter à votre VM via la clef :
ssh nom_de_la_machine
- Sur votre VM, modifier le fichier /etc/ssh/sshd_config et changer la valeur suivante pour supprimer l’authentification par mot de passe :
# Change to no to disable tunnelled clear text passwords PasswordAuthentication no
Procédure Administrative
- Demander la clé SSH de l'adhérent qui souhaite une VM
- Envoyer un petit mail sur adminsys@ pour les prévenir de la création de la nouvelle VM (avec son nom + son IP)
- Prévenir le bureau@ pour demander la création d'une entrée dans Coin
- Pointer vers https://transparence.faimaison.net/ pour que l'adhérent puisse décider de sa contribution libre
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