1623 views
--- 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?