Slide 1

Slide 1 text

Comment nous avons transformé les Restos du Coeur en Cloud Provider Julien Briault (@ju_hnny5) [email protected]

Slide 2

Slide 2 text

R E S T O S *merci à l’ami Denis (Zwindler)

Slide 3

Slide 3 text

Rex de 3 ans de construction d’une infrastructure en milieu associatif Julien Briault [email protected]

Slide 4

Slide 4 text

Disclaimer 1 Nous n’avons pas transformés les Restos du Coeur en Cloud Provider @ju_hnny5

Slide 5

Slide 5 text

Disclaimer 2 Sorry pour le fran-glais @ju_hnny5

Slide 6

Slide 6 text

Disclaimer 3 RDC = Restos du Coeur République Démocratique du Congo Rez de chaussée @ju_hnny5

Slide 7

Slide 7 text

Julien Briault Uptime 26y Ingé réseau | SRE @ Auteur @ Linux Pratique Conférencier (DevoxxFR, VoxxedDays Luxembourg, Google DevFest) Responsable Infra (bénévole) @ #whoami @ju_hnny5

Slide 8

Slide 8 text

@ju_hnny5

Slide 9

Slide 9 text

Il y a 39 ans … @ju_hnny5

Slide 10

Slide 10 text

“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.”

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Les RDC en quelques chiffres … @ju_hnny5 ● 171 millions de repas servis (2022-2023) ○ +1,3 millions (2021-2022) ● 112 associations départementales ● 78 000 bénévoles ○ ~ 35 000 bénévoles utilisant l’informatique au quotidien ● 2 333 lieux d’accueil (centre de distribution, etc).

Slide 13

Slide 13 text

Le fonctionnement global des Restos @ju_hnny5

Slide 14

Slide 14 text

Le fonctionnement global des Restos @ju_hnny5 Antenne/Association Nationale Délégations régionale Antennes/Associations Départementale Centres de distribution Maraudes Etc

Slide 15

Slide 15 text

“Tant que nous sommes là, c’est que ça ne va pas.” @ju_hnny5

Slide 16

Slide 16 text

@ju_hnny5 Antenne/Association Nationale Délégations régionale Antennes/Associations Départementale Centres de distribution Maraudes Etc

Slide 17

Slide 17 text

Premiers constats à mon arrivée aux Restos @ju_hnny5

Slide 18

Slide 18 text

La solitude du début @ju_hnny5

Slide 19

Slide 19 text

De voir faire avec l’historique … @ju_hnny5

Slide 20

Slide 20 text

Le pc qui “traine dans un coin” @ju_hnny5

Slide 21

Slide 21 text

Le pc qui “traine dans un coin” @ju_hnny5 Des sauvegardes ?? ☠ De la redondance ?!? 💀 Y’a quoi là dessus ? 👀 Ça x112 ? (spoiler : presque)

Slide 22

Slide 22 text

Infra v0.1 : Le “DC aux WC” Oui, oui, c’est bien un WC …

Slide 23

Slide 23 text

@ju_hnny5

Slide 24

Slide 24 text

@ju_hnny5

Slide 25

Slide 25 text

@ju_hnny5 Antenne/Association Nationale Délégations régionale Antennes/Associations Départementale Centres de distribution Maraudes Etc

Slide 26

Slide 26 text

Infra v1 : 2 vraies baies

Slide 27

Slide 27 text

Infra v1 : 2 vraies baies @ju_hnny5

Slide 28

Slide 28 text

@ju_hnny5

Slide 29

Slide 29 text

@ju_hnny5

Slide 30

Slide 30 text

Infra v2 : Des nouveaux* serveurs 👀

Slide 31

Slide 31 text

C’est installé où ? @ju_hnny5

Slide 32

Slide 32 text

Chartres @ju_hnny5

Slide 33

Slide 33 text

On y stock… de la nourriture et de la donnée… @ju_hnny5

Slide 34

Slide 34 text

Infra v2 : 3 baies 52U ? @ju_hnny5

Slide 35

Slide 35 text

@ju_hnny5 On a commencé à construire …

Slide 36

Slide 36 text

Infra v2 : 3 baies 52U - Premier POP 98% de dons

Slide 37

Slide 37 text

Résilience @ju_hnny5

Slide 38

Slide 38 text

Quorum @ju_hnny5

Slide 39

Slide 39 text

@ju_hnny5 Pour les humains …. Et les machines ! Dans la prise de décision Pour la HA

Slide 40

Slide 40 text

Mais pourquoi ce projet ? @ju_hnny5

Slide 41

Slide 41 text

@ju_hnny5

