---
title: "Stack"
tags: AuDACES, stack
type: slide
slideOptions:
transition: slide
reveal_plugins: ["notes"]
theme: white
---
<style>
.reveal section img {
margin: 10px;
background: none;
border: none;
box-shadow: none;
}
.slides ul,li { text-align: left }
.slides ul { margin-left: 5%;/* border: 1px solid red */}
.slides li { /*border: 1px solid green*/ }
.slides code {
background: #dddddd;
border-radius: 10px;
padding-top: 2px;
padding-right: 10px;
padding-left: 10px;
padding-bottom: 2px;
}
</style>
<!-- .slide: data-transition="zoom" -->
## Stack
<img src="/uploads/upload_1ad0dfe3886a066b61998b7c9ab8bf0f.jpg" width="30%"/>
### ... of DevOps tools for Proxmox
Note:
* outil pour la gestion d'un cloud sur proxmox
* **la stack** c'est
* la stack logicielle
* le commande stack
* le repo où sont stockés la configuration des ressources et des services
* les fichiers de configuration eux même
* **la punchline** "tout est dans la stack!"
* présentation + retour d'expérience + sur un travail d'équipe
* typiquement un point de vue de développeur
* qui parle?
----
![](/uploads/upload_adf2cefa07e6bd9d7997ce4c74f5f71d.png)
Note:
* développeur web depuis 20 ans
* administration de serveur progressivement
* naturellement devops
* typiquement un point de vue de développeur
* CSSI / CRSSI / DSI ;)
* Responsable d'équipe
----
## Equipe commune [INP] ISIMA/LIMOS
![](/uploads/upload_46c0a4ae1bcae129632b9401459dcf55.jpg)![](/uploads/upload_0179be39e87f9076be9410d481938352.jpg)![](/uploads/upload_456d4adcebf87ae21e1aca53c0ae3c3b.jpg)![](/uploads/upload_46b2f7015944922a71fd2ba4cd5eb2c5.jpeg)![](/uploads/upload_f53cf11502752d23663795d694602959.jpg)![](/uploads/upload_226df3e26b3eb17d9df471f35167d2f9.jpg)![](/uploads/upload_1d9b0487473f709e41f214cabf970dee.jpg)
Note:
* travailler avec des gens sympas dans une bonne ambiance
* compétences diverses
* projet commun de refonte il y a 5 ans
* Moi c'est Mr Pressé le responsable d'équipe, normal
* Mr Chatouille sert l'infra il gère la parite pve et ceph, il n'utilise pas encore la stack pour cette gestion
* Mr Malchance configure déploie maintient les services notamment critique et est un gros contributeur
* Mr Tranquille configure et déploie tous le parc péda avec la stack et contibure notamment pour la compatibilité Mac
* Mr Non fait du windows Server Active Directory et quelques services. Il utilise la stack mais pas pour windows
* Mr Tatillon gère des services qu'il a développé
* Mme Têtue fait de la prox c'est le point de contact utilisateurs
* le but c'est qu'elle puisse prendre en main la stack
* il n'y a eu aucun agent de la fonction publique violenté
* les avatars ont tous été validés avec les concernés
* l'activité de chacun n'est pas résumé à ça
* situer le contexte, en terme de l'utilisation des ressources
* et le ressources c'est ça
----
## ISIMA/LIMOS
![](/uploads/upload_0fd686298aa597b8f7655850f035a1f9.jpeg)
* Cluster HPC `~300 cœurs` `5 To RAM`
* Cluster prod `~200 cœurs` `5 To RAM`
* Cluster recherche `~600 cœurs` `5 To RAM`
* `1500 vms perso`
* Cluster test
* Ceph / NAS `~500 To`
Note:
* comment rendre utilisable ces ressources de manière ergonomique et sécurisée?
----
### Historique
* services indépendants ISIMA / LIMOS
* maintien de l'historique
* depuis 15 ans!
* Peu de virtualisation
<img src="/uploads/upload_d3df32bf1c4fcf750ae6dec926130ec6.png" style="float: right; margin-right: 50px" align="left" />
* `~2015` [Projet PétaSky](https://limos.fr/news_project/110)
* [OpenStack]()
* [Horizon](https://docs.openstack.org/horizon/latest/)
* CDD de 3 ans
* rationnalisation de la prod ...
* sur OpenStack
Note:
* l'équipe a été complètement renouvelée il entre 2016 et 2017 ans
* synergie autour d'une refonte complète de l'infra physique et logicielle
* Fred est un acteur majeur et un catalyseur technique
* Mais lui il n'a pas de Mr / Mme
----
### Angoisses
![](/uploads/upload_6dfc2312c68cd5874d0f113340e83fbd.jpg)
* Pas de titularisation
* Beaucoup de questions
* Beaucoup de leçons
* 1 mantra + 1 vision
Note:
* On est sur le titanic, notre reconstuction commence sur un navire sans capitaine ...
* Appraissent 1 mantra et 1 vision
* Julien Muetton aka @TheMouette
* Claude nous file un coup de main
* Le mantra
----
<img src="/uploads/upload_99ce846c0f1fb3f8902f2a72c4f6645e.jpg" style="float: right; width: 35%" />
## "You can't defend. You can't prevent. The only thing you can do is detect and respond."
<hr />
### Bruce Schneier
Note:
* Il vient de la SSI
* données d'un côté -> maintenance automatisée des services
* PCA / PRA
* Et la vision donc
----
### 1 vision: 1 infra = 1 repo
<img src="/uploads/upload_38e622d4eb68527b46cc8d42173be16a.png" width="90%"/>
Note:
* IaC
* Les Outils devops permettent
* la configuration automatique des ressources matérielles (hyperviseur, réseau)
* la configuration automatique des services (de l'AD au projet recherche en passant par le web, dns, etc)
* l'idée c'est un ligne de commande qui unifie des outils déjà existant évidemment
----
### Stack
<img src="/uploads/upload_4392da0764ada22028972a03a5c175a9.png" width="90%"/>
Note:
* voila l'implémentation en terme de services
* HashiCorp
* OpenSource / Silicon Valley
* trés utilisés pour exploiter du cloud commerciale type AWS, Azure, ou google cloud
* on utilise la partie community d'hashicorp dans notre stack
* C'est toufu on reviendra au chéma global
* présentation de liste des services et après on fera une démo
----
**Hyperviseur**
* Opensource
<a href="https://www.proxmox.com/en/"><img src="/uploads/upload_26511e00704eb6a292b9898e465b2cf1.png" style="float: right; margin-right: 50px" /></a>
* [Socle interministériel de logiciels libres](https://sill.etalab.gouv.fr/fiche?software=Proxmox%20VE)
* Grosse communauté
* notamment ESR (291 inscrits 😚)
* Installation / maintenance simple
* Debian based
* Hyperconvergence
* Clustering
----
**Outil de configuration automatique**
* ssh + Python = pas de client
* YAML
* roles / collections <a href="https://docs.ansible.com/"><img src="/uploads/upload_959f00b7bf094a9035803681e3c611ad.png" style="float: right; margin-right: 50px; width: 25%" /></a>
* [`ansible galaxy`](https://galaxy.ansible.com/)
* playbooks
* variables
* Parallelisme
* Idempotence (changed=0)
![](/uploads/upload_adda42cc683496a84156cec4afde4007.png)
Note:
* on le verra tout à l'heure en pratique
----
**Gestionnaire de secrets partagés**
* ui web + api + cli<a href="https://www.vaultproject.io/"><img src="/uploads/upload_92f47a75db628691b3eb5e19fa0aefbf.png" style="float: right; margin-right: 30px; padding-top: 100px; width: 30%" /></a>
* [plugin ansible](https://github.com/TerryHowe/ansible-modules-hashivault)
* [lib python](https://pyvault.com/)
* Nombreuses fonctionnalités
* [PKI](https://www.vaultproject.io/docs/secrets/pki)
* [SSH integration](https://www.hashicorp.com/products/vault/ssh-with-vault)
* ...
* Complété par Keepass (PRA)
Note:
* base de données clé valeur chiffrée avec cli et api
* sous utilisées
* mais fait très bien le taff
* on en verra une partie dans la démo
----
**IaC**
* `*.tf` (hcl), `*.state` (json), `*.lock`<img src="/uploads/upload_191b4ef09e1d96dc0e514432bfac6618.png" style="float: right; margin-right: 50px; width: 45%" /></a>
* commands<a href="https://www.terraform.io/">
* [`plan`](https://www.terraform.io/cli/commands/plan)
* [`apply`](https://www.terraform.io/cli/commands/apply)
* [`destroy`](https://www.terraform.io/cli/commands/destroy)
* ...
* [providers](https://registry.terraform.io/browse/providers)
* [provisioners](https://www.terraform.io/language/resources/provisioners/syntax)
* [backend](https://www.terraform.io/language/settings/backends)
Note:
* terraform comme ansible on le verra en action pendant la démo
* il gère la partie ressources (CPU, RAM, DISK, OS, RESEAU)
* hcl + state + lock = pour collaborer
* en toute sérénité?
* gare aux états partagées!
----
**Clés / valeurs**
* ui web + api + cli<a href="https://www.consul.io/"><img src="/uploads/upload_cc95ea044e5d38b77b41e13ffcd1857d.png" style="float: right; margin-right: 50px; width: 35%" /></a>
* backend pour terraform
* états partagés
* Météo des services
* dashboard
* remote command
Note:
* clé valeur avec cli et api pas forcément sécurisé
* monté par Claude
* sous utilisé
* soumis a des limitations (512KB)
* Météo on s'en sert pas
* lui on pourra y revenir dans les questions réponses mais il est transparent dans la démo
----
**Provider Terraform Proxmox**
* Provider community
* dynamique <img src="/uploads/upload_4aa975ffcc3f2a6679086cd68e338b17.png" style="float: right; margin-right: 50px; width: 40%" />
* Utilise l'api proxmox
* Cloud init
#### <img src="https://raw.githubusercontent.com/FortAwesome/Font-Awesome/6.x/svgs/brands/github.svg" width="6%"> [Telmate/terraform-provider-proxmox](https://github.com/Telmate/terraform-provider-proxmox)
Note:
* Provider
* Documentation parfois à la traîne
* Difficile à débugger
* Mr Chatouille me dit comment configurer la stack
----
**Provider Terraform Windows Network**
* Gére les entrées DHCP / DNS d'un active directory<img src="/uploads/upload_67f9d7ec8d289dc1ae44bb7fdb5bf18b.jpg" style="float: right; margin-right: 50px; width: 32%" />
* réseau interne
* PowerShell + [winrm](https://docs.microsoft.com/en-us/windows/win32/winrm/portal)
#### <img src="https://raw.githubusercontent.com/FortAwesome/Font-Awesome/6.x/svgs/brands/github.svg" width="6%"> [claudusd/terraform-windows-network](https://github.com/claudusd/terraform-windows-network)
Note:
* Bon bootstrap pour provider terraform
* intégration ad-hoc à nos besoins développée par @claudusd
* le duo PowerShell + [winrm] on utilise aussi dans ansible
----
**Génération automatique d'images machine**
* `*.json`
* génère un qcow2<a href="https://www.packer.io/"><img src="/uploads/upload_3822c6391ceda07219f2c11b0c59a7a5.png" style="float: right; margin-right: 50px; width: 40%" /></a>
* cloud init ready
* intégration
* scripts
* ansible
* ...
* template sur les clusters proxmox
Note:
* ne déclenche pas les passions
* on ne le verra pas dans la démo
----
## Backups
[![](/uploads/upload_6709b934c3e45c6a70a0921023de763f.png)](https://backuppc.github.io/backuppc/)
[![](/uploads/upload_50f42257758d585db312d273caa41f8e.png)](https://pbs.proxmox.com/wiki/index.php/Main_Page)
Note:
- PCA/PRA on verra ça demain
----
### Stack
<img src="/uploads/upload_4392da0764ada22028972a03a5c175a9.png" width="90%"/>
Note:
* tout ça dans la stack (qui désigne le binaire)
* La stack y a quoi dedans?
----
### Stack
* [Sucre syntaxic](https://fr.wikipedia.org/wiki/Sucre_syntaxique) pour admin
* Dépendances minimales
* binaires / cache / config en local
* virtualenv Python + lib python
* `version.yml` freeze
* bash + `config.yml` + vault = envvars
* Cross platform <img src="https://raw.githubusercontent.com/FortAwesome/Font-Awesome/6.x/svgs/brands/ubuntu.svg" width="6%"> <img src="https://raw.githubusercontent.com/FortAwesome/Font-Awesome/6.x/svgs/brands/apple.svg" width="6%"> <img src="https://raw.githubusercontent.com/FortAwesome/Font-Awesome/6.x/svgs/brands/windows.svg" width="6%"> ?
* On ne touche plus à l'UI Proxmox VE
Note:
- La on parle donc de la stack la ligne de commande
- implémenter un workflow pour la gestion en masse des ressources et services
- Parce que quand on parle de la stack on parle aussi de la config, les yml dans le repo
- Ben cette partie elle est structurée à peur près comme ça ->
----
### Stack (repo) Workspaces
* Un répertoire `workspaces` / **groupe de ressources** / **groupe de modules terraform**<img src="/uploads/upload_70fe4a2e5a786904aa0ebb1e217b1c3d.png" style="float: right; width: 20%" />
* un répertoire ansible
* `group_vars`, `host_vars`, `playbooks`
* un répertoire terraform
* `*.tf` de machines
* `*.tf` des DNS et DHCP
* un état terraform par workspace
----
## Stack (cli) Workflow
* `install`: installer `**/version.yml`
* `activate`: charger `**/config.yml`
* `workspace`: choisir un workspace
* `build`: construire les ressources via terraform
* `destroy`: détruire les ressources via terraform
* `play`: jouer un playbook ansible
----
## Stack (cli)
* bash + Python + [fpm](https://fpm.readthedocs.io/en/v1.13.1/) = `*.deb`
* Implémentation modulaire
* s'utilise à la racine de la stack (repo)!
* possibilité d'extensions locales des commandes
* VMs étudiantes à partir des groupes AD
* certificats TLS [Sectigo](https://sectigo.com/)
* vhost d'[ISPconfig](https://www.ispconfig.org/)
----
## Stack (repo)
* Roles / collections ansible<img src="/uploads/upload_0af3f9ec7cca224f030202ca083f7889.png" style="float: right; width: 25%" />
* Arborescence de Workspaces
* Multi clusters
* Multi Vault
* secrets path
* Vault
* Keepass
* répertoires temporaires
Note:
- tout bien gité et ce qui se passe dans stack restera dans la stack
----
# une démo?
![](/uploads/upload_1d0fa15bcf3b3cab25f23f4664a551a8.gif)
Note:
* stack-cli
* blue print structuré
* fpm
* scaffolding
* stack-rebirth
* local
* version.yml
* .folder
* config.yml
* secret
* source stack activate
* variables d'environnement / y compris secret
* source stack workspace
* *.tf
* stack teraform state list
* *.state
* stack build
* stack teraform state list
* inventory.yml
* [group|host]_vars
* playbooks
* roles
* requirements.yml
* play swarm
* stack destroy
----
# un repo?
![](/uploads/upload_043f281e43a1b2d9510ee588f929e79c.gif)
Note:
* produit pas encore mature pour être communautaire même si très apprécié au sein de l'équipe
* Retour d'exéprience sous forme de questions et de pistes à explorer
pour le faire soi même
----
## DIY
* Packer
* nécessite libvirt sur l'hôte
* Foreman?
* cloud-init configuration ISO?
----
## DIY
* Terraform
* ne fonctionne pas avec un état inconsistant
* merge tardif de nouvelles ressources terraform
* à plus de 1000 VMs sur un pool
* l'api proxmox rame
* le provider terraform time out
* [community.libvirt.virt module](https://docs.ansible.com/ansible/latest/collections/community/libvirt/virt_module.html)
----
## DIY
* Consul
* valeurs limitées à 512KB
* utilisation d'états locaux pour les "gros" workspaces
* Vault
* [Ansible vault](https://docs.ansible.com/ansible/latest/user_guide/vault.html)
----
## DIY
* Full Python? Go?
* ui web / api / cli
* Intégration d'ACL
* Réduire les dépendances
----
## Bien faits
* Collaborer sur le design des outils
* communs
* quotidiens
* Réactivité
* Elaborer des bonnes pratiques
* Documenter
* Transférer des compétences
Note:
* projet commun motivant et utile
* Et on a pas loin de toute notre infra, vous savez où?
* DANS LA STACK
* Ca fait poser plein de questions
* ca fait bien discuter l'équipe et c'est plutot cool
* C'est finit merci de Votre Attention
----
### Merci pour votre attention
<img src="/uploads/upload_a22ec46b793c430bd56ec501acd48d80.jpg" width="80%"/>
### Questions?