======Machines virtuelles====== =====Présentation générale===== Notre infrastructure de VM est basée sur **[[http://www.ganeti.org/|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 [[adminsys:reseau:adressage|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 [[reseau:dns|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=,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 -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=,mode=routed,mac=generate -o debootstrap+default -n mutine.faimaison.net:dramm-hud.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 * 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 * Se connecter avec cet utilisateur su -l * 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 -L :localhost: * Se connecter sur localhost: 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 * 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 * Pour booter à nouveau sur le cdrom : gnt-instance modify -H boot_order=cdrom * Relancer la VM : gnt-instance startup ===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 La migration d'une vm sur un autre nœud se fait de la façon suivante : gnt-instance migrate On peut préciser le nœud sur lequel migrer la vm de la façon suivante : gnt-instance migrate -n =====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 * https://wikitech.wikimedia.org/wiki/Ganeti#Cluster_certificates * https://docs.ganeti.org/docs/ganeti/2.12/html/cluster-keys-replacement.html =====Plus d'info sur Ganeti=====