Outils pour utilisateurs

Outils du site


projets:vm

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

FAQ

Puis-je avoir plus de RAM sur ma VM ?

Techniquement oui. En pratique, les machines physiques actuelles sont déjà presque remplies. Pour avoir plus de RAM, venez nous aider à monter la nouvelle infrastructure de virtualisation :-)

Puis-je avoir plus d'espace disque ?

Oui. Il est également possible d'agrandir le disque de votre VM une fois que celle-ci est installée.

Puis-je avoir plus de puissance CPU ?

Techniquement oui. En pratique, les machines physiques actuelles sont déjà presque remplies. Pour avoir plus de CPU, venez nous aider à monter la nouvelle infrastructure de virtualisation :-)

Puis-je chiffrer ma VM ?

À la création, votre VM démarrera sur l'iso de votre choix (par défaut sur une debian stretch). C'est vous qui réalisez l'installation du début à la fin. Vous décidez donc de chiffrer ou non votre VM.

Puis-je installer <distribution X> sur ma VM ?

Oui. Votre VM démarrera sur l'iso de votre choix (par défaut sur une debian stretch).

Dans le cas où vous souhaiteriez installer une autre ISO que celle par défaut, c’est à vous de spécifier, et idéalement de fournir, à l’administrateur l’ISO choisie pendant la phase de demande de création de VM (voir ci-dessous).

Voici les ISO présentes actuellement :

$ ls /srv/ganeti/isos/
debian-8.3.0-amd64-netinst.iso # debian jessie
debian-9.0.0-amd64-netinst.iso # debian stretch
install60.iso                  # OpenBSD 6.0
yunohost-live_wheezy.iso       # YUNOHOST wheezy

Procédure de création de VM

Procédure pour l'utilisateur

Les étapes qui suivent sont à réaliser par l'utilisateur qui fait la demande de création d'une machine virtuelle (VM).

Demander la création de sa VM

Vous commencez par envoyer une demande de création de VM sur bureau@ en joignant une clé SSH publique (cf accès SSH à votre vm pour la création d'une clé SSH).

Si vous êtes bien adhérent le bureau@ transmettra votre demande aux administrateurs de FAImaison. Un administrateur vous communiquera les informations suivantes :

  • REF_ABO la référence de votre abonnement (p. ex REF-HOST-VM-42)
  • IP_VM : l'adresse IP de votre VM (p. ex 89.234.176.130)
  • NOM_VM : le nom de votre VM (p. ex. REF-HOST-VM-42.faimaison.net)
  • HYP : le nom ou l'adresse IP de l'hyperviseur de votre VM (p. ex 89.234.176.131 ou mutine.faimaison.net)
  • VNC_PORT :: le port VNC de votre VM (p. ex 11666)

Une fois ces informations reçues, vous êtes prêt à installer votre VM.

Installer et configurer sa VM

Pour accéder à votre VM, vous devez établir un pont SSH entre votre ordinateur et votre VM puis utiliser le protocole VNC.

  1. Ouvrer un terminal
  2. Lancer la commande suivante, en remplacant les variables HYP, NOM_VM et VNC_PORT par les valeurs transmises par l'adminsys
    ssh -i /chemin-vers-votre-cle-privee -N -L VNC_PORT:localhost:VNC_PORT NOM_VM@HYP

    Attention, au sein de la commande précédente, NOM_VM serait par exemple ref-host-vm-42

  3. Lancer le client VNC de votre choix avec en serveur localhost et en port VNC_PORT.

Si tout se passe bien, vous devriez maintenant voir l'écran d'installation de votre VM (une debian).

Vous pouvez maintenant procéder à l'installation de votre VM. Le client Vinagre , inclus sur Debian et Ubuntu fonctionne très bien. Petites astuces :

  • 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) choisis.
  • Pour la gateway, garder la valeur par défaut.
  • Pour les serveurs DNS, vous pouvez utiliser 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
  • Contrairement à ce qui est suggéré par défaut lors de l’installation Debian, il n’est pas utile, et moins gourmand en espace disque, d’installer les paquets correspondants aux environnements graphiques puisque nous sommes sur un serveur
  • Si vous chiffrez votre disque (FDE), il est conseillé de mettre une passphrase simple dans une premier temps, puis de la changer une fois que dropbear est installé. En effet, si vous devez déchiffrer votre machine via VNC, sachez que le support du clavier est loin d'être parfait : vous serez peut-être en qwerty, et la touche Alt Gr ne fonctionnera peut-être pas. En attendant mieux…