Slide 42

Slide 42 text

@ju_hnny5 Antenne Nationale

Slide 43

Slide 43 text

@ju_hnny5 Antenne/Association Nationale Délégations régionale Antennes/Associations Départementale Centres de distribution Maraudes Etc

Slide 44

Slide 44 text

@ju_hnny5

Slide 45

Slide 45 text

@ju_hnny5

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

@ju_hnny5

Slide 48

Slide 48 text

@ju_hnny5 L’organisation

Slide 49

Slide 49 text

On aime les chats ! (obviously)

Slide 50

Slide 50 text

L’organisation de l’équipe - Techniciens (x3) - Admins/Ingés (x5)

Slide 51

Slide 51 text

L’organisation de l’équipe Points de synchro - Une fois par semaine - Durée variable - Tous les lundis soir (à 21h00) - Organisation : - Une partie sur les sujets en cours et les nouveaux (point d’avancement) - Une partie sur la présentation des nouveaux arrivants s’il y en a - Présentation des nouvelles architectures review + noter la/les décision(s) - Discussion libre

Slide 52

Slide 52 text

L’état d’esprit L’état d’esprit

Slide 53

Slide 53 text

L’état d’esprit : Culture du retour

Slide 54

Slide 54 text

@ju_hnny5 Surveillance et observabilité

Slide 55

Slide 55 text

Surveillance et observabilité 1. Toute application déployée se doit d’être observée 2. Les alertes doivent être configurées 3. Les alertes doivent avoir en relation : a. La documentation “runbook” b. Les graphiques

Slide 56

Slide 56 text

Surveillance et observabilité

Slide 57

Slide 57 text

Surveillance et observabilité

Slide 58

Slide 58 text

@ju_hnny5 Rétroaction continue

Slide 59

Slide 59 text

Rétroaction continue ● Utiliser les retours utilisateurs et les métriques de performance pour améliorer en continue les performances des applications déployées.

Slide 60

Slide 60 text

@ju_hnny5 L’amélioration continue

Slide 61

Slide 61 text

L’amélioration continue ● On accepte d’être humain ○ L’humain est par définition imparfait

Slide 62

Slide 62 text

@ju_hnny5 Itération rapide

Slide 63

Slide 63 text

Itération rapide - Ajustements rapides en fonction des retours et des besoins.

Slide 64

Slide 64 text

Itération rapide ➔ Multi-envs : ◆ Sandbox/Dev ● Pour jouer sans rien casser ! ◆ Preprod/Staging ● Appliquer/tester sur la Merge Request avant de merge. ◆ Prod ● Appliquer sur la production ! ✔

Slide 65

Slide 65 text

@ju_hnny5 Blameless

Slide 66

Slide 66 text

Blameless postmortems

Slide 67

Slide 67 text

Blameless postmortems

Slide 68

Slide 68 text

@ju_hnny5 Connecter ce beau monde

Slide 69

Slide 69 text

Le réseau 💀 ● Réseau Out of band (OOB) ● Réseau 1G (pour le management, provisionner les machines) ● Réseau 10G pour la production ● V1 = 3 tier (L2) ○ vxlan / vlan ● V2 = Leaf/Spine/Super spine (Full L3) ○ BGP EVPN + vxlan @ju_hnny5

Slide 70

Slide 70 text

@ju_hnny5

Slide 71

Slide 71 text

Règle 1 : Du code (partout) sur l’infra ? @ju_hnny5

Slide 72

Slide 72 text

Tout est code* … 📄 ● Limiter le “Shadow IT” ● Déploiements accélérés ● Rollbacks facilités ● Application des bonnes pratiques de sécurité (SAST/DAST) et de développement (linter, etc) dans nos pipelines (CI/CD) ● Revue des modifications, travail en équipe facilité, oeil externe @ju_hnny5

Slide 73

Slide 73 text

Tout est code … 📄 @ju_hnny5 https://www.youtube.com/watch?v=aZvsplOAd7c https://www.youtube.com/watch?v=IAwu-WCN6Nw

Slide 74

Slide 74 text

Règle 2 : La sécurité au coeur du projet @ju_hnny5

Slide 75

Slide 75 text

Pas de connexion directe sur les machines 👀 @ju_hnny5

Slide 76

Slide 76 text

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 ? @ju_hnny5

Slide 77

Slide 77 text

● 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 ? 👀 @ju_hnny5

Slide 78

Slide 78 text

reNgine : Pour la reco 👀

Slide 79

Slide 79 text

Règle 3 : Infrastructure immuable @ju_hnny5

Slide 80

Slide 80 text

@ju_hnny5 + = 🩷

