Dans les tendances en matière de développement logiciel, il y a deux noms qui sont incontournables : Docker et Kubernetes, open source tous les deux. Le premier déploie des conteneurs et l’autre orchestre des clusters de conteneurs.
Docker et Kubernetes sont les deux stars en matière de développement avec chacun leurs spécificités. (Crédit Photo: DocChewbacca/Visualhunt)
La technologie des conteneurs a contribué à rationaliser les processus de mise en production des applications distribuées tout au long du développement et des tests. Le tandem open source Docker et Kubernetes s’est pour sa part focalisé sur la manière dont les applications sont construites et déployées, sous forme d’un multitude de microservices au lieu des piles monolithiques.
Pourquoi Docker et Kubernetes sont-ils importants ? Comment bousculent-ils le développement des logiciels et quel rôle chacun joue-t-il dans ce processus ? Voilà différentes questions auxquelles nos confrères d’Infoworld ont répondu.
Docker et les conteneurs
La technologie des conteneurs, supportés par Linux, Windows ou MacOS donne la capacité aux applications de fonctionner dans des mini-environnements autonomes qui sont isolés du reste du système. Souvent comparés à des machines virtuelles, les conteneurs n’en sont pas, puisqu’ils n’intègrent pas d’OS (cf image ci-dessous). Ils sont beaucoup plus légers, plus rapides à démarrer et à arrêter. Ils sont par ailleurs plus souples et portables, idéal pour des environnements cloud qui apprécient cette élasticité et cette mise à l’échelle agile.
Une vue des différences entre VM et conteneurs (Crédit Photo : DR)
Comme indiqué précédemment, Linux et d’autre OS prennent en charge les applications conteneurisées depuis de nombreuses années, mais travailler avec des conteneurs n’est pas vraiment ergonomique. Docker dans ses versions open source et commerciales a apporté une certaine convivialité aux développeurs. La société fournit un ensemble d’outils pour les conteneurs (Engine pour la création, Compose pour la définition des composants et Hub pour la publication et le partage) afin de pouvoir empaqueter les applications dans des images. Ces dernières peuvent ensuite être facilement déployées et réutilisées par l’entreprise.
In fine, Docker permet de créer des images de conteneurs, de les versionner, de les partager, de les déplacer et des déployer sur des hôtes compatibles Docker.
Quand utiliser Docker et les conteneurs ?
L’usage des conteneurs et de la technologie Docker s’adresse à des charges de travail disposant d’une ou plusieurs qualités suivantes :
-Evolutivité élastique. Si vous ne savez pas combien d’instances doivent être exécutées pour répondre à la demande, une application ou un service conteneurisé est rapidement scalable.
-Isolation. Vous ne souhaitez pas que l’application interfère avec d’autres applications. Peut-être voulez-vous exécuter plusieurs versions de l’application en même temps pour vérifier la révision d’une API ? Ou peut-être voulez-vous garder un système sous-jacent propre (ce qui est toujours une bonne idée).
-Portabilité. Une application doit être exécutée sur plusieurs environnements et il est nécessaire que les configurations soient reproductibles. Les conteneurs permettent de packager l’ensemble de l’environnement d’exécution de l’application, facilitant ainsi le déploiement sur un environnement disposant d’un hôte compatible Docker, un bureau de développeur, des machines de test, un cloud, etc.
Kubernetes et l’orchestration des conteneurs
Les conteneurs sont principalement conçus pour isoler les processus ou les applications les uns des autres et du système sous-jacent. Créer et déployer des conteneurs individuels est facile. Mais que faire si vous voulez assembler plusieurs conteneurs – par exemple, une base de données, un front-end Web et un back-end IT – dans une grande application qui peut être gérée comme une unité, sans avoir à vous soucier de déployer, connecter, gérer et faire évoluer chacun de ces conteneurs séparément ? Il est nécessaire d’avoir un moyen d’orchestrer toutes les parties en un tout fonctionnel. C’est ce travail que Kubernetes assume.
Kubernetes, basé sur des projets créés par Google, permet d’automatiser le déploiement et la gestion d’applications multi-conteneurs sur plusieurs hôtes, sans avoir à gérer chaque conteneurs directement. Les développeurs décrivent la disposition de l’application sur plusieurs conteneurs, y compris les éléments concernant le réseau et le stockage. Kubernetes s’occupe du reste de l’exécution. Il gère aussi des points sensibles comme les secrets (la sécurité des données sensibles) et la configuration des applications. Par exemple, le site de streaming musical, Spotify utilise Kubernetes, car il crée beaucoup de conteneurs pour chaque utilisateur de la plateforme (profil, préférences, etc.) et en détruit tout autant. Avec un tel volume, l’outil de gestion doit être paramétrer pour cela.
Pour bien l’utiliser, Kubernetes nécessite une certaine expertise, même si cet outil s’est amélioré pour devenir une solution clé en main. Ces améliorations sont issues de templates facilement disponibles pour les applications standard (Helm charts), mais aussi par la richesse des distributions Kubernetes (Red Hat, Canonical, Docker).
Quand utiliser Kubernetes et l’orchestration de conteneurs ?
Les applications conteneurisées simples qui servent un petit nombre d’utilisateurs ne nécessitent généralement pas d’orchestration et encore moins de Kubernetes. Mais si une application est plus complexe avec plusieurs fonctionnalités et utilisateurs, il devient difficile ne pas passer par un outil d’orchestration. Voici quelques critères pour utiliser Kubernetes.
-Gérer la complexité. Toute application qui implique plus de deux conteneurs correspond à cette demande. Mais certaines applications plus modestes servant qu’un petit nombre d’utilisateurs peuvent être orchestrées par des solutions plus simples comme Swarm de Docker.
-Prendre en compte l’évolutivité et la résilience des applications. Kubernetes et d’autres orchestrateurs permettent d’équilibrer les charges et de faire tourner les conteneurs sur un mode déclaratif en décrivant l’état souhaité du système au lieu de coder manuellement les modifications des dépendances.
-Adopter des techniques modernes de CI/CD. Les systèmes d’orchestration prennent en charge les modèles de déploiement pour les applications sur le mode bleu/vert ou des mises à niveau continu.
Un jour peut-être, Docker et Kubernetes seront éclipsées par d’autres solutions pour créer et gérer des conteneurs. Mais aujourd’hui, ils sont bien présents et il essentiel de les connaître et les comprendre.