Redémarrage de votre VM

Maintenant que votre VM est correctement installée, vous devez envoyer un mail à adminsys@ en précisant votre REF_ABO pour demander à ce que l'on configure votre VM pour qu'elle démarre sur votre disque au lieu de l'ISO d'installation.

Finalisation et accès SSH à votre VM

Une fois que l'adminsys a configuré votre VM pour qu'elle boot sur votre disque et l'a redémarrée, vous pouvez vous y connecter de la même façon que pour l'installation (via ssh+VNC).

Comme ce n'est pas très pratique de se connecter par VNC en permanence, nous allons maintenant configurer votre VM pour que vous puissiez y accéder par SSH uniquement.

  1. Installer le paquet openssh-server sur votre VM.
  2. Si besoin, générer une clé SSH sur votre PC avec la commande suivante :
    ssh-keygen -f ~/.ssh/votre_cle_ssh
  3. Copier votre clé SSH depuis votre PC sur votre VM à l'aide de la commande suivante :
    ssh-copy-id -i ~/.ssh/votre_cle_ssh.pub REF_ABO@IP_VM
  4. Vous pouvez maintenant vous connecter à votre VM avec la commande :
    ssh -i ~/.ssh/votre_cle_ssh REF_ABO@IP_VM

Si la connexion fonctionne correctement vous pouvez rajouter la configuration suivante au fichier ~/.ssh/config (s'il n'existe pas, crée le).

Host ma-vm
  Hostname IP_VM
  Username REF_ABO
  Port 22
  IdentifyFile ~/.ssh/votre_cle_ssh

Les étapes suivantes sont optionnelles mais sont des mesures de sécurité recommandées :

Désactiver l'authentification par phrase de passe

Sur votre VM, éditez le fichier /etc/ssh/sshd_config (vous devez être root), chercher les options PasswordAuthentication et PermitEmptyPasswords et les désactiver.

 Le fichier doit maintenant contenir les lignes suivantes :  
PasswordAuthentication no
PermitEmptyPasswords no

Protection contre les attaques de type bruteforce

Installer fail2ban pour bloquer des attaques de type bruteforce.

apt install fail2ban

Conclusion

Et voilà, vous pouvez maintenant accéder à votre VM en SSH et n'avez plus besoin de l'accès par VNC. Cet accès reste présent et vous pourrez l'utiliser pour débugger votre machine si vous cassez quelque chose :)

Procédure pour le bureau

Lorsqu'une demande de VM arrive sur la liste bureau@ il faut :

  1. vérifier que la personne est adhérente, sinon, lui proposer d'adhérer à l'association avant de procéder à la suite
  2. vérifier que l'adhérent à joint une clé SSH publique, sinon lui demander de le faire
  3. créer un abonnement de type VM dans COIN lié au compte de l'adhérent
  4. demander la création d'une VM aux adminsys en leurs transmettant :
    • la référence COIN de l'abonnement
    • la clé SSH de l'adhérent
    • l'email de l'adhérent
  5. Une fois qu'un adminsys à confirmé la création de la VM, il faut transmettre à l'adhérent :

Procédure pour les adminsys

Quand le bureau@ transmet une demande de création de VM avec les informations suivantes :

  • référence COIN de l'adhérent (REF_ABO pour la suite)
  • la clé SSH publique de l'adhérent
  • le mail de l'adhérent

NB: Toutes les commandes ganeti sont a exécutées sur l'hyperviseur maître (mutine.faimaison.net).

