Skip to content

Commit

Permalink
chore(vm): retouche et précision sur les problématiques inhérentes à …
Browse files Browse the repository at this point in the history
…IAAS
  • Loading branch information
mborne committed Jul 1, 2024
1 parent 9abd613 commit 55ca037
Show file tree
Hide file tree
Showing 6 changed files with 147 additions and 23 deletions.
17 changes: 15 additions & 2 deletions docs/annexe/ansible.html
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,14 @@ <h2 id="pré-requis">Pré-requis</h2><ul>
<li><a href="proxy-sortant/proxy-env-vars.html">Configurer les variables d&#39;environnement pour utilisation d&#39;un proxy sortant</a></li>
</ul>
<h2 id="installation">Installation</h2><ul>
<li><a href="https://docs.ansible.com/ansible/latest/installation_guide/index.html#installation-guide" target="_blank">docs.ansible.com - Installation Guide</a> pour la méthode officielle.</li>
<li><a href="https://docs.ansible.com/ansible/latest/installation_guide/index.html#installation-guide" target="_blank">docs.ansible.com - Installation Guide</a> pour les méthodes officielles dont l&#39;installation sur Ubuntu à l&#39;aide d&#39;un package :</li>
</ul>
<pre><code class="language-bash">sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
</code></pre>
<ul>
<li><a href="https://gist.github.com/mborne/eeb3a0177fe27f5ed393a00eded0a86f#file-ansible-venv-md" target="_blank">gist.github.com - mborne/ansible-venv-md - Ansible dans un environnement virtuel Python</a> pour une méthode permettant d&#39;éviter les conflits de version de bibliothèques Python.</li>
</ul>
<h2 id="les-principaux-exécutables">Les principaux exécutables</h2><p>Ansible se décompose en plusieurs programmes permettant de gérer les machines d&#39;un inventaire :</p>
Expand Down Expand Up @@ -93,10 +100,15 @@ <h2 id="les-principaux-exécutables">Les principaux exécutables</h2><p>Ansible
<td>Gestion de fichiers chiffrés pour le stockage des secrets</td>
</tr>
</tbody></table>
<h2 id="quelques-exemples">Quelques exemples</h2><ul>
<h2 id="quelques-exemples">Quelques exemples</h2><p>Les exemples du cours :</p>
<ul>
<li><a href="https://github.com/mborne/vagrantbox#vagrantbox" target="_blank">github.com - mborne/vagrantbox</a> qui permet de configurer des VM de DEV avec Ansible.</li>
<li><a href="https://github.com/mborne/geostack-deploy/tree/master/ansible#readme" target="_blank">github.com - mborne/geostack-deploy - ansible</a> qui illustre le déploiement de GeoStack sur les VM <a href="https://github.com/mborne/vagrantbox#vagrantbox" target="_blank">vagrantbox</a></li>
<li><a href="https://github.com/mborne/k3s-deploy#k3s-deploy" target="_blank">github.com - mborne/k3s-deploy</a> qui permet de déployer un cluster Kubernetes avec <a href="https://k3s.io/" target="_blank">K3S</a> sur les VM <a href="https://github.com/mborne/vagrantbox#vagrantbox" target="_blank">vagrantbox</a>.</li>
</ul>
<p>Quelques exemples complémentaires :</p>
<ul>
<li><a href="https://github.com/geerlingguy/ansible-for-devops?tab=readme-ov-file#ansible-for-devops-examples" target="_blank">github.com - geerlingguy/ansible-for-devops</a> pour les exemples associés au livre <a href="https://www.ansiblefordevops.com/" target="_blank">Ansible for DevOps</a> de Jeff Geerling qui met à disposition de nombreuses ressources pour ansible (c.f. <a href="https://ansible.jeffgeerling.com/" target="_blank">https://ansible.jeffgeerling.com/</a>).</li>
<li><a href="https://github.com/osm-fr/ansible-scripts#readme" target="_blank">github.com - osm-fr/ansible-scripts</a> qui illustre l&#39;utilisation de Ansible pour la gestion des <a href="https://github.com/osm-fr/ansible-scripts/blob/master/hosts" target="_blank">serveurs openstreetmap.fr</a></li>
</ul>
<h2 id="ressources">Ressources</h2><ul>
Expand All @@ -107,6 +119,7 @@ <h2 id="ressources">Ressources</h2><ul>
</li>
<li><a href="https://docs.ansible.com/ansible/2.9/user_guide/playbooks_best_practices.html#best-practices" target="_blank">docs.ansible.com - Best Practices</a></li>
<li><a href="https://galaxy.ansible.com/" target="_blank">Ansible Galaxy</a> qui présente les dépôt de playbook partagés.</li>
<li><a href="https://blog.stephane-robert.info/docs/infra-as-code/gestion-de-configuration/ansible/introduction/" target="_blank">blog.stephane-robert.info - Maîtriser Ansible</a> pour un <strong>cours complet en Français</strong>.</li>
</ul>

</div>
Expand Down
Binary file added docs/img/bing-mouton-1000-pattes.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
67 changes: 57 additions & 10 deletions docs/vm.html
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,8 @@
* [mborne/vagrantbox - Ansible - QuickStart](https://github.com/mborne/vagrantbox#ansible) qui applique un post-traitement après création des VM (configuration `/etc/hosts`, ajout de votre clé SSH, nettoyage `~/.ssh/known_host`...)
* [mborne/geostack-deploy](https://github.com/mborne/geostack-deploy/blob/master/ansible/README.md#d%C3%A9ploiement-de-geostack-avec-ansible) qui assure le déploiement de GeoStack avec Ansible.

Nous utiliserons la procédure d'[installation de Ansible](annexe/ansible.html#installation) dans l'annexe correspondante qui pointe des ressources utiles pour ceux qui souhaiteront approfondir.

---

## Le déploiement de l'application
Expand All @@ -276,7 +278,7 @@

```bash
# déploiement en QUALIF
ansible-playbook -i inventory/qualif mon-application.yml
ansible-playbook -i inventory/qualif playbooks/mon-application.yml
```

Nous insisterons sur l'apport de Ansible pour :
Expand Down Expand Up @@ -372,11 +374,11 @@

## Que manque-t'il?

### Les sauvegardes
### Les sauvegardes (1/2)

En l'état, **si l'une de nos machines vient à s'embraser : Les données sont perdues**. Il serait donc important d'adopter une stratégie de sauvegarde et plusieurs options sont possibles :

* S'appuyer sur des mécanismes de snapshot de VM.
* S'appuyer sur des mécanismes de snapshot de VM ou de leurs volumes.
* Exporter et externaliser régulièrement les seules données de l'application par exemple en créant une archive avec :
* Une sauvegarde de la base PostgreSQL (`pg_dump`)
* Les fichiers de GeoServer (`GEOSERVER_DATA_DIR`).
Expand All @@ -387,24 +389,67 @@

## Que manque-t'il?

### Les sauvegardes (2/2)

Nous soulignerons qu'une **approche basée sur l'export des seules données sera préférable à l'approche par snapshot** :

* Elle facilitera les **tests de restauration hors production** et les **migrations** (les snapshots incluants des éléments de configuration)
* Elle garantira la **cohérence des sauvegardes** (synchroniser les sauvegardes de 2 VM est délicat).
* Il sera plus simple de **vérifier qu'une sauvegarde n'est pas corrompue** (chose plus délicate avec des snapshots)

---

## Que manque-t'il?

### Les sauvegardes incrémentales

Avec des volumétries importantes, une **approche incrémentale sera possible et intéressante**. Nous pourrons en effet nous donner la capacité de **remonter dans le temps** en nous appuyant par exemple sur :

* [rclone](https://rclone.org/) et les **mécanismes de versionning sur S3**.
* **[restic](https://restic.net/)** (1)

> (1) Nous trouverons une intégration de celui-ci dans [Velero](https://velero.io/) qui permet de sauvegarder des clusters Kubernetes.

---

## Que manque-t'il?

### La résilience

Pour les systèmes critiques, il ne sera pas acceptable de devoir attendre la fin d'une restauration de sauvegarde pour que le système redémarre. De même, pour les volumétries importantes, il ne sera pas réaliste de procéder à des sauvegardes complètes.
Pour les systèmes critiques ou avec des volumétries importantes, il ne sera pas acceptable de devoir attendre la fin d'une restauration de sauvegarde complète pour que le système redémarre suite à un problème (1).

A ce titre, nous soulignerons que nous pourrions mettre en oeuvre de **mécanismes de redondance** au niveau des composants GeoStack avec des stratégies propres à chaque application :
A ce titre, nous pourrions mettre en oeuvre de **mécanismes de redondance** au niveau des composants GeoStack avec des **stratégies de réplication propres à chaque application** :

* [PostgreSQL - High Availability, Load Balancing, and Replication](https://www.postgresql.org/docs/current/high-availability.html)
* [GeoServer - Clustering GeoServer](https://docs.geoserver.geo-solutions.it/edu/en/clustering/index.html#clustering-geoserver)

Nous soulignerons que l'exercice est loin d'être trivial et comprendrons mieux pourquoi **certaines applications sont conçues pour répondre nativement à cette problématique (ElasticSearch, etcd, MongoDB,...)**
Nous soulignerons que l'exercice est loin d'être trivial avec ces deux services et comprendrons mieux pourquoi **d'autres sont conçus pour répondre nativement à cette problématique (ElasticSearch, etcd,...)**

> (1) [Chaos_Monkey](https://fr.wikipedia.org/wiki/Chaos_Monkey) et les variantes (Chaos Gorilla, Chaos Kong) pour les tests correspondants imaginés par Netflix.

---

## Que manque-t'il?

### Un DevOps capable de traiter tous ces sujets

Voici une illustration du profil nécessaire :

<div class="center">
<img src="img/bing-mouton-1000-pattes.jpg" alt="Le dessin d'un mouton à mille pattes, fatigué, dans un salle de serveurs informatique" style="height: 300px" />
<br />
<p style="text: center"><a href="https://www.bing.com/images/create/le-dessin-d27un-mouton-c3a0-mille-pattes2c-fatiguc3a92c-dan/1-66832e29580340c89543cd8254ee7318?id=indItxQD79oCEdWpY9f29g.376rS7BYkjK%2Fy%2BtJCHodRQ&view=detailv2&idpp=genimg&thid=OIG4.uETirnIgKZpm13JPMJAC&form=GCRIDP&ajaxhist=0&ajaxserp=0">(contenu généré par IA avec bing)</a></p>
</div>

**En l'état, il faudra en trouver un par équipe de développement en donnant les clés d'un IAAS aux équipes de DEV...**

---

## L'incontournable zone d'hébergement

### La nécessité de traiter globalement ces problèmes

Il est illusoire d'espérer **traiter de manière homogène ces problématiques au niveau de chaque application**. Traiter ces problématiques de manière efficace demandera la **mise en place d'un cadre** pour l'accueil des applications.
En réalité, il est illusoire d'espérer **traiter de manière homogène ces problématiques au niveau de chaque application**. Traiter ces problématiques de manière efficace demandera la **mise en place d'un cadre** pour l'accueil des applications.

Les déploiements seront donc généralement réalisés dans une **zone d'hébergement** (1) prévue pour l'accueil des applications.

Expand All @@ -428,7 +473,7 @@

### Le délicat recours à une équipe dédiée... (1/3)

Pour faire face à la complexité et à la diversité des sujets, nous conviendrons qu'il sera difficile d'éviter de **recourir à une équipe dédiée** pour la construction de la zone d'hébergement.
Pour faire face à la complexité et à la diversité des sujets, nous conviendrons qu'il sera difficile d'éviter de **recourir à des équipes dédiées** pour la **construction et l'exploitation de la zone d'hébergement**.

Nous soulignerons qu'il sera alors possible de préciser les rôles des DEV et des OPS avec par exemple :

Expand All @@ -454,11 +499,13 @@

### Le délicat recours à une équipe dédiée... (3/3)

Poser un **cadre "as code"** et **être précis sur les responsabilités et les demandes** sera incontournable :
Poser un **cadre "as code"** et **être précis sur les responsabilités (1) et les demandes** sera incontournable :

* Avec "je veux des mises à jour régulière", l'équipe en charge de la zone d'hébergement ajoutera potentiellement en bonus un `rm -rf /etc/apt/sources.list.d/*` pour reconfigurer ses seuls dépôts.
* Avec "je veux une exécution régulière de `apt-get update && apt-get upgrade -y`", il y aura moins de place pour la fantaisie.

> (1) En pratique, nous pourrons lister les différentes actions à traiter (créer les VM, installer et configurer l'antivirus, mettre à jour les paquets systèmes, installer les applications,...) et préciser qui traite, qui valide, qui est consulté et qui est informé à l'aide d'une [matrice RACI](https://fr.wikipedia.org/wiki/RACI).

---

## L'incontournable zone d'hébergement
Expand All @@ -467,7 +514,7 @@

Nous verrons par la suite comment :

* Les [conteneurs](conteneurs.html) solutionnent ce **problème de partage de responsabilité** en embarquant les dépendances des applications dans les images (1).
* Les [conteneurs](conteneurs.html) solutionnent ce **problème de partage de responsabilité au niveau des VM** en embarquant les dépendances des applications dans les images (1).
* [Kubernetes](kubernetes.html) traite ces problèmes **à l'échelle d'une zone d'hébergement** par exemple en **cloisonnant les applications** (concept *Namespace*) et en permettant aux équipes applicatives de **spécifier les URL externes** (concept *Ingress* pour la configuration du LoadBalancer).

> (1) Je passerai sous silence la possibilité de fournir l'image d'une VM applicative complète avec un outil tel [Packer](https://www.packer.io/) voire un simple fichier [cloud-init](https://cloud-init.io/).
Expand Down
19 changes: 18 additions & 1 deletion src/annexe/ansible.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,15 @@

## Installation

* [docs.ansible.com - Installation Guide](https://docs.ansible.com/ansible/latest/installation_guide/index.html#installation-guide) pour la méthode officielle.
* [docs.ansible.com - Installation Guide](https://docs.ansible.com/ansible/latest/installation_guide/index.html#installation-guide) pour les méthodes officielles dont l'installation sur Ubuntu à l'aide d'un package :

```bash
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
```

* [gist.github.com - mborne/ansible-venv-md - Ansible dans un environnement virtuel Python](https://gist.github.com/mborne/eeb3a0177fe27f5ed393a00eded0a86f#file-ansible-venv-md) pour une méthode permettant d'éviter les conflits de version de bibliothèques Python.

## Les principaux exécutables
Expand All @@ -26,9 +34,15 @@ Ansible se décompose en plusieurs programmes permettant de gérer les machines

## Quelques exemples

Les exemples du cours :

* [github.com - mborne/vagrantbox](https://github.com/mborne/vagrantbox#vagrantbox) qui permet de configurer des VM de DEV avec Ansible.
* [github.com - mborne/geostack-deploy - ansible](https://github.com/mborne/geostack-deploy/tree/master/ansible#readme) qui illustre le déploiement de GeoStack sur les VM [vagrantbox](https://github.com/mborne/vagrantbox#vagrantbox)
* [github.com - mborne/k3s-deploy](https://github.com/mborne/k3s-deploy#k3s-deploy) qui permet de déployer un cluster Kubernetes avec [K3S](https://k3s.io/) sur les VM [vagrantbox](https://github.com/mborne/vagrantbox#vagrantbox).

Quelques exemples complémentaires :

* [github.com - geerlingguy/ansible-for-devops](https://github.com/geerlingguy/ansible-for-devops?tab=readme-ov-file#ansible-for-devops-examples) pour les exemples associés au livre [Ansible for DevOps](https://www.ansiblefordevops.com/) de Jeff Geerling qui met à disposition de nombreuses ressources pour ansible (c.f. https://ansible.jeffgeerling.com/).
* [github.com - osm-fr/ansible-scripts](https://github.com/osm-fr/ansible-scripts#readme) qui illustre l'utilisation de Ansible pour la gestion des [serveurs openstreetmap.fr](https://github.com/osm-fr/ansible-scripts/blob/master/hosts)

## Ressources
Expand All @@ -38,3 +52,6 @@ Ansible se décompose en plusieurs programmes permettant de gérer les machines
* [docs.ansible.com - How to build your inventory](https://docs.ansible.com/ansible/2.9/user_guide/intro_inventory.html)
* [docs.ansible.com - Best Practices](https://docs.ansible.com/ansible/2.9/user_guide/playbooks_best_practices.html#best-practices)
* [Ansible Galaxy](https://galaxy.ansible.com/) qui présente les dépôt de playbook partagés.
* [blog.stephane-robert.info - Maîtriser Ansible](https://blog.stephane-robert.info/docs/infra-as-code/gestion-de-configuration/ansible/introduction/) pour un **cours complet en Français**.


Binary file added src/slides/img/bing-mouton-1000-pattes.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 55ca037

Please sign in to comment.