4 minutes de lecture

Construire sa Plateforme avec CNOE

Construire sa Plateforme avec CNOE

Le Platform Engineering

Le DevOps rencontre un problème : le principe “You build it, you run it” atteint ses limites.

Cette approche implique que l'équipe de développement, responsable de l'écriture du code, le déploie et le maintienne également en production.

Confier la responsabilité du déploiement aux développeurs aide à améliorer la qualité de service, car cela leur permet d'être en contact quotidien avec le fonctionnement de leur logiciel et avec le client, contrairement à l'approche traditionnelle.

Mais le nombre d’outils a explosé ces dernières années, entraînant pour les développeurs une augmentation de la charge mentale et une baisse de la productivité.

Le Platform Engineering cherche à résoudre ce problème en transformant les équipes ops traditionnelles en “cloud provider” interne aux entreprises. L’idée est d'apporter une couche d’abstraction qui masque la complexité de l’infrastructure à travers une plateforme pour créer, déployer et gérer des applications.

Cela améliore l'expérience des développeurs et simplifie le développement en cachant la complexité de l'infrastructure, leur permettant de se concentrer sur la création et l'innovation.

Dans le Platform Engineering, l’approche produit est fondamentale. Elle permet de déplacer le focus d’une plateforme technique à une solution qui répond aux besoins des développeurs. Cela implique un changement d’état d’esprit et d’organisation des équipes opérationnelles.

Qu’est-ce qu’une Plateforme ?

