Dans une démarche de Platform Engineering, l’un des premiers dilemmes est le choix de la plateforme d’exécution. Ici, on ne parle pas d’héberger directement des applications, mais bien des premières capacités de la plateforme elle-même, comme l’exposition réseau (DNS, Ingress, Certificats) ou l’observabilité.
Certains affirment : « Impossible de faire du Platform Engineering sans Kubernetes. »
Un axiome souvent répété, mais qui mérite d’être nuancé. Kubernetes peut grandement simplifier la vie… ou la compliquer.
Ayant expérimenté deux approches distinctes, nous avons pu comparer leurs forces et faiblesses. Voici comment et pourquoi nous avons fait le choix de Kubernetes pour OXP, notre plateforme orientée développeurs. Et comment nous avons refusé de baser notre autre plateforme TOC, sur K8S.
L’équipe derrière OXP n’est pas spécialisée en Infrastructure as Code (IaC). En revanche, elle maîtrise parfaitement les conteneurs, l’orchestration et le templating de déploiement.
Le choix s’est donc imposé naturellement : une infrastructure clé en main, élastique et disponible en un clic. Nous avons opté pour un cluster K8S managé chez Scaleway (nous aurions pu choisir un autre fournisseur, mais à notre échelle, tous se valent… alors autant consommer français !🐔).
Ce choix structurant en a entraîné deux autres, logiques :
Ce choix initial nous a permis de poser des bases solides très rapidement :
Mais ces avantages ont aussi leurs revers…
K8S a tendance à surévaluer les ressources nécessaires. Beaucoup de services connaissent un pic de consommation CPU/mémoire au démarrage, forçant le cluster à allouer des ressources massives… puis à les sous-exploiter. Et les requests et limits ne permettent pas toujours de régler simplement le problème.
Avec ArgoCD, le problème est aggravé : impossible d’échelonner proprement les démarrages, ce qui engendre un effet “ruée de la horde”. Résultat : des machines surdimensionnées, et des FinOps qui font des malaises en voyant la facture.
Les Cloud Providers proposent des node pools adaptés aux charges de travail hétérogènes :
yarn install
).En théorie, c’est séduisant. En pratique, chaque pool exige au minimum 3 nœuds, multipliant ainsi les machines sous-employées… et la facture.
K8S excelle sur les workloads stateless, mais devient un casse-tête dès qu’un stockage persistant est nécessaire. Héberger des bases de données ou du stockage objet en natif ? Mauvaise idée.
On finit par externaliser ces besoins via des services managés (S3, PostgreSQL), ce qui nous ramène à un paradigme IaC. Et comme Kubernetes ne gère pas nativement ces ressources, on se retrouve à bricoler des intégrations avec ArgoCD… avec plus ou moins de succès. Et même si des middleware comme Crossplane apportent un début de solution, on ajoute nécessairement une couche de complexité.
Jusqu’ici, nous avons détaillé pourquoi nous avons choisi Kubernetes pour OXP, ainsi que ses forces et limites. Mais est-ce un passage obligé pour du Platform Engineering ?
Pas forcément. Dans la seconde partie, nous explorerons une approche sans Kubernetes… et pourquoi elle peut être tout aussi pertinente.
Puisque nous devons de toute façon mixer workloads Kubernetes et ressources instanciées en IaC, pourquoi ne pas aller à fond dans cette approche ?
Le principal frein, surtout pour des novices, réside dans la complexité initiale :
Une fois ce duo infernal Terraform + Ansible dompté, les bénéfices sont nombreux :
Des machines parfaitement adaptées à chaque workload
Un contrôle total sur l’OS et ses packages
Une gestion fine des accès et du réseau
Côté FinOps, l’approche IaC est aussi plus prévisible :
Ce modèle brille particulièrement quand la plateforme est confiée à une équipe d’Ops expérimentée, habituée à ces pratiques.
Mais il a aussi ses limites :
Une fracture avec le reste de l’organisation
Une collaboration Git réduite au minimum
Des accélérateurs open-source moins nombreux
Il existe une troisième approche que nous avons encore peu explorée, mais qui mérite réflexion : l’option du 100 % managé. Les trois grands Cloud Providers (AWS, Azure, GCP) proposent leur propre vision du Platform Engineering, s’appuyant massivement sur leurs services managés.
Cette approche a de nombreux atouts, en particulier pour une organisation ayant choisi son CSP de référence et ne comptant pas en changer :
Des implémentations de référence accessibles
Un coût d’intégration réduit
Une élasticité quasi infinie
Cependant, le diable se cache dans les détails :
Un vendor lock-in presque inévitable
Une maîtrise FinOps complexe
Malgré ces contraintes, le 100 % managé peut être un excellent levier dans certains contextes :
En revanche, pour une plateforme devant garantir de la portabilité ou une maîtrise fine des coûts, ce choix peut rapidement devenir un piège.
Faut-il impérativement adosser le Platform Engineering à Kubernetes ? Faut-il au contraire tout miser sur l’Infrastructure as Code (IaC) ? Ou encore adopter une approche 100 % managée pour bénéficier des services natifs des Cloud Providers ?
Ces trois stratégies – Kubernetes et GitOps, l’infrastructure en pure IaC, et le tout managé – ont chacune leurs forces et leurs limites. Il n’existe pas de vérité absolue, seulement des compromis à arbitrer en fonction de trois grands facteurs :
Enfin, ce choix n’est pas figé dans le temps. Une organisation devrait démarrer avec une approche simple et évoluer vers plus de contrôle ou d’abstraction en fonction de sa maturité technologique et de ses besoins.
Le vrai enjeu du Platform Engineering n’est donc pas de choisir la bonne solution, mais d’adopter une démarche itérative, alignée sur les besoins et capacités de l’entreprise, et capable d’évoluer au fil du temps.