Projet

Général

Profil

Automatisation

Dans le cas de l'utilisation d'un serveur Hapy, l'utilisateur doit créer ses machines virtuelles manuellement comme expliqué dans un article de blog.

L'idée est de pouvoir proposer une automatisation de ce type de déploiement.

À la suite de l'étude faite par Cadoles :

  • Nous imposons l'utilisation d'un Zéphir
  • Les utilisateurs téléchargerons des images pré-crées et distribuées par un marketplace à installer nous même
  • Nous ne proposons pas de modèle d'infrastructure (Amon + Scribe, Amon + Seth AD + Seth filer, ...) (l'idée serait à travailler plus tard)
  • Nous proposerons ultérieurement un outillage pour que les utilisateurs puissent créer leurs propres images (l’outillage Cadoles peut être une solution à ce propos)

Pré requis pour utiliser cette fonctionnalité

  • Avoir un Zéphir pour manager les Hâpy et les VM installées sur ces Hâpy
  • Avoir au moins un Hâpy instancié et configuré.
  • l'accès vers le dépôt des images Eole/Hâpy doit être possible (proxy,...) (et le dépot préparé)
  • Les images devront être Cloudifiées (cloud-init ou one-context). Voir #32118
  • Les IP des différents modules EOLE seront obligatoirement Statiques.

Exigences de fonctionnement

  • Toutes les VM managées utilisent des images persistantes
  • Toutes les VM sont enregistrées sur Zéphir
  • Si la VM existe déjà sur l'Hapy, on ne la recrée pas (attention: seul le template peut être actualisé)

Cas d’usage

Nous partons du principe qu’un ensemble d’établissement partagent les mêmes caractéristiques :

  • même topologie réseau: internet, admin, pédago et dmz
  • même caractéristiques de machine virtuelle (par exemple tous les amons ont la même quantité de RAM, etc)

Mise en place d’une infrastructure depuis 0

Le processus global se résume ainsi :

  1. Sur le serveur Zéphir
    1. Créer une variante Hâpy pour pré-définir la liste des réseaux virtuels (les adresses IP et autres devront être remplies à la main lors de la configuration de chaque Hâpy)
    2. Créer une variante pour Amon afin de définir les paramètres communs de machines virtuelles (RAM, taille de disque, etc)
    3. Créer une variante pour Scribe afin de définir les paramètres communs de machines virtuelles (RAM, taille de disque, etc)
    4. Pour chaque établissement
      1. Le créer s’il n’existe pas
      2. Créer le serveur Amon de la bonne variante et finir sa configuration
      3. Créer le serveur Scribe de la bonne variante et finir sa configuration
      4. Créer le serveur Hâpy de la bonne variante et finir sa configuration avec notamment la liste des serveurs créés précédemment à déployer automatiquement
  2. Dans chaque établissement
    1. Installer physiquement le serveur Hâpy
    2. Installer le module EOLE Hâpy
    3. Enregistrer le serveur Hâpy sur Zéphir
    4. Appliquer la configuration en exécutant la commande instance

Le déploiement des serveurs de l’établissement devrait se faire automatiquement sans autre intervention humaine mais il faut gérer les inscriptions Zéphir.

Ajout d’un nouveau serveur à l’établissement

Nous allons ajouter un serveur Eolebase à l’infrastructure existente.

Le processus global se résume ainsi :

  1. Sur le serveur Zéphir
    1. Créer une variante pour Eolebase afin de définir les paramètres communs de machines virtuelles (RAM, taille de disque, etc)
    2. Pour chaque établissement
      1. Créer le serveur Eolebase de la bonne variante et finir sa configuration
      2. Éditer la configuration du serveur Hâpy et ajouter l’identifiant du serveur Eolebase à la liste des serveurs à déployer automatiquement
      3. Programmer l’envoie de la configuration du serveur Hâpy
  2. Sur chaque serveur Hâpy
    1. S’assurer que la configuration est récuppérer en exécutant la commande synchro_zephir
    2. Appliquer la configuration en exécutant la commande reconfigure

Le déploiement du nouveau serveur de l’établissement doit se faire automatiquement sans autre intervention humaine.

NB: L’application de la configuration manuellement sur chaque serveur Hâpy peut être remplacé par l’exécution automatique de la commande reconfigure lors de l’envoie de la configuration.

Comment fonctionne l'automatisation

Il faut créer la configuration des VM dans Zéphir (dont les caractéristiques de la VM)