Sélectionner l'IP et l'hyperviseur pour la VM

  1. Sélectionner une ip (IP_VM pour la suite) de disponible dans le sous-réseau dédié aux VM et mettre à jour la page du wiki adressage
  2. Ajouter un nouvel enregistrement A pour faire pointer le nom de la VM vers l'IP.
    REF_ABO.faimaison.net	A	IP
  3. Choisir l'hyperviseur pour la VM avec le moins de VM pour équilibrer la charge:
    gnt-instance list --no-headers | sort -k 4

Création de la VM

Créer la VM sur l'hyperviseur choisi (PRIMARY_NODE pour la suite, l'autre hyperviseur étant SECONDARY_NODE)

gnt-instance add -s 10G --net 0:ip=IP_VM,mode=routed,mac=generate -o debootstrap+default --node PRIMARY_NODE:SECONDARY_NODE REF_ABO.faimaison.net

Créer le compte de l'adhérent pour l'accès VNC

  1. Récupérer le port VNC (VNC_PORT pour la suite) de la VM :
    gnt-instance list -o +network_port REF_ABO
  2. Créer un compte utilisateur sur les deux hyperviseurs :
    adduser --gecos '' --gid `getent group ref-host-vm | cut -d: -f3` --disabled-password --shell /bin/false REF_ABO
  3. Ajouter dans la configuration sshd sur les deux hyperviseurs
Match User REF_ABO
      Banner /home/REF_ABO/banner
      PermitOpen localhost:VNC_PORT
Match all                       # end Match group block      
  1. Copier la clé SSH de l'utilisateur sur les deux hyperviseurs dans /home/REF_ABO/.ssh/authorized_keys
  2. Créer sur les deux hyperviseurs un fichier /home/REF_ABO/banner contenant :
 Hyperviseur hébergeant votre VM : PRIMARY_NODE
 Port VNC pour accéder à votre VM : VNC_PORT

 Utilisez la commande suivante pour créer un tunnel entre votre ordinateur et le port VNC de votre VM avec la commande :

     ssh -N -L VNC_PORT:localhost:VNC_PORT PRIMARY_NODE

 Configurez votre client VNC pour qu'il se connecte sur l'hôte (/host/) localhost et sur le port VNC_PORT.
 Par exemple :

     vncviewer localhost:VNC_PORT
  1. Recharger la configuration de SSHD (en vérifiant la conf avant) :
    sshd -t && systemctl reload ssh

Prévenir l'adhérent

Prévenir l'adhérent que la VM est prête à être installée et lui donner les informations suivantes :

  • PRIMARY_NODE : l'hyerviseur sur lequel tourne sa VM
  • VNC_PORT : le port VNC pour accéder à sa VM
  • IP_VM : l'IP de sa VM
  • REF_ABO.faimaison.net : l'enregistrement DNS FAImaison de sa VM

Faire booter la VM sur le disque

Quand l'adhérent aura terminé son installation, il faudra redémarrer sa VM en changeant l'ordre de boot pour qu'elle boot sur le disque plutôt que l'ISO.

  • On éteind la VM :
    gnt-instance shutdown REF-ABO
  • On modifie l'option de démarrage
    gnt-instance modify -H boot_order=disk REF_ABO
  • On relance la VM
    gnt-instance startup REF_ABO

Autres opérations

Migration de VM entre les hyperviseurs

La migration d'une VM d'un hyperviseur à l'autre se fait de la façon suivante :

  1. Migrer la VM sur un hyperviseur (identifié par NEW_NODE) :
    gnt-instance migrate -n NEW_NODE
  2. Si la VM migrée est la VM d'un adhérent, c'est à dire que la VM est nommée REF-HOST-VM-XX, il faut mettre à jour le PRIMARY_NODE dans /home/ref-host-vm-xx/banner.

Configuration des hyperviseurs

Pour configurer les hyperviseurs :

  1. Créer le groupe ref-host-vm :
    addgroup ref-host-vm
  2. Rajouter sur les deux hyperviseurs et à la fin du fichier /etc/ssh/sshd_config :
Match group ref-host-vm
      AllowAgentForwarding no
      AllowStreamLocalForwarding no
      X11Forwarding no
      PermitTTY no
      PermitTunnel no
      PermitUserRC no
      PermitOpen none
