Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Devoxx France 2025 - Comment transformons-nous ...

Devoxx France 2025 - Comment transformons-nous les Restos du Coeur en Cloud Provider ?

Dans un context où 1 euro = 1 repas, venez découvrir comment un groupe de bénévoles s'est mis en tête de créer un cloud dans le but de "faire plus avec moins".

Ainsi, nous explorerons les motivations derrière ce projet, discutant des défis spécifiques rencontrés lors de la mise en place d'une infrastructure ouverte à un environnement associatif.

Vous découvrirez pourquoi et comment Kubernetes et OpenStack ont apportés l’évolutivité et la résilience nécessaires pour soutenir les Restos du Cœur dans leur mission.

De l'installation d'une baie dans les WC jusqu'à la mise en place d'une infrastructure robuste et scalable, nous vous invitons à découvrir les dessous techniques du projet : architecture, choix de configuration et stratégies déployées pour assurer une flexibilité maximale. Entre anecdotes, leçons apprises et innovations, nous montrerons comment cette infrastructure a transformé le SI de l'association.

Pour terminer, rejoignez-nous pour découvrir comment cette aventure technologique hors norme a permis de faire économiser des millions de repas (par an) à l'association.

Qui sait, peut-être que vous aussi, après cette université, vous souhaiterez nous rejoindre ?

Julien Briault

April 16, 2025
Tweet

More Decks by Julien Briault

Other Decks in Technology