Voir #32117

(si le paquet eole-modele-vm n'est pas installé, faire apt-eole install eole-modele-vm)

  • Créer le paquet eole-modele-vm
  • Créer le dicos avec une famille machine_virtuelle contenant les variables de caractéristique de machine virtuelle
    • variable activer_modele_vm à non par défaut
    • vm_marketplace : nom du MarketPlace OpenNebula où récupérer l’image disque, par défaut EOLE
    • vm_app : nom de l’application au sens OpenNebula MarketPlace
    • vm_memory : taille de la mémoire en Go
    • vm_vcpu : nombre de CPU virtuels
    • Disques :
      • vm_disk_size : taille en Go du disque
    • Interfaces, en fonction de la valeur nombre_interfaces
      • vm_net_name0 nom du réseau hâpy associé à l’interface 0
      • vm_net_name1 nom du réseau hâpy associé à l’interface 1
      • vm_net_nameX nom du réseau hâpy associé à l’interface X

Ceci peut être fait lors de la création des variantes et la création des serveurs. Ce travail reste manuel.

DaD:
  • Je pense qu’au lieu d’avoir Disque OS il faudrait une liste ordonnée de disque (nom de l’image + taille de l’image + bootable ?)
  • En fait, si nous utilisons le marketPlace, les choses ne se passent pas du tout comme cela :
    • Récupérer l’identifiant (ID) de l’Apps (nécessite un nom d’APPS et un nom de marketPlace afin d’éviter les soucis de doublons)
      root@hapy:~# onemarketapp list -f MARKET="OpenNebula Public" | head -n 10
        ID NAME                                   VERSION  SIZE STAT TYPE  REGTIME MARKET     ZONE
       522 Service WordPress - KVM             5.1.3-6.0.    4G  rdy  img 04/01/21 OpenNebula    0
       521 Service GitLab CE - KVM             13.10.0-6.    4G  rdy  img 04/01/21 OpenNebula    0
       520 Service VNF                         6.0.0-1.20 1024M  rdy  img 04/01/21 OpenNebula    0
       519 Service AWS IoT Greengrass - KVM    1.10.2-6.0    4G  rdy  img 04/01/21 OpenNebula    0
       518 Service Virtual Router              6.0.0-1.20 1024M  rdy  img 04/01/21 OpenNebula    0
       517 Service Kubernetes 1.18 - KVM       1.18.18-6.    4G  rdy  img 04/15/21 OpenNebula    0
       516 Vrouter Alpine - vCenter            5.0.2-0.20  256M  rdy  img 11/21/18 OpenNebula    0
       515 Debian 10                           6.0.0-1.20    2G  rdy  img 04/01/21 OpenNebula    0
       514 Ubuntu 20.04                        6.0.0-1.20  2.2G  rdy  img 04/01/21 OpenNebula    0
      
    • Exporter l’Apps avec son identifiant, cela créé un ID de template et un ID d’image disque
      root@hapy:~# onemarketapp export 515 "My Debian 10" --datastore 101 
      IMAGE
          ID: 4
      VMTEMPLATE
          ID: 2
      
    • Modifier le template créé avec les caractéristiques récuppérées depuis Zéphir
      <!-- root@hapy:~# onetemplate show -x 2 -->
      <VMTEMPLATE>
        <ID>2</ID>
        <UID>0</UID>
        <GID>0</GID>
        <UNAME>oneadmin</UNAME>
        <GNAME>oneadmin</GNAME>
        <NAME>My Debian 10</NAME>
        <PERMISSIONS>
          <OWNER_U>1</OWNER_U>
          <OWNER_M>1</OWNER_M>
          <OWNER_A>0</OWNER_A>
          <GROUP_U>0</GROUP_U>
          <GROUP_M>0</GROUP_M>
          <GROUP_A>0</GROUP_A>
          <OTHER_U>0</OTHER_U>
          <OTHER_M>0</OTHER_M>
          <OTHER_A>0</OTHER_A>
        </PERMISSIONS>
        <REGTIME>1619083814</REGTIME>
        <TEMPLATE>
          <CONTEXT>
            <NETWORK><![CDATA[YES]]></NETWORK>
            <SSH_PUBLIC_KEY><![CDATA[$USER[SSH_PUBLIC_KEY]]]></SSH_PUBLIC_KEY>
          </CONTEXT>
          <CPU><![CDATA[1]]></CPU>
          <DISK>
            <IMAGE_ID><![CDATA[4]]></IMAGE_ID>
          </DISK>
          <GRAPHICS>
            <LISTEN><![CDATA[0.0.0.0]]></LISTEN>
            <TYPE><![CDATA[vnc]]></TYPE>
          </GRAPHICS>
          <INFO><![CDATA[Please do not use this VM Template for vCenter VMs. Refer to the documentation https://bit.ly/37NcJ0Y]]></INFO>
          <LOGO><![CDATA[images/logos/debian.png]]></LOGO>
          <LXD_SECURITY_PRIVILEGED><![CDATA[true]]></LXD_SECURITY_PRIVILEGED>
          <MEMORY><![CDATA[768]]></MEMORY>
          <OS>
            <ARCH><![CDATA[x86_64]]></ARCH>
          </OS>
          <SCHED_REQUIREMENTS><![CDATA[HYPERVISOR!="vcenter"]]></SCHED_REQUIREMENTS>
        </TEMPLATE>
      </VMTEMPLATE>
      

Configuration du serveur Hâpy

Voir #32118

  • Ajouter une variable activer_deploiement_automatique par défaut à non.
  • Ajouter une variable définissant la liste des serveurs à déployer :
    • Soit en récupérant la liste des serveurs Zéphirs du même établissement qui ont activer_modele_vm oui
    • Soit avec une liste statique ordonnée d’identifiants Zéphir de serveurs à déployer

Remarque: il n'y a pas de contrôle entre la liste des Interfaces déclarées sur Hapy et les Interfaces venant des configurations de VM.

Depuis Zéphir, appliquer la configuration sur le serveur Hâpy

  • La nouvelle configuration est déployé sur la machine Hapy
  • Le reconfigure est exécuté
  • les VM vont être installées, instanciées et prêtes à l'usage dans l'ordre de déclaration de la liste des VM

Procédure de déploiment des VMs sur Hâpy

La préparation du Hâpy aura été faite lors de son instance/reconfigure :
  • création des réseaux et assignation des interfaces
  • création des datastores
  • création des marketPlaces

Voir postservice : #32120, #32278
Voir diagnose : #32123

La procédure de déploiment des machines virtuelles sur Hâpy est faites par un script (par exemple eole-hapy-autodeploy-vms).

Ce script doit :

  1. Vérifier si le déploiement automatique est activé (activer_deploiement_automatique oui)
  2. récupérer la liste des serveurs à déployer
    1. Récuppérer la configuration des serveur
    2. Vérifier la cohérence des informations Hapy/VMs. Si échec, alors on s'arrête en erreur
      1. Vérifier que les noms de réseaux déclarés pour les VMs existent sur Hâpy
      2. Vérifier que la quantité de RAM du Hâpy est supérieure à la somme des quantités de RAM des VMs
  3. Pour chaque serveur
    1. Créer/mettre à jour un FILE dans hapy pour exposer la configuration à l’interieur de la VM
    2. Télécharger l’application depuis le marketPlace (cela créé une image et un template de base)
    3. Créer un modèle de VM à partir de l’apps téléchargé en mode persistant avec contextualisation active, le fichier de configuration et le script de post installation
    4. Démarrer la VM
    5. Si l'instance n'est pas faite:
      • réponse aux questions de façon automatique
      • gestion des secrets
    6. Monitorer la fin d'instance avant de passer à la suivante
      • par l’utilisation de SSH pour l’instance de la VM ?
      • l’utilisation de oneGate nécessite que la VM ait accès au frontend Hâpy ?

Le script sera appelé en postservice durant instance uniquement comme active_rvp ((eole-vpn:source:postservice/00-rvp@7232d10f).

DaD:

  • Il n’est pas sûr de pouvoir interroger le serveurs Zéphir de façon automatique depuis Hâpy.
    • Sur Amon, la mise en place du tunnel IPSec requiert la saisie d’identifiant afin de faire une connexion XMLRPC (eole-vpn:source:scripts/active_rvp@7232d10f#L169)
    • Serait-il envisageable d’ajouter une procédure automatique sur le Zéphir lors de la préparation de la configuration pour Hâpy ?
      1. Sélectionner le serveur Hâpy
      2. Cliquez sur Actions sur le serveur
      3. Cliquer sur Envoyer la configuration au serveur
      4. Une procédure automatique prépare la configuration avec des .tar.gz pour tous les serveurs concernés par le déploiement sur Hâpy