Match all                       # end Match group block

Adminstration de l'hyperviseur

Comment augmenter l'espace disque d'une VM sous ganeti ?

La procédure est la suivante :

  1. Augmenter le disque vu par la VM depuis l'hyperviseur maître (par l'administrateur des hyperviseurs).
  2. Redémarrer la VM depuis l'hyperviseur (par l'administrateur des hyperviseurs, il faut un reboot depuis l'hyperviseur pour que la configuration soit prise en compte).
  3. Aggrandir/Modifier la ou les partitions de la VM (par l'administrateur de la VM).

Augmenter le disque de la VM

La syntaxe générale de grow-dist est la suivante :

gnt-instance grow-disk {instance} {disk} {amount}
  • {instance} est le nom de l'instance (p. ex. testvm.faimaison.net)
  • {disk} est l'identifiant du disque (0, sauf exception)
  • {amount} est le montant dont doit être augmenter le disque (p. ex. 10G)

On peut donc utiliser la commande suivante pour augmenter le disque de la VM testvm.faimaison.net de 10G.

gnt-instance grow-disk testvm.faimaison.net 0 10G

Agrandir la parition d'une VM

Une fois le disque de la VM agrandi et la VM redémarrée depuis l'hyperviseur, la procédure pour agrandir une partition est la suivante :

  1. Agrandir les partitions sur le disque avec fdisk(8)/cfdisk(8)/parted(8).
  2. Dans le cas d'une partition chiffrée avec LUKS, redimensionner la partition avec cryptsetup resize.
  3. Dans le cas d'une partition LVM, redimensionner le volume physique avec pvresize puis redimensionner le volume logique avec lvextend.
  4. Dans le cas d'une partition de type ext3/4, redimensionner la partition avec resize2fs ou en spécifiant l'option –resizefs à lvextend.
  5. Dans le cas d'une partition de type swap, recréer le système de fichier swap avec mkswap.

Comment créer et restaurer un snapshot d'une VM sous ganeti ?

Nous utilisons ganeti sur deux machines (les noeuds). Les VM utilisent comme disque des volumes logiques LVM créés sur le disque des hyperviseurs. Ces volumes logiques sont synchroniser entre les deux noeuds par DRBD.

Le noeud ganeti sur lequel tourne une VM (mutine ou dramm-hud) est considéré comme le noeud primaire pour DRBD. Cela est différent du noeud ganeti maître qui est le noeud sur lequel les commandes ganeti doivent être exécutées.

Il est possible de créer un snapshot LVM du disque d'une VM sur le noeud DRBD primaire. Ce snapshot ne sera pas synchronisé par DRBD.

Les commandes ganeti (gnt-*) doivent être exécutée sur le noeud ganeti maître. Les commandes LVM (lv*) doivent être exécutée sur le noeud DRBD primaire.

  1. Identifier le volume logique d'une VM :
    gnt-instance info VM | grep _data
    -> /dev/xenvg/VM_DISK_data
  2. Pour plus de sécurité, il est recommandé de faire le snapshot de la VM éteinte :
    gnt-instance shutdown VM
  3. Créer le snapshot :
    lvcreate -L SIZE -s -n VM_snapshot /dev/xenvg/VM_DISK_data

    (p. ex. SIZE = 1G)

  4. Réaliser les opérations désirées (upgrade, etc.).
  5. Si toutes les opérations ont été réalisées sans problème, on peut supprimer le snapshot :
    lvremove /dev/xenvg/VM_snapshot

Dans le cas où un problème s'est produit, on peut restaurer le snapshot.

  1. Éteindre la VM :
    gnt-instance shutdown VM
  2. Restaurer le snapshot :
    lvchange -an /dev/xenvg/VM_DISK_data
    lvconvert --merge /dev/xenvg/VM_snapshot
    lvchange -ay /dev/xenvg/VM_DISK_data
  3. Redémarrer la VM et espérer que tout s'est bien passé :-) :
    gnt-instance start VM
projets/vm.txt · Dernière modification: 2018/04/10 14:38 par cequejevois