Introduction
Contexte et enjeux
Apparues au début des années 2000, les infrastructures à base de conteneurs sont devenues un des outils clés de l'informatique moderne. Cette tendance a encore été renforcée par le développement des infrastructures dans le cloud qui supportent de plus en plus souvent le déploiement de conteneurs. On constate donc une multiplication de l'usage des conteneurs, et cette demande en termes de conteneurs va sans doute encore augmenter dans les prochaines années.
Une multiplication de l'usage des conteneurs
Qu’il s’agisse d’applications mises en place au sein des services informatiques ou dans le cadre de projets de recherche ou de fin d'études (mémoires de master…), les demandes pour des infrastructures à base conteneurs se multiplient à l'UCLouvain. Citons par exemple : les infrastructures web pour le nouveau portail web UCLouvain en Drupal (SISG), l'infrastructure elastic search pour le service des bibliothèques (BIB et SISG), l'infrastructure pour DIGIT (SIPS)...
Par ailleurs ce recours de plus en plus fréquent aux conteneurs dans le monde académique ou scientifique n'est pas le monopole de l'UCLouvain et se rencontre dans de nombreuses institutions. L’un des domaines concernés est la mise en place d’infrastructure pour les outils TICE. Les conteneurs sont d'ailleurs devenus un sujet récurrent du JIRES1.
A cela s’ajoute une utilisation de plus en plus fréquente des conteneurs pour la mise en place d’environnements de développement local, que ce soit avec un outil générique comme Docker Compose2 ou avec des solutions spécifiques comme ddev
3 pour les applications PHP\MySQL. Il serait dès lors intéressant de pouvoir déployer en production les applications développées au sein des différentes équipes avec les mêmes technologies utilisées par les équipes de développement.
Mais au-delà du développement d'application, les conteneurs permettent aussi un déploiement d'applications pré-configurées (configuration as code), l'upgrade plus sûr des applications en production, des cycles de release plus courts (voire de l'intégration continue)...
De nombreuses applications proposent donc des procédures de déploiement basées sur les conteneurs, par exemple Ceph qui utilise l'orchestrateur Podman pour déployer son cluster, et les compétences dans ce domaine vont devoir se développer au sein des équipes.
Des applications aux besoins variés et plus complexes à mettre en production
De petites applications métier disponibles en ligne sont développées et mises en place afin de rendre des services à l’ensemble des informaticien·ne·s et autres usager·e·s de l'UCLouvain :
- Hébergement d'applications web.
- Applications métier.
- Outils de développement ou de collaboration.
- Outil de gestion des groupes.
- Valves électroniques...
La plupart de ces applications sont développées sur base de technologies et d'environnements d'exécution variés, avec de nombreux impacts pour les équipes qui les gèrent :
- Elles dépendent souvent de versions différentes d’un même langage de programmation ou d'un environnement d'exécution dont la coexistence sur une même machine est problématique.
- Elles nécessitent des versions différentes de services tiers et qui doivent cohabiter sur une même machine (virtuelle le plus souvent)
- Elles sont parfois mal isolées les unes des autres et une faille de sécurité dans une d’entre elles peut compromettre toute la machine qui les héberge
Tout cela peut causer des difficultés lors de l’installation, de la maintenance ou de la configuration des machines d’hébergement et entraîner une consommation parfois inutile de ressources. De plus cela impose souvent de multiplier les machines virtuelles pour les héberger.
L'ère des applications monolithiques est aujourd'hui révolue. La plupart des applications modernes se basent sur une pile applicative constituée de nombreux services (base de données, authentification, environnement d'exécution, service de cache, mailing...) séparés et uns des autres. Cela multiplie les applications à déployer et à maintenir.
Parmi les solutions ont été proposées au fil des années, les technologies de conteneurs (la plus connue étant Docker) répondent à ces enjeux. Elles permettent de déployer et de faire coexister des environnements d’exécution hétérogènes très facilement sur une même machine4. Elles permettent un meilleur contrôle de l’isolation entre ceux-ci et facilitent leur déploiement et leur mise à jour. Elles permettent également une répartition de la charge sur plusieurs machines hôtes. Enfin, elles facilitent le déploiement des applications à partir de fichiers de configuration de piles applicatives.
Ce type d'infrastructure à base de conteneurs pourrait également être déployé dans le cadre d'un hébergement web qui, par nature, est hétérogène et utilise une grande variété de technologies.
Contenu et délivrables du brevet
Afin d'explorer les possibilités des conteneurs et de constituer une base pour développer les compétences des équipes intéressées par ce type d'infrastructure (équipe système, portail...), il s’agira dans ce brevet d’étudier et d’expérimenter la mise en place d’une infrastructure à base de conteneurs. Comme point de départ, j'ai envisagé une infrastructure qui pourrait succéder à l’infrastructure « webapps » actuelle de SISG5,
Au-delà de cette infrastructure proprement dite, il s'agira également de tester des outils permettant l'automatisation des tâches de gestion de l’infrastructure et de déploiement d’applications sur celle-ci.
Il s’agira également d’examiner les perspectives quant à la mise en production d’une telle infrastructure.
Les délivrables sont :
- La mise en place d’une infrastructure de démonstration basée sur Docker pour l’hébergement et le développement d’applications web et qui a servi de base à mon travail.
- Une documentation (le présent document) décrivant la mise en place de l’infrastructure, les étapes nécessaires pour la répliquer ou la reconstruire et les outils permettant d’en automatiser les tâches de gestion. Y sont également abordées les questions relatives à la mise en production d’une telle infrastructure et au déploiement d’applications sur celle-ci.
- Les fichiers techniques (scripts, fichiers de configuration, description des machines virtuels, fichiers images docker…) nécessaire à la mise en place de l'infrastructure et au déploiement d’applications web seront également mis à disposition.
La documentation et les fichiers techniques sont mis à disposition dans un dépôt Gitlab sur la forge institutionnelle.
Organisation du présent document
Dans la première partie de ce document, je donnerai une rapide introduction technique à Docker afin de fournir les bases nécessaires à la compréhension des chapitres suivants. Sa lecture est optionnelle pour les lecteurs ayant déjà utilisé Docker et Docker Swarm.
Dans un second temps, j'aborderai la mise en place d’une infrastructure de démonstration basée sur l'orchestrateur Docker Swarm. La forme que j'ai choisie est celle d'un mode d'emploi, afin de permettre à toute personne intéressée de pouvoir déployer une telle infrastructure.
Dans la troisième partie, je proposerai des solutions pour automatiser le déploiement de cette infrastructure ainsi que des outils permettant de faciliter sa gestion. Il s’agira aussi de décrire la manière dont les applications peuvent être déployées sur cette infrastructure.
Dans la quatrième partie, j'aborderai les perspectives liées à la mise en production de cette infrastructure et au changement technologique qu'elle implique. Il s'agira également de décrire comment le travail réalisé dans la deuxième partie pourra être transcrit en production. J’aborderai enfin quelques pistes pour l'avenir des infrastructures à base de conteneurs à l'UCLouvain.
Il sera alors temps pour moi de conclure et de remettre en contexte le travail réalisé.
Journées Réseaux de l’Enseignement et de la Recherche, organisées tous les deux ans en France https://www.jres.org/fr/
Docker Compose est un orchestrateur pour Docker et facilite le déploiement et la gestion de conteneur Docker sur une machine https://docs.docker.com/compose/
Développé au départ pour faciliter le développement de site Drupal, ddev est une suite d'outil automatisant le déploiement local de pile applicative PHP/MySQL (Wordpress, Drupal, Symfony...) https://ddev.com/
Il est également possible d’utiliser les technologies de conteneur afin de déployer des versions différentes d’un même environnement d’exécution sur une même machine d’hébergement. Il peut s’agir de versions différentes d’un langage de programmation (par exemple PHP 7.0, 7.2, 7.4, 5.6...) ou d’une même version mais avec des modules complémentaires différents. Voir par exemple « Utilisez plusieurs versions de PHP sur un même serveur web » publié dans le numéro 115 de Linux Pratique, sept-oct 2019
actuellement l’hébergement des « webapps » se fait sur l'infrastructure de l'hébergement institutionnel.