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

@ju_hnny5

Slide 38

Slide 38 text

Mais pourquoi ce projet ? @ju_hnny5

Slide 39

Slide 39 text

@ju_hnny5

Slide 40

Slide 40 text

@ju_hnny5 Antenne Nationale

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

@ju_hnny5

Slide 43

Slide 43 text

@ju_hnny5

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

@ju_hnny5

Slide 46

Slide 46 text

@ju_hnny5 Connecter ce beau monde

Slide 47

Slide 47 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 48

Slide 48 text

@ju_hnny5

Slide 49

Slide 49 text

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

Slide 50

Slide 50 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 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

Pas de connexion directe sur les machines 👀 @ju_hnny5

Slide 54

Slide 54 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 55

Slide 55 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 56

Slide 56 text

reNgine : Pour la reco 👀

Slide 57

Slide 57 text

Règle 3 : Infrastructure immuable @ju_hnny5

Slide 58

Slide 58 text

@ju_hnny5 + = 🩷

Slide 59

Slide 59 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 60

Slide 60 text

Tout n’est pas immuable @ju_hnny5

Slide 61

Slide 61 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 62

Slide 62 text

@ju_hnny5

Slide 63

Slide 63 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 64

Slide 64 text

: Maintenir une base commune @ju_hnny5

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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

Slide 67

Slide 67 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 68

Slide 68 text

Règle 5 : Le partage @ju_hnny5

Slide 69

Slide 69 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 70

Slide 70 text

Parlons de Cloud maintenant @ju_hnny5

Slide 71

Slide 71 text

Under-undercloud Sous le capot @ju_hnny5

Slide 72

Slide 72 text

No content

Slide 73

Slide 73 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 74

Slide 74 text

Kube… pourquoi ? @ju_hnny5

Slide 75

Slide 75 text

Blue/Green pattern @ju_hnny5

Slide 76

Slide 76 text

Le véritable “undercloud” Le moteur @ju_hnny5

Slide 77

Slide 77 text

@ju_hnny5

Slide 78

Slide 78 text

Quoi ?! OpenStack en 2024 ?! @ju_hnny5

Slide 79

Slide 79 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 80

Slide 80 text

@ju_hnny5

Slide 81

Slide 81 text

@ju_hnny5 MOCHE Utilisé dans l’underlay

Slide 82

Slide 82 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 83

Slide 83 text

OpenStack + Kubernetes (underlay) @ju_hnny5

Slide 84

Slide 84 text

@ju_hnny5 OpenStack et les micro-services

Slide 85

Slide 85 text

@ju_hnny5

Slide 86

Slide 86 text

L’auto-partage de l’informatique @ju_hnny5

Slide 87

Slide 87 text

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

Slide 88

Slide 88 text

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

Slide 89

Slide 89 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 90

Slide 90 text

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

Slide 91

Slide 91 text

@ju_hnny5 @ju_hnny5 Le Cloud du Coeur

Slide 92

Slide 92 text

No content

Slide 93

Slide 93 text

@ju_hnny5 Overlay Underlay

Slide 94

Slide 94 text

@ju_hnny5 Gérer ses secrets

Slide 95

Slide 95 text

@ju_hnny5 Overlay Underlay

Slide 96

Slide 96 text

@ju_hnny5 Overlay Underlay

Slide 97

Slide 97 text

Hyper-convergence @ju_hnny5

Slide 98

Slide 98 text

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

Slide 99

Slide 99 text

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

Slide 100

Slide 100 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 101

Slide 101 text

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

Slide 102

Slide 102 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 103

Slide 103 text

@ju_hnny5

Slide 104

Slide 104 text

+ = 🩷 @ju_hnny5

Slide 105

Slide 105 text

Kube-ception ? @ju_hnny5

Slide 106

Slide 106 text

@ju_hnny5

Slide 107

Slide 107 text

@ju_hnny5 Underlay Overlay Ça tourne dans des vms

Slide 108

Slide 108 text

Fournir du service fiablement et rapidement @ju_hnny5

Slide 109

Slide 109 text

La source de vérité

Slide 110

Slide 110 text

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

Slide 111

Slide 111 text

@ju_hnny5 CMDB Configuration Management Database

Slide 112

Slide 112 text

@ju_hnny5 V3

Slide 113

Slide 113 text

@ju_hnny5

Slide 114

Slide 114 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 115

Slide 115 text

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

Slide 116

Slide 116 text

@ju_hnny5 @ju_hnny5

Slide 117

Slide 117 text

Les services @ju_hnny5

Slide 118

Slide 118 text

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

Slide 119

Slide 119 text

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

Slide 120

Slide 120 text

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

Slide 121

Slide 121 text

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

Slide 122

Slide 122 text

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

Slide 123

Slide 123 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 124

Slide 124 text

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

Slide 125

Slide 125 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 126

Slide 126 text

No content

Slide 127

Slide 127 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 128

Slide 128 text

On a besoin de vous ! @ju_hnny5

Slide 129

Slide 129 text

No content

Slide 130

Slide 130 text

@ju_hnny5

Slide 131

Slide 131 text

Merci pour votre écoute

Slide 132

Slide 132 text

Un petit retour ? @ju_hnny5

Slide 133

Slide 133 text

Merci ! @ju_hnny5

Slide 134

Slide 134 text

Des questions ?