Déploiement d’un cluster Cloud Foundry avec Stratos dans Azure et mise en oeuvre de pipelines de déploiement continu …

Image for post
Image for post

Je vais m’interesser à Cloud Foundry, une plate-forme d’application multi-cloud open source et multi-cloud sous forme de service (PaaS) régie par la Cloud Foundry Foundation (organisme indépendant sans but lucratif au sein de la Linux Foundation). Suite à la création de la Cloud Foundry Foundation, la plate-forme Cloud Foundry (code source et toutes les marques associées) a été transférée pour être détenue par la fondation Open Source. Elle est principalement écrite en Ruby, Go et Java.

Cloud Foundry est adaptée aux processus de livraison continue car elle prend en charge l’ensemble du cycle de développement de l’application, depuis le développement initial jusqu’au déploiement en passant par toutes les étapes de test. L’architecture en conteneurs de Cloud Foundry exécute des applications dans n’importe quel langage de programmation sur une variété de fournisseurs de services cloud. Cet environnement multi-cloud permet aux développeurs de tirer parti de la plate-forme cloud qui convient à des charges de travail applicatives spécifiques et de déplacer ces charges de travail en quelques minutes, sans modification de l’application.

Image for post
Image for post

Je lance le déploiement d’un cluster Cloud Foundry en profitant des templates ARM mis à disposition par la communauté et la fondation Cloud Foundry sur github. Cela passe par le déploiement de BOSH Director sur une VM qui servira de pivot au déploiement du cluster Cloud Foundry :

Image for post
Image for post
Image for post
Image for post

On dispose via azure d’un script shell accompagné d’un template ARM en JSON avec un fichier de paramêtre en JSON également pour ce déploiement :

Image for post
Image for post

Une fois le déploiement de BOSH Director, le déploiement du cluster Cloud Foundry se met en place (en un peu plus d’une heure au total) :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Je peux alors me logger sur la VM BOSH Director :

Image for post
Image for post

J’en profite alors pour dôter ce cluster Cloud Foundry d’un tableau de contrôle graphique qui va servir d’interface d’administration via le projet Cloud Foundry Stratos :

Je lance pour cela un manifeste en YAML dans un espace dédié créé au préalable :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Le déploiement de STRATOS est réussi et un endpoint m’est proposé pour accéder à cette interface :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

On a une visualisation des logs générés par cette application dans cette interface :

Image for post
Image for post

et les différents buildpacks disponibles pour le déploiement des applicatiosn dans Cloud Foundry :

Image for post
Image for post

Comme d’habitude, je peux me lancer dans le test du déploiement du traditionnel démonstrateur FranceConnect Agent dans le cluster :

Image for post
Image for post

On visualise le déploiement ici de 3 instances dans le tableau de bord de STRATOS :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

avec la route proposée :

Image for post
Image for post

et bien évidemment le démonstrateur :

Image for post
Image for post

Concourse s’est imposé comme l’une des solutions privilégiées pour créer des pipelines de déploiement continu dans Cloud Foundry.

Image for post
Image for post
Image for post
Image for post

Test rapide via Spring Cloud Pipelines qui propose un démonstrateur avec Concourse :

Image for post
Image for post

Dans une VM dédiée je lance la stack composée de Concourse et d’Artifactory avec Docker Compose :

git clone https://github.com/spring-cloud/spring-cloud-pipelines
cd spring-cloud-pipelines/concourse
./setup_docker_compose.sh
./start.sh <IP PUBLIQUE DE LA VM>
Image for post
Image for post

L’interface graphique de Concourse est accessible :

Image for post
Image for post

tout comme celle d’Artifactory :

Image for post
Image for post
Image for post
Image for post
git clone https://github.com/spring-cloud/spring-cloud-pipelines
cd spring-cloud-pipelines/
./tools/deploy-infra.sh
Image for post
Image for post
Image for post
Image for post

J’initie la création de trois espaces de test, stage et prod dans Cloud Foundry :

Image for post
Image for post
Image for post
Image for post

et j’installe le client fly nécessaire au lancement de pipelines dans Concourse :

Image for post
Image for post

le pipeline via cet exemple fourni par Spring Cloud est alors lancé dans Concourse :

Image for post
Image for post
Image for post
Image for post

Concourse permet l’exécution du pipeline via son interface graphique :

Image for post
Image for post

Je visualise alors les différentes étapes du pipelines proposées dans cet exemple avec Spring Cloud :

Image for post
Image for post

La phase de build avec Maven va générer les artefacts qui seront chargés dans Artifactory :

Image for post
Image for post

Et quand l’étape est terminée, une autre phase commence et ainsi de suite …

Image for post
Image for post

Via la plate-forme Gitlab.com il est également possible d’initier un pipeline de déploiement continu (un peu dans la logique GitOps) avec le mode Auto DevOps vers le cluster Cloud Foundry. Je pars pour cela d’un dépôt du démonstrateur FranceConnect Particulier :

Image for post
Image for post

avec un fichier de paramêtre .gitlab-ci.yml :

Image for post
Image for post

et bien évidemment d’un fichier de manifeste en YAML pour Cloud Foundry :

Image for post
Image for post

le pipeline est initié dans Gitlab à la création de ces deux fichiers dans le dépôt Git :

Image for post
Image for post
Image for post
Image for post

qui se termine correctement :

Image for post
Image for post

le démonstrateur sous la forme de 3 instances en exécution dans Cloud Foundry apparaît dans le tableau de bord de STRATOS :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

et l’endpoint fourni encore une fois :

Image for post
Image for post

Je peux enfin profiter de la brique DIEGO dans Cloud Foundry pour lancer directement des applications sous la forme d’images Docker :

Image for post
Image for post
Image for post
Image for post

Après avoir rendu la brique DIEGO disponible dans le cluster Cloud Foundry, je lance le test du déploiement du portail OpenAcadémie en Next.js :

Image for post
Image for post

OpenAcadémie apparait également dans l’interface de STRATOS :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

et cet endpoint en Wild Card DNS (via xip.io comme les exemples précédents) :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

On peut aller beaucoup plus lin en profitant notamment de Cloud Foundry Container Runtime que l’on avait vu sous le nom de Kubo et qui initie l’utilisation de Kubernetes :

Image for post
Image for post

Anciennement connu sous le nom de Project Kubo, un projet d’incubation au sein de la Cloud Foundry Foundation initié par des ingénieurs de Google et de Pivotal, Coud Foundry Container Runtime, alimenté par Kubernetes offre une méthode uniforme pour instancier, déployer et gérer des clusters Kubernetes hautement disponibles sur une plate-forme cloud utilisant BOSH :

Image for post
Image for post

Que l’on soit amené à manipuler des conteneurs et que l’on ait besoin de la flexibilité de ces derniers, ou que l’on soit amené à construire des applications 12 facteurs à partir de zéro, Cloud Foundry donne les outils dont on a besoin (avec donc ces deux moutures Cloud Foundry Application Runtime ou Cloud Foundry Container Runtime mais également avec d’autres briques/projets en développement) pour réaliser le job …

Image for post
Image for post

Above the clouds, the sky is always blue ...

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store