Outils pour utilisateurs

Outils du site


projets:vm-old-doc

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

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

Plus d'info sur Ganeti

projets/vm-old-doc.txt · Dernière modification : 2021/03/17 21:36 de daimrod