Slide 81

Slide 81 text

● Déploiement des noeuds immuables ○ Pour la mise à l’échelle automatisée ○ Déclenchements automatisables via la REST API MaaS + Packer = 🩷 @ju_hnny5

Slide 82

Slide 82 text

Tout n’est pas immuable @ju_hnny5

Slide 83

Slide 83 text

● Déploiement des noeuds muables ○ Déploiement des agents* via cloud-init ● Gérer le cycle de vie du serveur ○ Gérer le serveur physique comme une VM ○ Redéployer facilement si besoin ● Création des enregistrements DNS dédiés à l’administration (parfait pour provisionner en suite les noeuds avec Ansible) MaaS en renfort ! 🦾 @ju_hnny5

Slide 84

Slide 84 text

@ju_hnny5

Slide 85

Slide 85 text

- Déployer : - Les utilisateurs et clés SSH + configuration SSHd - La configuration DNS - Hardening (Application des règles du benchmark CIS) - Déploiement du MOTD - Installation des paquets par défaut - L’agent se lance toutes les 2mn : - Corrige en cas de détection de drifts - Report des corrections apportées sur Slack : Maintenir une base commune @ju_hnny5

Slide 86

Slide 86 text

: Maintenir une base commune @ju_hnny5

Slide 87

Slide 87 text

- Campagnes de patch management totalement automatisées 👀 : Un parc up-to-date ! @ju_hnny5

Slide 88

Slide 88 text

Règle 4 : Déploiement de configuration @ju_hnny5

Slide 89

Slide 89 text

● 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 @ju_hnny5

Slide 90

Slide 90 text

Règle 5 : Le partage @ju_hnny5

Slide 91

Slide 91 text

● L’infra doit être partagée ○ Accessible à tous aux Restos (équipes informatique) ○ Effort concentré : une app avec un intérêt peut être proposée et mise à disposition de tout le monde ● Tout doit être documenté ○ Exemple : “run books” en cas de pépin sur l’infra ■ Stack déployée = obligatoirement documentée ○ Pas de rétention d’information ■ On est pas éternel ● Construction commune sans oublier les objectifs Le partage @ju_hnny5

Slide 92

Slide 92 text

Parlons de Cloud maintenant @ju_hnny5

Slide 93

Slide 93 text

Under-undercloud Sous le capot @ju_hnny5

Slide 94

Slide 94 text

No content

Slide 95

Slide 95 text

Kube… pourquoi ? ● Faciliter les déploiements et la mise à l’échelle des éléments de “l’undercloud”* ● Gestion “as code” + ● Astreinte friendly 🩷 @ju_hnny5

Slide 96

Slide 96 text

Kube… pourquoi ? @ju_hnny5

Slide 97

Slide 97 text

Blue/Green pattern @ju_hnny5

Slide 98

Slide 98 text

Le véritable “undercloud” Le moteur @ju_hnny5

Slide 99

Slide 99 text

@ju_hnny5

Slide 100

Slide 100 text

Quoi ?! OpenStack en 2024 ?! @ju_hnny5

Slide 101

Slide 101 text

@ju_hnny5 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

Slide 102

Slide 102 text

@ju_hnny5

Slide 103

Slide 103 text

@ju_hnny5 MOCHE Utilisé dans l’underlay

Slide 104

Slide 104 text

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 …

Slide 105

Slide 105 text

OpenStack + Kubernetes (underlay) @ju_hnny5

Slide 106

Slide 106 text

@ju_hnny5 OpenStack et les micro-services

Slide 107

Slide 107 text

@ju_hnny5

Slide 108

Slide 108 text

L’auto-partage de l’informatique @ju_hnny5

Slide 109

Slide 109 text

Overlay ≠ Underlay @ju_hnny5 Ce que les gens voient vs Ce que nous voyons

Slide 110

Slide 110 text

Overlay ≠ Underlay @ju_hnny5 Ce que les gens utilisent vs Ce que nous maintenons

Slide 111

Slide 111 text

OpenStack ? ● Les antennes départementales peuvent déployer leur service sur l’infrastructure de manière transparente ● L’antenne nationale a à sa disposition des ressources qui peuvent se mettre à l’échelle à moindre coût @ju_hnny5

Slide 112

Slide 112 text

“Les besoins vont bien au delà d’un simple besoin de VM (dans un même endroit).” @ju_hnny5

Slide 113

Slide 113 text

@ju_hnny5 @ju_hnny5 Le Cloud du Coeur

Slide 114

Slide 114 text

No content

Slide 115

Slide 115 text

@ju_hnny5 Overlay Underlay

