Projet

Général

Profil

Automatisation » Historique » Version 39

Daniel Dehennin, 29/04/2021 11:40

1 2 Daniel Dehennin
{{>toc}}
2 2 Daniel Dehennin
3 1 Gilles Grandgérard
h1. Automatisation
4 1 Gilles Grandgérard
5 15 Daniel Dehennin
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":https://pcll.ac-dijon.fr/eole/utiliser-hapy-virtualiser-modules-eole/.
6 1 Gilles Grandgérard
7 2 Daniel Dehennin
L'idée est de pouvoir proposer une *automatisation* de ce type de déploiement.
8 1 Gilles Grandgérard
9 3 Daniel Dehennin
À la suite de l'étude faite par Cadoles :
10 1 Gilles Grandgérard
11 1 Gilles Grandgérard
* Nous imposons l'utilisation d'un Zéphir
12 21 Daniel Dehennin
* Les utilisateurs téléchargerons des images pré-crées et distribuées par un "marketplace":https://docs.opennebula.io/6.0/management_and_operations/storage_management/marketplaces.html#public-marketplaces à installer "nous même":https://github.com/OpenNebula/appmarket-simple
13 2 Daniel Dehennin
* Nous ne proposons pas de modèle d'infrastructure (Amon + Scribe, Amon + Seth AD + Seth filer, ...) (l'idée serait à travailler plus tard)
14 15 Daniel Dehennin
* 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)
15 1 Gilles Grandgérard
16 2 Daniel Dehennin
h1. Pré requis pour utiliser cette fonctionnalité
17 1 Gilles Grandgérard
18 2 Daniel Dehennin
* Avoir un Zéphir pour manager les Hâpy et les VM installées sur ces Hâpy
19 2 Daniel Dehennin
* Avoir au moins un Hâpy instancié et configuré.
20 11 Gilles Grandgérard
* l'accès vers le dépôt des images Eole/Hâpy doit être possible (proxy,...) (et le dépot préparé) 
21 1 Gilles Grandgérard
* Les images devront être Cloudifiées (cloud-init ou one-context). Voir #32118
22 25 Gilles Grandgérard
* Les IP des différents modules EOLE seront obligatoirement Statiques.
23 1 Gilles Grandgérard
24 1 Gilles Grandgérard
25 1 Gilles Grandgérard
h1. Exigences de fonctionnement
26 1 Gilles Grandgérard
27 1 Gilles Grandgérard
* Toutes les VM *managées* utilisent des images persistantes
28 1 Gilles Grandgérard
* Toutes les VM sont enregistrées sur Zéphir
29 1 Gilles Grandgérard
* Si la VM existe déjà sur l'Hapy, on ne la recrée pas (attention: seul le template peut être actualisé)
30 1 Gilles Grandgérard
31 15 Daniel Dehennin
h1. Cas d’usage
32 15 Daniel Dehennin
33 15 Daniel Dehennin
Nous partons du principe qu’un ensemble d’établissement partagent les mêmes caractéristiques :
34 1 Gilles Grandgérard
35 17 Daniel Dehennin
* même topologie réseau: internet, admin, pédago et dmz
36 18 Daniel Dehennin
* même caractéristiques de machine virtuelle (par exemple tous les amons ont la même quantité de RAM, etc)
37 15 Daniel Dehennin
38 22 Daniel Dehennin
h2. Mise en place d’une infrastructure depuis 0
39 22 Daniel Dehennin
40 15 Daniel Dehennin
Le processus global se résume ainsi :
41 15 Daniel Dehennin
42 15 Daniel Dehennin
# Sur le serveur Zéphir
43 15 Daniel Dehennin
## 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)
44 15 Daniel Dehennin
## Créer une variante pour Amon afin de définir les paramètres communs de machines virtuelles (RAM, taille de disque, etc)
45 15 Daniel Dehennin
## Créer une variante pour Scribe afin de définir les paramètres communs de machines virtuelles (RAM, taille de disque, etc)
46 15 Daniel Dehennin
## Pour chaque établissement
47 15 Daniel Dehennin
### Le créer s’il n’existe pas
48 15 Daniel Dehennin
### Créer le serveur Amon de la bonne variante et finir sa configuration
49 15 Daniel Dehennin
### Créer le serveur Scribe de la bonne variante et finir sa configuration
50 20 Daniel Dehennin
### 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
51 15 Daniel Dehennin
# Dans chaque établissement
52 15 Daniel Dehennin
## Installer physiquement le serveur Hâpy
53 15 Daniel Dehennin
## Installer le module EOLE Hâpy
54 1 Gilles Grandgérard
## Enregistrer le serveur Hâpy sur Zéphir
55 26 Daniel Dehennin
## [[Automatisation#Procédure-postservice-hapy|Appliquer la configuration]] en exécutant la commande *@instance@*
56 19 Daniel Dehennin
57 37 Daniel Dehennin
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.
58 22 Daniel Dehennin
59 22 Daniel Dehennin
h2. Ajout d’un nouveau serveur à l’établissement
60 22 Daniel Dehennin
61 22 Daniel Dehennin
Nous allons ajouter un serveur Eolebase à l’infrastructure existente.
62 22 Daniel Dehennin
63 22 Daniel Dehennin
Le processus global se résume ainsi :
64 22 Daniel Dehennin
65 22 Daniel Dehennin
# Sur le serveur Zéphir
66 22 Daniel Dehennin
## Créer une variante pour Eolebase afin de définir les paramètres communs de machines virtuelles (RAM, taille de disque, etc)
67 22 Daniel Dehennin
## Pour chaque établissement
68 22 Daniel Dehennin
### Créer le serveur Eolebase de la bonne variante et finir sa configuration
69 22 Daniel Dehennin
### Éditer la configuration du serveur Hâpy et ajouter l’identifiant du serveur Eolebase à la liste des serveurs à déployer automatiquement
70 22 Daniel Dehennin
### Programmer l’envoie de la configuration du serveur Hâpy
71 22 Daniel Dehennin
# Sur chaque serveur Hâpy
72 22 Daniel Dehennin
## S’assurer que la configuration est récuppérer en exécutant la commande *@synchro_zephir@*
73 26 Daniel Dehennin
## [[Automatisation#Procédure-postservice-hapy|Appliquer la configuration]] en exécutant la commande *@reconfigure@*
74 22 Daniel Dehennin
75 22 Daniel Dehennin
Le déploiement du nouveau serveur de l’établissement doit se faire automatiquement sans autre intervention humaine.
76 22 Daniel Dehennin
77 22 Daniel Dehennin
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.
78 22 Daniel Dehennin
79 15 Daniel Dehennin
80 2 Daniel Dehennin
h1. Comment fonctionne l'automatisation
81 1 Gilles Grandgérard
82 1 Gilles Grandgérard
h2. Il faut créer la configuration des VM dans Zéphir (dont les caractéristiques de la VM)
83 1 Gilles Grandgérard
84 6 Daniel Dehennin
Voir #32117
85 4 Gilles Grandgérard
86 7 Daniel Dehennin
(si le paquet *@eole-modele-vm@* n'est pas installé, faire *@apt-eole install eole-modele-vm@*)
87 1 Gilles Grandgérard
88 29 Daniel Dehennin
* Créer le paquet *@eole-modele-vm@*
89 29 Daniel Dehennin
* Créer le dicos avec une famille *@machine_virtuelle@* contenant les variables de caractéristique de machine virtuelle
90 29 Daniel Dehennin
** variable *@activer_modele_vm@* à *@non@* par défaut
91 31 Daniel Dehennin
** *@vm_marketplace@* : nom du MarketPlace OpenNebula où récupérer l’image disque, par défaut *@EOLE@*
92 31 Daniel Dehennin
** *@vm_app@* : nom de l’application au sens OpenNebula MarketPlace
93 31 Daniel Dehennin
** *@vm_memory@* : taille de la mémoire en Go
94 31 Daniel Dehennin
** *@vm_vcpu@* : nombre de CPU virtuels
95 29 Daniel Dehennin
** Disques : 
96 31 Daniel Dehennin
*** *@vm_disk_size@* : taille en Go du disque
97 29 Daniel Dehennin
** Interfaces, en fonction de la valeur *@nombre_interfaces@*
98 31 Daniel Dehennin
*** *@vm_net_name0@* nom du réseau hâpy associé à l’interface 0
99 31 Daniel Dehennin
*** *@vm_net_name1@* nom du réseau hâpy associé à l’interface 1
100 31 Daniel Dehennin
*** *@vm_net_nameX@* nom du réseau hâpy associé à l’interface X
101 1 Gilles Grandgérard
102 1 Gilles Grandgérard
Ceci peut être fait lors de la création des variantes et la création des serveurs. Ce travail reste manuel.
103 8 Daniel Dehennin
104 8 Daniel Dehennin
105 1 Gilles Grandgérard
DaD:
106 27 Gilles Grandgérard
* 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 ?@*)
107 23 Daniel Dehennin
* En fait, si nous utilisons le *marketPlace*, les choses ne se passent pas du tout comme cela :
108 23 Daniel Dehennin
** 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)
109 23 Daniel Dehennin
<pre>
110 23 Daniel Dehennin
root@hapy:~# onemarketapp list -f MARKET="OpenNebula Public" | head -n 10
111 23 Daniel Dehennin
  ID NAME                                   VERSION  SIZE STAT TYPE  REGTIME MARKET     ZONE