Transcript

  1. Disclaimer 3 On aime les acronymes RDC = Restos du

    Coeur République Démocratique du Congo Rez de chaussée
  2. Stéphane Trognon Uptime 32y Lead SRE @ SRE (bénévole) @

    #3615 Ma vie @StephaneTrognon @stephanetrognon.bsky.social
  3. Julien Briault Uptime 26y Ingé réseau | SRE @ Auteur

    @ Linux Pratique Responsable (bénévole) @ #3615 Ma vie @ju_hnny5 @jbriault.fr
  4. Sommaire • Un peu (beaucoup) d’historique • Comment gérer une

    infra comme un projet Open Source ? Quelle organisation ? • La prise de décision, comment fait-on ? • Un peu (beaucoup) de technique ◦ Quelles ont été nos erreurs ? • Quel est notre futur ? Nos challenges ? • Comment contribuer à ce projet ? @ju_hnny5
  5. Objectifs 1. Contexte : Que vous compreniez le “pourquoi” de

    ce projet ? 2. Vous partager nos apprentissages 3. Documenter ce que l’on fait (pour les futurs bénévoles, avoir une trace de ce qui était fait/mis en place) 4. Que vous puissiez monter, vous aussi, votre plateforme de cloud ? Et remplacer AWS, GCP, OVH @StephaneTrognon
  6. “J’ai une petite idée comme ça (...) un resto qui

    aurait comme ambition, au départ, de distribuer deux ou trois milles couverts par jour.” @ju_hnny5
  7. Les Restos en quelques chiffres … 163 millions de repas

    servis (2023-2024) 112 Associations départementales 2348 Lieux d’accueil (centre de distribution, etc). 78 000 Bénévoles réguliers (dont 35 000 qui utilisent l’informatique au quotidien) + de 40 Applications fonctionnelles (Applications utilisées par les bénévoles au quotidien) @ju_hnny5
  8. Le pc qui “traine dans un coin” Des sauvegardes ??

    ☠ De la redondance ?!? 💀 Y’a quoi là dessus ? 👀 Ça x112 ? (spoiler : presque) @ju_hnny5
  9. Pourquoi ce projet ? L’informatique des Restos est conséquente et

    le cloud publique ça coûte cher, très cher. Des repas sont amputés chaque année pour faire fonctionner cette informatique essentielle au bon fonctionnement de l’association. @StephaneTrognon
  10. Une organisation • Uniquement que des bénévoles ◦ Pas toujours

    disponibles ▪ On est pas à 35h • Une bande de 11 personnes ◦ Technicien-nes ◦ Ingénieur-e-s @StephaneTrognon
  11. La communication • Un outil “moderne” • Permet d’isoler les

    projets par channels • A une approche plus “dev” • Beaucoup d’intégrations ◦ Les webhooks • En dehors de l’infra @StephaneTrognon
  12. La communication Bonjour, Nous vous faisons part de la maintenance

    programmée suivante : Objet : Objet de l'intervention Début : 1970-01-01 @ 01:00 (Paris) Fin attendue : 1970-01-01 @ 02:00 (Paris) Infrastructure affectée ----------------------- Composants : xxxxx Localisation : France – xxxx – Salle serveurs Détails : Décrire ici les raisons de l'intervention. Si vous avez des questions ou des remarques, n’hésitez pas à nous contacter.
  13. Une équipe 🦾 Xavier Nicolas Julien Mathéo Stéphane Etienne Steve

    +3 autres personnes Comment ça tu n’es pas sur cette slide ? 👀 @StephaneTrognon
  14. La motivation 🔥 “Je ne faisais pas assez de réseau

    dans mon emploi, je suis venu faire ce qui me passionne tout en faisant une bonne action.” Etienne @StephaneTrognon “Je veux mettre mes compétence IT au service d’une belle cause.” Steve “J’ai réalisé que je pouvais donner un peu de mon temps et de mes compétence pour faire un truc qui rend le monde un peu meilleur..” Xavier “Je voulais utiliser openstack pour distribuer des repas plutot que des bombes.” Xavier “Et si mon métier, ma passion pouvait également aider les personnes dans le besoin.” Stéphane
  15. Une équipe 🦾 • Découpage par expertise ◦ Infra (middleware,

    hardware) ▪ Réseau ▪ OpenStack ▪ Observabilité ◦ SRE ◦ Sécu • 3 référents par sujet (pour avoir un quorum) @StephaneTrognon
  16. ReX : Intégration de Stéphane🦖 • Organisation ◦ Beaucoup de

    sujet ◦ Reprise de l’existant difficile ◦ Volonté Amélioration continue ◦ Liberté de proposition ◦ Rituel simple • Technique ◦ L’autonomie technique difficile ◦ Partage avec l’équipe ◦ Share Session ◦ Archi Review ◦ Nombreuses technologie variées @StephaneTrognon
  17. La v1 : Tout dans la tête • Ça va

    bien quand tu es tout(e) seul(e) ◦ Difficile pour la contribution d’autres personnes ◦ Difficilement maintenable sur le long terme • Humain est faillible par définition ◦ Source d’erreurs ou d’oublies @ju_hnny5
  18. La v1-bis : Planner ? • Montrer ce que l’on

    fait ◦ Objectif : avoir de la transparence ◦ Avoir des “tickets” pour se remémorer • C’est bien l’outil mais il faut avoir une méthodologie ◦ Lance les idées dedans ◦ On trie pas ◦ On organise pas @ju_hnny5
  19. Gestion de projet en équipe Une superbe alternative OSS à

    Jira et Notions. Découpage en plusieurs sous projets : @StephaneTrognon
  20. Rituel 2 : Share Sessions Un complément de la documentation,

    pour donner du contexte à un sujet technique. @ju_hnny5
  21. Rituel 3 : Tech talks Partage d’un sujet technique, dans

    le but de continuer la veille techno d’un sujet qui pourrait avoir un intérêt pour l’équipe. @ju_hnny5
  22. Processus de recrutement de bénévoles - Première rencontre (Julien ou

    autre personne de l’ équipe) - Rencontre de l’équipe lors de l’un de nos point de synchro - Onboarding (avec support + doc) de la personne @ju_hnny5
  23. Algo de Feynman 1. Écrire le problème 2. Réfléchir 3.

    Écrire la solution https://ploum.net/2024-06-05-complexite-simplicite.html
  24. Algo de Feynman • Se matérialise en 2 choses :

    ◦ ADR (Achitecture Decision Record) ◦ Architecture Review @StephaneTrognon
  25. … et la bienveillance ??? “Read The Fucking Manual” “Lis

    le putain de manuel” @StephaneTrognon / @ju_hnny5
  26. Très bon article sur le sujet : https://www.lvlup.fr/blog/rtfm-bienveillance “Quand est-ce

    qu’on a décidé qu’il serait normal de mal se parler ?”
  27. Le RTFM problématique ? • On est des bénévoles ….

    Mais ça s’applique aussi à des salariés ! • Ça veut dire que la réponse est obligatoirement dans la doc ? ◦ Spoiler : tout n’est pas forcément dans la doc … • Une personne qui souhaitait se faire aider sera montée en compétences, elle trouvera plus naturel de reproduire ce comportement. @StephaneTrognon / @ju_hnny5
  28. Nos offres Regions Edge Expertise IaaS, PaaS (OpenStack, Kubernetes) Accompagnement

    technique (Formation, consulting) IoT (Exemple : sondes) @StephaneTrognon / @ju_hnny5
  29. Nos offres : Les régions Fournir des contrats d’APIs afin

    de standardiser l’accès à l’infrastructure, on en parlera un peu plus tard. 🤫 Accessible via : - La WebUI (Horizon) - La CLI (CLI OpenStack) - Ou le provider Pulumi/Terraform (Provider officiel OpenStack) @ju_hnny5
  30. Nos offres : L’expertise - Parce que ça coûte cher

    pour une association qui fonctionne en permanence en “best-effort” - Permet de fournir une technique maintenable sur le long terme @StephaneTrognon
  31. Nos offres : L’edge - l’IoT a une place importante

    dans le SI des Restos - Pour le présent et le futur @ju_hnny5
  32. 1 - L’éco-conception Infrastructure issue de 99% de dons :

    - Doit continuer à le rester, recherche constante de nouveaux dons ; - Pas d’achat de matériel au maximum (pour des raisons environnementales et économiques). @ju_hnny5
  33. 2 - L’éco-conception Faire durer un maximum de temps du

    matériel destiné au rebut : - Augmenter la RAM, upgrade du CPU des machines, passage à du SSD - Conserver des pièces en stock en cas de dysfonctionnement matériel @ju_hnny5
  34. 3 - L’éco-conception Choix de matériel pour leur efficacité énergétique

    (Cf la loi de Moore) Source : https://blog.octo.com/la-loi-de-moore-est-morte-et-c%27est-une-bonne-nouvelle @ju_hnny5
  35. 4 - L’éco-conception La légèreté logicielle - On essaie, au

    maximum, d’embarquer des logiciels qui sont moins consommateurs de : - RAM - CPU - Stockage Exemple : remplacement d’Ubuntu Server par Debian, gain de 40% sur le stockage et la RAM utilisée (pour l’os d’undercloud). @ju_hnny5
  36. 5 - Une plateforme ouverte - Une plateforme qui ne

    nécessite pas d’humain pour accéder/consommer des services - Les services sont consommables via des APIs - Ouverte à tout le monde aux Restos (techs) - Effort concentré @ju_hnny5
  37. 6 - Des technologies ouvertes - Favoriser des technologies libres

    quand c’est possible voir Open Source - Favoriser les technologies qui sont soutenues par une fondation plutôt qu’une entreprise sauf : - Si pas le choix technique - Si l’entreprise nous aide - Si ça répond totalement à notre besoin (acceptation du risque potentiel) @ju_hnny5
  38. 7 - Mesurer et optimiser - L’observabilité au coeur du

    projet pour optimiser au mieux les ressources et contrôler les coûts. - Pour être proactif - L’astreinte bénévole c’est pas simple ;) @StephaneTrognon
  39. 8 - Apporter l’outillage nécessaire - Pour éviter de se

    retrouver avec des données qui fuitent sur des plateformes publiques gratuites - Aider les équipes au quotidien sur le terrain (gestion des mots de passe, partage d’informations, sondes, etc). @ju_hnny5
  40. 9 - La sécurité : une nécessitée - “Parce que

    c’est l’affaire de tous, si c’est l’affaire de tous c’est celle de personne” - Notre rôle c’est d’héberger pour d’autres, il est crucial que la sécurité soit notre affaire @StephaneTrognon
  41. 10 - La veille techno - Assez personnel mais on

    le partage - Canal de partage Slack @StephaneTrognon / @ju_hnny5
  42. 11 - Instaurer un climat de confiance - La preuve

    par l’exemple - Les processus - La création de l’ÉQUIPE - Faire le lien avec l’AN au travers d’accompagnement @StephaneTrognon / @ju_hnny5
  43. Définitions AZ (Availability Zone) ◦ Une AZ, ou “zone de

    disponibilité” s’apparente à un datacenter ou une baie. Dans notre cas, un datacenter. Un datacenter ◦ Un datacenter est un endroit où sont stockées les données. Une région ◦ Une région, au sens “cloud” du terme signifie est attaché à une ville, par exemple, dans notre cas, la région “Chartres” possède 2 datacenters (AZs) nommées “Lucé/AD28” et “Le Coudray/CCIN”. @StephaneTrognon
  44. Overlay ≠ Underlay Ce que les gens voient vs Ce

    que nous voyons Définitions @StephaneTrognon
  45. Overlay ≠ Underlay Ce que les gens utilisent vs Ce

    que nous maintenons Définitions @ju_hnny5
  46. Quel(s) besoin(s) ? • Si c’est juste de la VM

    classique = Pas besoin de monter une plateforme de cloud • Si vous utilisez des services sur un cloud publiques, si oui, lesquels ? • Quelle volumétrie ? Besoin de scale ? @StephaneTrognon / @ju_hnny5
  47. Le contexte particulier des Restos … • Comme pour certains

    centres de distribution, les baies en DC nous sont offertent (d’ailleurs on recherche sur nos 3 régions), sauf que : ◦ C’est à durée limitée (souvent 3 ans renouvelable) ◦ On peut bouger donc à tout moment ▪ Comme un centre de distribution @StephaneTrognon
  48. Le contexte particulier des Restos … ◦ La capacité électrique

    est limitée (souvent 3kVA) ◦ La taille de la baie est plus ou moins toujours la même @ju_hnny5
  49. Design : Dans sa globalité • Chaque région est identique

    (au maximum) • Chaque AZ est identique (au maximum) ◦ Interconnectées (inter-az) @ju_hnny5
  50. On a besoin de vous ! Si vous avez de

    la place en datacenter, on recherche des baies sur Paris et Marseille.
  51. Une seule source de vérité ? • V1 : Spreadsheet

    pour stocker les informations • V2 : Inventaire de Rudder + Ansible + OctoDNS @StephaneTrognon
  52. Pour quels besoins ? • Stocker l'inventaire notre hardware en

    stock • Définir les ranges d’IPs que nous allons utiliser • Base pour le DNS de l’infra • Réserver des IPs sans risque d’overlap • Etre la source d’inventaire pour nos outils d’automatisation (OctoDNS, Ansible, Pulumi, MaaS, etc). @StephaneTrognon
  53. GLPI ? • Besoin d’une CMDB qui s’intègre avec notre

    outillage • CMDB qui reste “simple” d’utilisation ◦ La partie IPAM … • Besoin d’une CMDB “moderne” ◦ Peu d’intégration avec Ansible, Terraform, Pulumi, etc. • Très orienté IT, peu infra “moderne” @StephaneTrognon
  54. • Ça marche bien mais ça a quelques problèmes :

    ◦ Ça casse avec les upgrades Netbox (Cc Python) ◦ Ça insite de déployer le token Netbox sur chaque noeud ▪ Pas de contrôle en amont de ce qu’il rentre dans la CMDB @ju_hnny5
  55. Pour quels besoins ? • Pour des besoins internes et

    externes ◦ Le cloud à une portée publique de part l’exposition d’un certain nombre de services sur internet • Doit être fiable, résilient et avec une faible latence. • Diff entre underlay et overlay @ju_hnny5
  56. Le réseau 💀 • Réseau Out of band (OOB) •

    Réseau 1G (pour le management, provisionner les machines) • Réseau 10G 100G pour la production • V1 = 3 tier (L2) ◦ vxlan / vlan • V2 = Leaf/Spine/Super spine (Full L3) ◦ BGP EVPN + vxlan @ju_hnny5
  57. OPA : Réseau haute performance Réseau hérité de HPC :

    cluster de calcul (top 500 des plus gros calculateurs de la planète) @ju_hnny5
  58. Infiniband (OPA) Le réseau favoris des supercalculateurs, des hyperscalers et

    de l’IA ! Avantage(s) : - Faibles latences - Coûte pas très cher (surtout en occasion) - Gros débit (100G) Désavantage(s) : - Uniquement en local (sur une AZ) @ju_hnny5
  59. Ethernet (fibre) Le réseau pour interconnecter les AZs, les régions.

    Avantage(s) : - Support du VXLAN - Protocoles de routage Désavantage(s) : - Coûte plus cher - Moins performant (10G) - Suffisant pour l’extérieur @ju_hnny5
  60. Ethernet (RJ45) Le réseau pour l’IPMI (BMC) et l’OOB mais

    aussi le management/provisioning Avantage(s) : - Ça coûte pas cher - 1G de bande passante largement suffisant pour cet usage Désavantage(s) : - Ne peut pas être utilisé en prod (débit limité == 1G) @ju_hnny5
  61. Pourquoi ? Réduire : - Nos dépendances à des opérateurs

    extérieurs (par point de présence) - Autonomie stratégique : les adresses IP nous appartiennent et ne nous sont pas facturées (comme ça peut être le cas chez certains cloud providers). - Les coûts d’accès réseau - Les latences @ju_hnny5
  62. Pourquoi ? La portabilité - Tout comme pour les centres

    de distribution, nous pouvons être amené à bouger à n’importe quel moment - Posséder son propre réseau de backbone + ses adresses IP (v4/v6) permet ainsi d’éviter une interruption de service en cas d’indisponibilité d’une baie en cas de portabilité @ju_hnny5
  63. Autonomie des équipes Dans le fonctionnement actuel : - Pour

    chaque exposition publique d’un service, l’équipe du CDC doit intervenir pour modifier la configuration des edgelb (load-balancers HAProxy). - Crée donc une dépendance pour la consommation des services à l’équipe du CDC @StephaneTrognon / @ju_hnny5
  64. Only IPv6 à l’origin - Un pari risqué ? -

    Problème du “pauvre”, nous passons LIR (opérateur) - Les ranges d’IPv4 ça coûte super cher (environ 11k repas) - On cherche des mécènes si jamais 😜 - Notre origin (les régions) n’est disponible qu’en IPv6 @StephaneTrognon / @ju_hnny5
  65. Only IPv6 à l’origin - La dual stack disponible via

    le CDN : - IPv4 - IPv6 - La grande majorité des sites sont accessibles en IPv6 - Certains services sont mis à disposition à l’origin en IPv4 via des nat gateway (exemple : IoT) @StephaneTrognon / @ju_hnny5
  66. Finalité du backbone • Autonomie pour les équipes ◦ Peut

    réserver une adresse IP en fonction de quotas dans le cloud sans dépendance directe à l’équipe du CDC ! • Réduction des coûts • Meilleurs débits à moindre coût • Evolutivité @StephaneTrognon / @ju_hnny5
  67. On a besoin de vous ! Vous êtes opérateur, on

    a besoin de bande passant (peering), cross-co, et des liens type L2.
  68. Le DNS d’underlay* • Se doit d’être toujours disponible •

    Distribué par définition • Parce que rentrer des IPs en dur dans ses services c’est le mal !!!! • Isolation de chaque strate @StephaneTrognon
  69. Le DNS Qui fait autorité (détient les zones) : Qui

    résoud (sait auprès de qui chercher l’info) : @StephaneTrognon / @ju_hnny5
  70. Déploiement des enregistrements DNS • Nous sert pour les records

    : ◦ Internes (PowerDNS) ◦ Externes (Gandi) • Permet d’avoir un format unique pour créer nos records (pour les records statiques) • Récupérer les records depuis la source de vérité (Netbox) @ju_hnny5
  71. L’importance des TLDs Isoler en fonction du besoin. Ne pas

    mettre tous ses oeufs dans le même panier. En cas de problème sur un TLD commun, vous êtes complètement aveugle. Le choix fait : - Pour le réseau : .net - Pour l’infra : .org - Pour l’accès publique (interne) : .cloud @ju_hnny5
  72. Ne pas être aveugle en cas de problème = Séparation

    des besoins @StephaneTrognon / @ju_hnny5
  73. console. aucoeurdu. cloud <service> .<region>. aucoeurdu. clou d Point d’entrée

    unique : Accès aux services cloud de manière régionalisée : @ju_hnny5
  74. <service> .<region>. aucoeurdu. clou d Accès aux services cloud de

    manière régionalisée : Exemple : swift-1 .paris. aucoeurdu. cloud ns-2.marseille. aucoeurdu. cloud @ju_hnny5
  75. Du bare-metal • Globalement les serveurs ont en moyenne plus

    de 4 ans, moins de 10 ans. • A besoin d’être automatisé ◦ Eviter l’installation avec une “clé USB” • Uniformisation du hardware et des marques supportées (exemple : Dell, SuperMicro et Lenovo) @StephaneTrognon
  76. On a besoin de vous ! Vous avez des équipements

    qui prennent la poussière … N’hésitez pas à nous contacter !
  77. Du bare-metal as a service https://github.com/canonical/maas - AGPLv3 • MaaS

    fournit une API consommable • MaaS permet de mettre à jour les logiciels embarqués (typiquement IDRAC) • Utilisable avec Terraform/Pulumi • Fournit un CLI • Fournit un WebUI KISS 😎 @ju_hnny5
  78. Du bare-metal as a service Répond à notre architecture “cloud”

    au sein d’une zone de disponibilité (AZ). @StephaneTrognon
  79. Du bare-metal et le cycle de vie - Allumer/éteint automatiquement

    la machine via l’interface BMC (exemple IDRAC chez Dell) - Permet de déployer l’OS temporaire et définitive via le réseau en PXE et iPXE. @ju_hnny5
  80. Du bare-metal et le cycle de vie • New ◦

    La machine boot en PXE, MaaS détecte les paramètres BMC • Commissioning ◦ Remonte l’inventaire dans MaaS de la machine (CPU, RAM disque, NICs, GPUs) • Ready ◦ La machine est configurée côté BMC, MAAS peut gérer le “power control” @ju_hnny5
  81. Du bare-metal et le cycle de vie • Allocated ◦

    Configuration de la machine, RAM, bonding, addressing, RAID, LVM • Deploying ◦ La machine est ON avec l’OS et la configuration déployée • Releasing ◦ L’utilisateur a terminé avec cette machine, on peut wipe le disque et la réutiliser pour autre chose @ju_hnny5
  82. Nos commandements Une seule source de vérité tu auras Des

    déploiements totalement automatisés tu créeras Sous forme de MR tu contribureras @StephaneTrognon
  83. La gestion des artefacts - V1 : - States Terraform

    - States Pulumi - V2 : - des ISOs - Package Linux - … @StephaneTrognon
  84. Et nos images Docker ? - V1 : - Merci

    au Docker Hub - V2 : - Mise en place d’Harbor - Normalisation de nos images - Proxy Cache sur chaque AZ @StephaneTrognon
  85. Kube… pourquoi ? • Faciliter les déploiements et la mise

    à l’échelle des éléments de “l’undercloud”* • Gestion “as code” + • Astreinte friendly 🩷 @ju_hnny5
  86. Pourquoi ? @StephaneTrognon / @ju_hnny5 • Fournit les contrats d’API

    pour rendre l’infrastructure accessible et ouverte. ◦ Permet la gestion via : ▪ WebUI ▪ Provider Terraform/Pulumi ▪ CLI • Ce n’est pas une technologie “hype” non-maintainable. • Se connecte à nos bouts d’infrastructures existants*
  87. OpenStack from scratch (via Ansible) @ju_hnny5 • Horrible à maintenir

    (montées de versions) • Python 3 … (Cc les dépendances) • Ça ne scale pas des masses …
  88. V1 - TrueNas @ju_hnny5 Avantage(s) : - Une solution “pas

    chère” - Open Source - Support le NFS Désavantage(s) : - Qui ne scale pas vraiment … - La résilience … - Utile quand on n’a pas une grosse volumétrie de données
  89. V2 - Schrodinger Ceph @ju_hnny5 Infrastructure basée sur des dons

    : - Tailles de disques pas forcément identiques - Des disques de 1TO, 2TO et 8TO - Des disques de marques différentes - Certaines marques sont à éviter …
  90. V1 : Architecture classique 📄 Hyperviseur A Hyperviseur B Hyperviseur

    C Hyperviseur D Stockage A Stockage B Stockage C Stockage D @StephaneTrognon
  91. V2 - Architecture Hyper-convergée 📄 Hyperviseur A + Stockage Hyperviseur

    B + Stockage Hyperviseur C + Stockage Hyperviseur D + Stockage @ju_hnny5
  92. V2 - Architecture Hyper-convergée 📄 • Choix lié principalement à

    : ◦ La taille des baies que l’on a à disposition ◦ La techno de stockage utilisée (Cc Ceph) ◦ Ça coûte moins cher • Ça a quand même quelques soucis : ◦ La maintenance est plus compliquée (Cc les reboots) ◦ Faut un réseau qui dépote et des machines avec de bons CPUs @ju_hnny5
  93. V1 - Du monito…quoi ? • Le monitoring était inexistant

    ◦ “Attendre que ça gueule” • Arrivée rapide de plein de machines/vms ◦ Besoin d’automatisation et de monitoring • Utilisation de Prometheus seul en v1 @ju_hnny5
  94. V1 - Du monito…quoi ? • Le fonctionnement de la

    métrologie (via Prometheus notamment) : @StephaneTrognon
  95. V1 - Du monito…quoi ? • Le fonctionnement de la

    métrologie (via Prometheus notamment) : @StephaneTrognon
  96. Les sondes “Blackbox” • Utilisation de l’exporter “Prometheus Blackbox Exporter”

    ◦ Simple binaire, un peu chia** à configurer • Une VM présente dans un datacenter différent de nos propres DCs (VPS, etc). @ju_hnny5
  97. Status Page avec Uptime Kuma Pour les utilisateurs finaux :

    - Éviter que les gens viennent ping en direct “ça marche paaaaasssssss” - En réalité ils viennent quand même :( Désavantage de la solution (challenge en cours) : - Ne supporte pas Terraform pour l’ajout de nouvelles sondes - Ne se connecte pas à Prometheus/VictoriaMetrics @StephaneTrognon
  98. Arrivée de Consul • Base clé/valeur utilisant le protocole Raft

    pour la HA (comme ETCD de Kubernetes) • Fonctionne en mode client (agent) / server • Possède un DNS intégré (non utilisé pour le moment) @StephaneTrognon
  99. @ju_hnny5 L’alimentation électrique - Contrat à la consommation Plus je

    consomme, plus je paie … - “Plus un appareil consomme, plus il chauffe …”
  100. @ju_hnny5 OpenBareMetal • Ce n’est pas “Open Bar e ”

    ◦ Si la machine n’est pas disponible (car en mauvaise santé) il ne la déploie pas. • Si le pool mis à disposition n’est plus disponibles ◦ Il vient interroger les machines qui sont hors-pool et non-allouées (mais en “ready”) ◦ Dans le cas contraire, l’outil alerte
  101. @ju_hnny5 OpenBareMETALLLLLLLL !!!!!!! • Vient réaliser une requête PromQL (MetricsQL)

    ◦ Par défaut, toutes les 10s ◦ Sur un service donné (exemple, taux d’utilisation d’un pool KVM) ◦ Sur les sondes de température de la salle serveur ◦ https://crates.io/crates/prometheus-client • OpenBareMetal est un micro-service, fournit avec une Helm Chart pour l’installer
  102. @ju_hnny5 OpenBareMETALLLLLLLL !!!!!!! • Prise en compte de plugins (scripts)

    de pre/post provisioning ◦ Par défaut en bash • Configuration des seuils ◦ Seuil de déclanchement du provisioning ◦ Seuil de maintient ◦ Seuil de déclanchement du dé-provisioning ▪ Application du plugin (script) de drain/taint si besoin.
  103. @ju_hnny5 OpenBareMETALLLLLLLL !!!!!!! • Une CLI simple : ◦ obmetalctl

    pool list ◦ obmetalctl node list ◦ obmetalctl scale —pool <pool_name> —force
  104. @ju_hnny5 Le résultat … • Division par 3 de la

    consommation électrique /an/pop • Plus besoin d’humain pour faire “scale” le matériel.
  105. Mises à jours OS Automatique - Campagnes de patch management

    totalement automatisées 👀 @ju_hnny5
  106. • Vérifier l’application du benchmark CIS • Alerter sur les

    connexions hors heures ouvrées • Alerter en cas de CVE >= 7.0 sur Slack/Teams Un SIEM/XDR ? 👀 @StephaneTrognon
  107. Mises à jours des régions • Région de “Chartres” ◦

    Première région, région dite de “test” à terme ◦ Elle permet de valider que les mises à jours fonctionne. ◦ N'hébergera à terme que de la “sandbox”, “preprod (staging)” • Ordre des upgrades : Région “Chartres” > “Marseille” > “Paris” @StephaneTrognon
  108. Notifications dans des canaux dédiés dans Slack ◦ Via abonnement

    aux flux RSS des fournisseurs (comme Debian / Ubuntu) ou encore l’ANSSI Personne ne regarde vraiment ces alertes ◦ Car la grande majorité ne nous concernent pas (Coucou les alertes Microsoft) ◦ Trop d’endroits différents ◦ L’information n’est pas claire et pas uniformisée V1 - Maintenir une veille active @ju_hnny5
  109. Pourquoi le mettre en place? • Recevoir uniquement des alertes

    concernant notre infrastructure ◦ Lié à un vendor et/ou une version spécifique d’un produit • Comprendre plus facilement quel système est impacté par la faille ◦ Format unique d’affichage des informations • Traiter plus efficacement et rapidement les problèmes de sécurité @ju_hnny5
  110. Important pour la convergence et l’accès aux ressources des régions.

    Un utilisateur obtient des quotas alloués en fonction de son poste et des informations stockées sur son profil (notamment dans Keycloak). L’IAM @StephaneTrognon
  111. 2 règles importantes : • Les évolutions de configuration des

    machines sont appliquées via de la CI|CD • En cas de besoin, il est possible de se connecter via : Pas de connexion directe sur les machines ? @StephaneTrognon
  112. La documentation 1. L'onboarding pour les nouveaux arrivants. 2. L'architecture,

    vue d'ensemble de l'infrastructure et de son fonctionnement. 3. L'architecture détaillée qui vise à fournir le détail de chaque stack technique déployée. 4. Les runbooks qui visent à documenter les actions à réaliser dans le cadre du "run". 5. Les astuces/howtos 6. Les architecture review 7. Les post-mortems @StephaneTrognon / @ju_hnny5
  113. L’abstraction et l’uniformisation ❯ The ultimate helper for Le Cloud

    du Coeur Usage: cdctl [command] Available Commands: common Common usage completion Generate the autocompletion script for the specified shell devops DevOps made easy help Help about any command infra Manage infrastructure network Manage network onboarding Onboarding made easy version Show version information Flags: --config string config file (default is $HOME/.cdctl.yaml) -h, --help help for cdctl Use "cdctl [command] --help" for more information about a command. @ju_hnny5
  114. L’abstraction et l’uniformisation ❯ mkdir nginx-provisioning ❯ cd nginx-provisioning ❯

    cdctl devops ansible init-repo --application "Nginx" --group "nginx_server" . Created inventory/group_vars/nginx_server directory. You can now edit it to add your Ansible group variables. Created inventory/hosts.yml. You can now edit it to add your Ansible hosts. ❯ tree . . ├── README.md ├── Taskfile.yml ├── ansible.cfg ├── inventory │ ├── group_vars │ │ └── nginx_server │ │ └── consul.yml │ └── hosts.yml ├── playbook.yml └── roles 4 directories, 6 files @ju_hnny5
  115. L’abstraction et l’uniformisation ❯ cdctl common search “nginx” ❯ cdctl

    infra devices list -s <POP/AZ_NAME> +----+----------------+---------+-----------+------+--------------+--------------+------------------+----------------+ | ID | NAME | STATUS | SITE | RACK | ROLE | MANUFACTURER | TYPE | IP ADDRESS | +----+----------------+---------+-----------+------+--------------+--------------+------------------+----------------+ | 17 | restotest001 | Active | AD28-CHA1 | BS001| poc | Dell | PowerEdge R730xd | 10.10.10.10/24 | | 18 | restotest002 | Active | AD28-CHA1 | BS001| poc | Dell | PowerEdge R730xd | 10.10.10.11/24 | +----+----------------+---------+-----------+------+--------------+--------------+------------------+----------------+ @ju_hnny5
  116. Point d’entrée des dépôts Git • Taskfile = Makefile plus

    moderne ◦ Plus naturel pour des non-devs (Cc yaml) • Est appelé par la CI ◦ Permet de run les tâches localement (hors CI) • Logique identique sur chaque dépôt (peu importe l’outil appelé : Ansible, Terraform, Pulumi) ◦ task check ◦ task apply @StephaneTrognon
  117. • Stockage des roles et collections dans Gitlab • Chaque

    applicatif séparé possède son dépôt Git qui lui est dédié ◦ Exemple : ▪ Ansible/Collections/rudder ▪ Ansible/Playbooks/rudder-provisioning • Chaque déploiement est réalisé via la CI (Gitlab Runner) ◦ Les runners sont éphémères, sont créés dans Kubernetes en fonction du besoin. : Déploiement de configuration @StephaneTrognon
  118. • Stockage des projets dans Gitlab ◦ Des states dans

    MinIO • Utile pour abstraire l’accès à certains éléments d’infrastructure. ◦ Exemple : https://blog.jbriault.fr/pulumi-proxmox-cloudinit/ : Configuration et abstraction @ju_hnny5
  119. Context • Projet né à l’AD28 comme un autre projet

    en lien* • La supervision + alerting des chambres froides ◦ ça coûte cher, très cher (coût /an) ◦ différent d’une AD à une autre @ju_hnny5
  120. Sous le capot : Un peu de Technique … •

    Matériel standard ◦ ESP32 ou 8266 (standard de l’IoT) • Sondes certifiées pour de l’alimentaire @ju_hnny5
  121. Sous le capot : Un peu de Technique … -

    Standard de l’IoT : MQTT (messaging) - Envoie des données dans une base de données Open Source (VictoriaMetrics) @ju_hnny5
  122. En route vers l’industrialisation … • 1 boitier + alimentation

    USB C • 1 à 2 sondes de température certifiées de -55°C à + 125°C (4 sondes ultérieurement après tests complémentaires) @ju_hnny5
  123. Pour faire simple • Les sondes envoient les données dans

    le “Cloud” des Restos • Rétention d’un an • Données distribuées et sauvegardées @ju_hnny5
  124. Linux du Coeur • Besoin de stockage pour : ◦

    La mise à disposition des images ISO ◦ L’accès aux majs (repo geo-localisés) • Besoin d’outillage pour build les images ◦ CI/CD Gitlab @ju_hnny5
  125. Linux du Coeur • L’outillage pour le dépannage (Open Source)

    • La mise à disposition de packages customs ◦ Système de “GPO” pour Linux ◦ Déploiement de nouvelles apps @ju_hnny5
  126. Marque déposée Comme le sont : Propriété des Restos du

    Coeur. L’image est donc protégée, notamment dans son utilisation. @StephaneTrognon / @ju_hnny5
  127. Conclusion ? • Pas de technologie magique qui répond à

    tous les besoins • On apprend tous les jours de nos erreurs sur ce projet, c’est comme ça que l’on avance. ◦ On continuera à vous partager nos échecs • On est loin d’avoir fait économiser tous les repas que nous souhaitons mais avec l’aide de chacun-e, on s’y rapproche de jour en jour • On est qu’au début d’une magnifique aventure, pourquoi pas y contribuer vous aussi ? @StephaneTrognon / @ju_hnny5
  128. Conclusion ? Dans le futur : - Continuer de développer

    la plateforme et notamment le “Platform Engineering” utilisant le “Cloud du Coeur”. - De plus en plus d’IA permettant d’aider les bénévoles sur le terrain. @StephaneTrognon / @ju_hnny5
  129. Pourquoi pas toi ? - Chef-fe de projet - Développeur

    PHP, Python, Java - Admin / Ingé infrastructure - Des gens avec usage et non produit (SRE) @StephaneTrognon / @ju_hnny5
  130. Merci 🩷 Eric, Christine, Laurent, Antoine, Christophe, Chrystelle, Côme, Yves,

    Quentin, Bernard, Pierre, Fatima, Stéphane, Nicolas, Etienne, Steve, Xavier, Alexandre, Guillaume, Sébastien, Philippe, Adrien, Jolan, Christian, Daniel, Yvette, Thierry, Stéphanie, Pascal, Denis, Pierre-Antoine, Jean-François, Soraya, Frederic, Bruno, Yves, Jacky, Xavier, Alexandra, Agnes, Julien, Nadine, Fabienne, David, Donovan, Julie, Cédric … (Trouverez-vous les doublons ?) @ju_hnny5