Slide 116

Slide 116 text

@ju_hnny5 Gérer ses secrets

Slide 117

Slide 117 text

@ju_hnny5 Overlay Underlay

Slide 118

Slide 118 text

@ju_hnny5 Overlay Underlay

Slide 119

Slide 119 text

Hyper-convergence @ju_hnny5

Slide 120

Slide 120 text

Architecture classique 📄 Hyperviseur A Hyperviseur B Hyperviseur C Hyperviseur D Stockage A Stockage B Stockage C Stockage D @ju_hnny5

Slide 121

Slide 121 text

Architecture Hyper-convergée 📄 Hyperviseur A + Stockage Hyperviseur B + Stockage Hyperviseur C + Stockage Hyperviseur D + Stockage @ju_hnny5

Slide 122

Slide 122 text

@ju_hnny5 L’hyper-convergence ? ● Matériel : PowerEdge R730xd ○ Hyperviseur (KVM) + Ceph embarqué (OSDs en façade) ○ Noeuds : ■ Bi-Xeon (32 coeurs) ■ 512 -> 1k RAM ■ x10 OSDs (entre 2 et 4TO /disque) ■ Réseau 10G ● Ceph-mon, manager, dashboard sont embarqués dans Kubernetes

Slide 123

Slide 123 text

Une gestion de l’énergie particulière @ju_hnny5

Slide 124

Slide 124 text

@ju_hnny5 Laisser les serveurs allumés ? ● Contrat à la consommation ○ Plus je consomme, plus je paie ● Allumer/éteindre de manière totalement automatisée

Slide 125

Slide 125 text

OpenBareMetal : C’est pas Versailles ici ! Julien Briault (@ju_hnny5) [email protected]

Slide 126

Slide 126 text

L’humain @ju_hnny5

Slide 127

Slide 127 text

@ju_hnny5 L’humain ● Éviter les tâches ingrates ○ C’est relou de devoir allumer/éteindre manuellement des machines … ❕ ● Scale automatiquement… Nope ☠ ○ Il suffit que personne ne soit dispo au moment où on a besoin de mettre à l’échelle le matériel, ça ne fonctionne pas très bien…

Slide 128

Slide 128 text

@ju_hnny5 La climatisation

Slide 129

Slide 129 text

@ju_hnny5

Slide 130

Slide 130 text

+ = 🩷 @ju_hnny5

Slide 131

Slide 131 text

Kube-ception ? @ju_hnny5

Slide 132

Slide 132 text

@ju_hnny5

Slide 133

Slide 133 text

@ju_hnny5 Underlay Overlay Ça tourne dans des vms

Slide 134

Slide 134 text

@ju_hnny5 Ici pour être plus exact !

Slide 135

Slide 135 text

L’observabilité @ju_hnny5

Slide 136

Slide 136 text

@ju_hnny5 L’observabilité

Slide 137

Slide 137 text

@ju_hnny5 L’observabilité https://www.youtube.com/watch?v=bzLtWjUj2k0&t=1150s

Slide 138

Slide 138 text

@ju_hnny5 L’observabilité : Service discovery ● Une machine apparaît = Automatiquement supervisée ○ Chaque machine expose ses services à superviser ● Gain de temps considérable

Slide 139

Slide 139 text

Fournir du service fiablement et rapidement @ju_hnny5

Slide 140

Slide 140 text

La source de vérité

Slide 141

Slide 141 text

Une seule source de vérité ? ● V1 : Spreadsheet pour stocker les informations ● V2 : Inventaire de Rudder + Ansible + OctoDNS @ju_hnny5

Slide 142

Slide 142 text

@ju_hnny5 CMDB Configuration Management Database

Slide 143

Slide 143 text

@ju_hnny5 V3

Slide 144

Slide 144 text

@ju_hnny5

Slide 145

Slide 145 text

Netbox (WebUI, CLI, Agent) ● Netbox Agent : remontée journalière de l’inventaire des machines (écrit en Go) ● nbctl : permet d'interagir avec Netbox en CLI, réserver des adresses IP pour les équipements qui ne sont pas déployées par MaaS* (écrit en Go) ● La WebUI permettant d’afficher et visualiser les éléments (racks, IPAM, record DNS des machines, etc). https://github.com/infra-rdc/nbctl @ju_hnny5

Slide 146

Slide 146 text

+ Open Source = 🩷 @ju_hnny5 https://github.com/infra-rdc

Slide 147

Slide 147 text

@ju_hnny5 @ju_hnny5

Slide 148

Slide 148 text

La documentation

Slide 149

Slide 149 text

La documentation

Slide 150