112 23 Daniel Dehennin
 522 Service WordPress - KVM             5.1.3-6.0.    4G  rdy  img 04/01/21 OpenNebula    0
113 23 Daniel Dehennin
 521 Service GitLab CE - KVM             13.10.0-6.    4G  rdy  img 04/01/21 OpenNebula    0
114 23 Daniel Dehennin
 520 Service VNF                         6.0.0-1.20 1024M  rdy  img 04/01/21 OpenNebula    0
115 23 Daniel Dehennin
 519 Service AWS IoT Greengrass - KVM    1.10.2-6.0    4G  rdy  img 04/01/21 OpenNebula    0
116 23 Daniel Dehennin
 518 Service Virtual Router              6.0.0-1.20 1024M  rdy  img 04/01/21 OpenNebula    0
117 23 Daniel Dehennin
 517 Service Kubernetes 1.18 - KVM       1.18.18-6.    4G  rdy  img 04/15/21 OpenNebula    0
118 23 Daniel Dehennin
 516 Vrouter Alpine - vCenter            5.0.2-0.20  256M  rdy  img 11/21/18 OpenNebula    0
119 23 Daniel Dehennin
 515 Debian 10                           6.0.0-1.20    2G  rdy  img 04/01/21 OpenNebula    0
120 1 Gilles Grandgérard
 514 Ubuntu 20.04                        6.0.0-1.20  2.2G  rdy  img 04/01/21 OpenNebula    0