Prenons cet exemple d’architecture basée sur AWS (source https://platformengineering.org).

Pour une bonne plateforme, nous avons besoin des éléments suivants :

  • Un logiciel de contrôle de version pour le code source
  • Un outil de pipeline CI
  • Une registry pour stocker des artefacts
  • Un outil de déploiement continu
  • Un cluster pour le compute
  • Des bases de données
  • Des couches transversales : monitoring, réseau et sécurité

Mais surtout la nouvelle brique : le portail développeur.

Pour un bon portail développeur, il nous faut les composants suivants :

  • Une interface (web, CLI et API) pour créer des projets et déployer des ressources
  • Un software catalogs : un inventaire de services et d’API avec leur dépendances et les équipes responsables
  • Un tech radar pour évaluer la maturité des outils et déterminer s'ils sont assez stables et fiables pour être mis en production
  • De la documentation : standards, best practices, décisions d’architecture

Le portail développeur sera utilisé pour définir des golden paths.

Un golden path est un ensemble de bonnes pratiques et de workflows pour développer une application au sein d’une organisation.

Dans la suite de cet article, nous utiliserons Backstage pour le portail développeur. Backstage en deux mots est la solution de portail open source de Spotify.

Mais une fois cette architecture cible définie, comment démarrer la construction de sa plateforme ? Quelles technologies choisir ?

Cloud Native Operational Excellence

CNOE (prononcé Kuh.noo) pour Cloud Native Operational Excellence est une communauté open source qui cherche à répondre à ces questions. Son l’objectif est de faciliter l’adoption du Platform Engineering à travers des conseils, des outils et des architectures de références d’IDP.

CNOE se base sur les principes suivants :

  1. Open source first
  2. Community driven
  3. Tools and not Practices
  4. Powered by Kubernetes, but not limited to orchestrate to Kubernetes
  5. Built to be shared

CNOE fournit une liste de technologies de référence communément utilisées et supportées par la communauté pour chaque composant de l’IDP, ainsi que des implémentations de référence, mais pour l’instant seulement pour AWS.

Surtout, CNOE propose des outils, dont l’idpBuilder pour développer sa plateforme, que nous allons explorer dans les chapitres suivants.

Ma première Plateforme avec idpBuilder

Le Principe

idpBuilder est un outil en ligne de commande qui vous permet de déployer facilement une IDP complète sur votre machine locale, en s'appuyant sur des technologies standard comme Kubernetes, Argo CD et Backstage.

Quand idpBuilder crée un cluster IDP, il réalise les actions suivantes :

  1. Créer un cluster Kubernetes local avec Kind
    1. Créer un self-signed certificate
    2. Configure un Core DNS externe pour la résolution de nom de domaine en local
  2. Installer dans le cluster les packages principaux
    1. Argo CD pour le déploiement
    2. Gitea pour le code source et comme package registry
    3. Un ingress NGINX

Ensuite, nous pouvons installer différents packages (des applications Argo CD) pour ajouter des fonctionnalités. CNOE propose une collection de package pour nous aider à construire notre IDP. Pour l’exemple suivant, nous utiliserons l'implémentation de référence qui install :

  • Backstage comme Developer Portail
  • External Secrets pour gérer les secrets
  • Keycloak comme Identity Provider
  • Argo Workflows (optionnel pour la démonstration)
  • Spark Operator (optionnel pour la démonstration)

En pratique

Prérequis

  • Docker Desktop
  • kubectl

Installer idpBuilder en fonction de votre système d’exploitation : https://cnoe.io/docs/idpbuilder/installation

Lancer la commande :

idpbuilder create --use-path-routing --package https://github.com/cnoe-io/stacks//ref-implementation

Explication :

Le processus peut prendre 6 minutes environ.

Une fois terminé, il est possible de se connecter à Argo CD via l’url suivante : https://cnoe.localtest.me:8443/argocd

idpBuilder nous affiche dans le terminal le nom de l’utilisateur admin et la commande pour obtenir le secret qui a été généré :

idpbuilder get secrets -p argocd

Une fois connecté, vous pouvez voir sur l’interface d’Argo CD toutes les applications installées. Ensuite allons voir Backstage : https://cnoe.localtest.me:8443/

Nous sommes accueillis par la page de login de Keycloak. Un utilisateur admin a été créé par défaut user1. Il est possible d’obtenir son mot de passe avec la commande suivante :

idpbuilder get secrets -p keycloak -o json | jq '.[] | .data.USER_PASSWORD'

Nous allons pouvoir voir un exemple de golden path, en cliquant sur le bouton Create… Plusieurs templates s’offrent à nous. Dans Backstage un template est l’équivalent d’un golden path. Choisissons “Create a Basic Deployment”.

Nous pouvons saisir demo comme nom pour l’application et cliquer sur create.

Une fois terminée, nous pouvons retrouver notre application dans le catalogue et voir que l’application a bien été déployée par Argo CD. En coulisse :

  1. Backstage a créé le repository git avec le contenu du template
  2. Backstage a créé l’application Argo CD
  3. Backstage a enregistré l’application comme composant
  4. Argo CD a déployé l’application dans le cluster
  5. Backstage retrouve l’état de l’application via l’API d’Argo CD

Et voilà notre premier IDP en local. Parfait pour l’apprentissage et développer localement. Notez que vous avez un exemple de template avec des ressources AWS. Vous pouvez installer et configurer Crossplane pour déployer des ressources AWS.

Conclusion

Nous avons vu que le Platform Engineering répond aux limites du DevOps en simplifiant l’infrastructure pour les développeurs. Mais comment mettre en œuvre une plateforme rapidement et efficacement ? CNOE apporte une solution.

Avec une approche open source et communautaire, CNOE fournit des architectures de référence, des outils comme idpBuilder pour construire une Internal Developer Platform (IDP) sans partir de zéro. En quelques minutes, idpBuilder déploie localement une plateforme complète – avec Backstage, Argo CD, Keycloak et bien plus – permettant aux équipes de démarrer rapidement les développements de leur plateforme.

Cependant et malgré quelques partenaires prestigieux comme AWS, Adobe et Cisco la communauté autour du projet reste encore modeste avec 380 followers sur Github. Un projet encore jeune qui doit faire ses preuves et réussir à fédérer une communauté autour de lui. En l'état, nous ne recommandons pas de l’utiliser pour un environnement de production mais c’est un outil intéressant pour de l'apprentissage ou du prototypage.