Slide 150 text

La documentation On y retrouve : - L'onboarding pour les nouveaux arrivants - L'architecture, vue d'ensemble de l'infrastructure et de son fonctionnement - L'architecture détaillée qui vise à fournir le détail de chaque stack technique déployée - Les runbooks qui visent à documenter les actions à réaliser dans le cadre du "run" - La communication, cette section vise à fournir les templates de communication et surtout, où communiquer l'information (à qui) - Les astuces/howtos - Les architecture review - Les post-mortems

Slide 151

Slide 151 text

La gestion de projets

Slide 152

Slide 152 text

La gestion de projets - Mode Kanban.

Slide 153

Slide 153 text

Pour la planète 👀

Slide 154

Slide 154 text

Bon pour la planète ! - L'infrastructure est construite à 98% de dons et doit continuer à le rester. ☁ - La recherche de nouveaux dons de matériel informatique pour l'infrastructure doit être une priorité sur l'achat de matériel (sauf pour les consommables qui sont plus compliqués à récupérer en don).

Slide 155

Slide 155 text

Economie(s)

Slide 156

Slide 156 text

L’argent On parle au maximum de repas. Éliminer/diminuer les facteurs coûts importants : - Le matériel - Grâce aux dons - L’énergie - Grâce aux partenariats - La matière grise - Grâce au bénévolat

Slide 157

Slide 157 text

Déployer un service (sans trop se mouiller)

Slide 158

Slide 158 text

Déployer un service Pour qu’un service soit considéré comme “en production” : - Passer par une archi-review (validation en équipe de la solution) - Gestion “as-code” via dépôt Git (et déploiement via CI/CD) - Documentation d’architecture + archi détaillée - Documentation “runbook” - Alerting + observabilité - Communication sur #annnonces-infrastructure

Slide 159

Slide 159 text

Les services @ju_hnny5

Slide 160

Slide 160 text

@ju_hnny5 *Environ 1,5 millions de repas distribués en plus.

Slide 161

Slide 161 text

@ju_hnny5 *Environ 700 000 repas distribués en plus.

Slide 162

Slide 162 text

@ju_hnny5 *Environ 6 millions de repas distribués en plus. Sondes de température

Slide 163

Slide 163 text

@ju_hnny5 Sondes de température https://www.youtube.com/watch?v=bzLtWjUj2k0&t=1150s

Slide 164

Slide 164 text

@ju_hnny5 *Environ 700 k de repas distribués en plus.

Slide 165

Slide 165 text

@ju_hnny5 ● Hotspot Wi-Fi (Wi-Fi BYOD et interne) ● Accepter les CGU sur le Wi-Fi ouvert (BYOD) ○ N’a accès qu’à internet (filtré) ● Filtrage de certains sites Web (via DNS menteur) ● Authentification des utilisateurs en SSO pour le Wi-Fi interne ● Enregistrement sur 1 an des données techniques de connexion Wi-Fi

Slide 166

Slide 166 text

@ju_hnny5 *Environ 100 k de repas distribués en plus.

Slide 167

Slide 167 text

@ju_hnny5 Donner une seconde vie aux objets

Slide 168

Slide 168 text

@ju_hnny5

Slide 169

Slide 169 text

@ju_hnny5 *Environ 12 millions de repas distribués en plus. +30 autres services

Slide 170

Slide 170 text

@ju_hnny5 Quelques chiffres pour terminer 📝 ● Environ : ○ 700 VMs (éphémères pour la plupart) ○ 400 Pods (monte jusqu’à 700) ○ 80 serveurs/AZ (allumés en fonction du besoin) ● 6 personnes actives sur le projet (on recrute 󰗞) ● Plusieurs millions d’euros économisés (et donc de repas distribués) ● Une dizaine d’entreprises partenaires

Slide 171

Slide 171 text

No content

Slide 172

Slide 172 text

@ju_hnny5 Au-delà de l’infra c’est surtout une équipe ● Fournir une équipe d’experts aux Restos ○ L’expertise coûte chère à une association ● Aider les ressources nationales qui sont en sous-nombre (2 pour la partie pure technique…)

Slide 173

Slide 173 text

On a besoin de vous ! @ju_hnny5

Slide 174

Slide 174 text

No content

Slide 175

Slide 175 text

@ju_hnny5

Slide 176

Slide 176 text

Merci pour votre écoute

Slide 177

Slide 177 text

Un petit retour ? A vous de jouer ! @ju_hnny5

Slide 178

Slide 178 text

Merci ! @ju_hnny5

Slide 179

Slide 179 text

Des questions ?

Slide 180

Slide 180 text

No content