121 23 Daniel Dehennin
</pre>
122 24 Daniel Dehennin
** Exporter l’Apps avec son identifiant, cela créé un *@ID@* de template et un *@ID@* d’image disque
123 23 Daniel Dehennin
<pre>
124 23 Daniel Dehennin
root@hapy:~# onemarketapp export 515 "My Debian 10" --datastore 101 
125 23 Daniel Dehennin
IMAGE
126 23 Daniel Dehennin
    ID: 4
127 23 Daniel Dehennin
VMTEMPLATE
128 1 Gilles Grandgérard
    ID: 2
129 23 Daniel Dehennin
</pre>
130 24 Daniel Dehennin
** Modifier le template créé avec les caractéristiques récuppérées depuis Zéphir
131 23 Daniel Dehennin
<pre><code class="xml">
132 23 Daniel Dehennin
<!-- root@hapy:~# onetemplate show -x 2 -->
133 23 Daniel Dehennin
<VMTEMPLATE>
134 23 Daniel Dehennin
  <ID>2</ID>
135 23 Daniel Dehennin
  <UID>0</UID>
136 23 Daniel Dehennin
  <GID>0</GID>
137 23 Daniel Dehennin
  <UNAME>oneadmin</UNAME>
138 23 Daniel Dehennin
  <GNAME>oneadmin</GNAME>
139 23 Daniel Dehennin
  <NAME>My Debian 10</NAME>
140 23 Daniel Dehennin
  <PERMISSIONS>
141 23 Daniel Dehennin
    <OWNER_U>1</OWNER_U>
142 23 Daniel Dehennin
    <OWNER_M>1</OWNER_M>
143 23 Daniel Dehennin
    <OWNER_A>0</OWNER_A>
144 23 Daniel Dehennin
    <GROUP_U>0</GROUP_U>
145 23 Daniel Dehennin
    <GROUP_M>0</GROUP_M>
146 23 Daniel Dehennin
    <GROUP_A>0</GROUP_A>
147 23 Daniel Dehennin
    <OTHER_U>0</OTHER_U>
148 23 Daniel Dehennin
    <OTHER_M>0</OTHER_M>
149 23 Daniel Dehennin
    <OTHER_A>0</OTHER_A>
150 23 Daniel Dehennin
  </PERMISSIONS>
151 23 Daniel Dehennin
  <REGTIME>1619083814</REGTIME>
152 23 Daniel Dehennin
  <TEMPLATE>
153 23 Daniel Dehennin
    <CONTEXT>
154 23 Daniel Dehennin
      <NETWORK><![CDATA[YES]]></NETWORK>
155 23 Daniel Dehennin
      <SSH_PUBLIC_KEY><![CDATA[$USER[SSH_PUBLIC_KEY]]]></SSH_PUBLIC_KEY>
156 23 Daniel Dehennin
    </CONTEXT>
157 23 Daniel Dehennin
    <CPU><![CDATA[1]]></CPU>
158 23 Daniel Dehennin
    <DISK>
159 23 Daniel Dehennin
      <IMAGE_ID><![CDATA[4]]></IMAGE_ID>
160 23 Daniel Dehennin
    </DISK>
161 23 Daniel Dehennin
    <GRAPHICS>
162 23 Daniel Dehennin
      <LISTEN><![CDATA[0.0.0.0]]></LISTEN>
163 23 Daniel Dehennin
      <TYPE><![CDATA[vnc]]></TYPE>
164 23 Daniel Dehennin
    </GRAPHICS>
165 23 Daniel Dehennin
    <INFO><![CDATA[Please do not use this VM Template for vCenter VMs. Refer to the documentation https://bit.ly/37NcJ0Y]]></INFO>
166 23 Daniel Dehennin
    <LOGO><![CDATA[images/logos/debian.png]]></LOGO>
167 23 Daniel Dehennin
    <LXD_SECURITY_PRIVILEGED><![CDATA[true]]></LXD_SECURITY_PRIVILEGED>
168 1 Gilles Grandgérard
    <MEMORY><![CDATA[768]]></MEMORY>
169 23 Daniel Dehennin
    <OS>
170 23 Daniel Dehennin
      <ARCH><![CDATA[x86_64]]></ARCH>
171 23 Daniel Dehennin
    </OS>
172 23 Daniel Dehennin
    <SCHED_REQUIREMENTS><![CDATA[HYPERVISOR!="vcenter"]]></SCHED_REQUIREMENTS>
173 23 Daniel Dehennin
  </TEMPLATE>
174 23 Daniel Dehennin
</VMTEMPLATE>
175 23 Daniel Dehennin
</code></pre>
176 31 Daniel Dehennin
177 35 Daniel Dehennin
h2. Configuration du serveur Hâpy
178 10 Gilles Grandgérard
179 10 Gilles Grandgérard
Voir #32118
180 10 Gilles Grandgérard
181 34 Daniel Dehennin
* Ajouter une variable *@activer_deploiement_automatique@* par défaut à *@non@*.
182 34 Daniel Dehennin
* Ajouter une variable définissant la liste des serveurs à déployer :
183 34 Daniel Dehennin
** Soit en récupérant la liste des serveurs Zéphirs du même établissement qui ont *@activer_modele_vm@* == *@oui@*
184 34 Daniel Dehennin
** Soit avec une liste statique ordonnée d’identifiants Zéphir de serveurs à déployer
185 2 Daniel Dehennin
186 1 Gilles Grandgérard
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.
187 2 Daniel Dehennin
188 1 Gilles Grandgérard
h2. Depuis Zéphir, appliquer la configuration sur le serveur Hâpy
189 2 Daniel Dehennin
190 2 Daniel Dehennin
* La nouvelle configuration est déployé sur la machine Hapy
191 2 Daniel Dehennin
* Le reconfigure est exécuté
192 1 Gilles Grandgérard
* les VM vont être installées, instanciées et prêtes à l'usage dans l'ordre de déclaration de la liste des VM
193 33 Daniel Dehennin
194 1 Gilles Grandgérard
h1. Procédure de déploiment des VMs sur Hâpy
195 33 Daniel Dehennin
196 33 Daniel Dehennin
La préparation du Hâpy aura été faite lors de son instance/reconfigure :
197 33 Daniel Dehennin
* création des réseaux et assignation des interfaces
198 33 Daniel Dehennin
* création des datastores
199 1 Gilles Grandgérard
* création des marketPlaces
200 1 Gilles Grandgérard
201 1 Gilles Grandgérard
Voir postservice : #32120
202 1 Gilles Grandgérard
Voir diagnose : #32123
203 33 Daniel Dehennin
204 33 Daniel Dehennin
La procédure de déploiment des machines virtuelles sur Hâpy est faites par un script (par exemple *@eole-hapy-autodeploy-vms@*).
205 33 Daniel Dehennin
206 33 Daniel Dehennin
Ce script doit :
207 33 Daniel Dehennin
208 33 Daniel Dehennin
# Vérifier si le déploiement automatique est activé (*@activer_deploiement_automatique@* == *@oui@*)
209 33 Daniel Dehennin
# récupérer la [[Automatisation#Configuration-du-serveurs-Hâpy|liste des serveurs à déployer]]
210 33 Daniel Dehennin
## Récuppérer la configuration des serveur
211 33 Daniel Dehennin
## Vérifier la cohérence des informations Hapy/VMs. Si échec, alors on s'arrête en erreur
212 39 Daniel Dehennin
### Vérifier que les noms de réseaux déclarés pour les VMs existent sur Hâpy 
213 33 Daniel Dehennin
# Pour chaque serveur
214 33 Daniel Dehennin
## Créer/mettre à jour un *@FILE@* dans hapy pour exposer la configuration à l’interieur de la VM
215 33 Daniel Dehennin
## Télécharger l’application depuis le marketPlace (cela créé une image et un template de base)
216 28 Gilles Grandgérard
## 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
217 33 Daniel Dehennin
## Démarrer la VM
218 2 Daniel Dehennin
## Si l'instance n'est pas faite:
219 2 Daniel Dehennin
*** réponse aux questions de façon automatique
220 33 Daniel Dehennin
*** gestion des secrets
221 33 Daniel Dehennin
## Monitorer la fin d'instance avant de passer à la suivante
222 38 Daniel Dehennin
*** par l’utilisation de SSH pour l’instance de la VM ?
223 38 Daniel Dehennin
*** l’utilisation de "oneGate":https://docs.opennebula.io/6.0/management_and_operations/multivm_service_management/onegate_usage.html nécessite que la VM ait accès au frontend Hâpy ?
224 30 Daniel Dehennin
225 36 Daniel Dehennin
Le script sera appelé en *@postservice@* durant *@instance@* *uniquement*
226 36 Daniel Dehennin
227 30 Daniel Dehennin
DaD:
228 30 Daniel Dehennin
229 30 Daniel Dehennin
* Il n’est pas sûr de pouvoir interroger le serveurs Zéphir de façon automatique depuis Hâpy.
230 30 Daniel Dehennin
** 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)
231 30 Daniel Dehennin
** Serait-il envisageable d’ajouter une procédure automatique sur le Zéphir lors de la préparation de la configuration pour Hâpy ?
232 30 Daniel Dehennin
### Sélectionner le serveur Hâpy
233 30 Daniel Dehennin
### Cliquez sur *@Actions sur le serveur@*
234 30 Daniel Dehennin
### Cliquer sur *@Envoyer la configuration au serveur@*
235 1 Gilles Grandgérard
### 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