Cet article fait partie de notre guide: Micro-services : l'heure de la gouvernance a sonné

Containers vs VM : quelle place dans les micro-services?

Containers et machines virtuelles ont tous deux leurs avantages et inconvénients, mais lequel est le plus pertinent en matière de microservices? Cet article examine trois points de comparaison.

Quand on aborde la question de l'infrastructure qui supporte les applications d’entreprise, il est n constat : nous sommes passés d’un monde composé de serveurs à des machines virtuelles et désormais à des containers. En parallèle et par effet de levier, l'ensemble du processus de build, de déploiement et de gestion des applications a lui-aussi dû s’adapter et être adapté. Tout simplement parce que le cycle de vie d'une VM est très différent de celui des containers.

Les VM sont gérées par un hyperviseur. VSphere de VMware utilise par exemple l'hyperviseur ESXi pour créer ses VM. Avec les VM, la configuration doit être pise en compte dès le début des travaux. Vous devez choisir le système d'exploitation invité qui exécutera l'application, définir les ressources de stockage requises, la quantité de mémoire, le réseau et une kyrielle d'autres paramètres. VMWare propose certes des valeurs par défaut via son assistant, mais cela reste un processus complexe qui prend au moins quelques minutes sur un Cloud public.

De leur côté, les containers peuvent être créés beaucoup plus rapidement que les VM. Ceci est dû à l'absence d'un hyperviseur et au fait qu'il n'est pas nécessaire de disposer d’un OS pour exécuter l'application. Le temps de démarrage des containers se mesure en millisecondes, et cela ne prend que quelques secondes seulement si le moteur d'orchestration (Kubernetes ou Swarm) est fortement sollicité.

De plus, le processus de création d'un nouveau containeur est très différent de celui d’une VM. Les images containeurisées sont stockées dans un référentiel d'où vous pouvez extraire une image avec deux uniques commandes. Les containers sont hébergés par des registres tels que Docker Hub, CoreOS Quay ou Amazon Elastic Compute Cloud (EC2) Container Registry. Il est nécessaire d’augmenter la sécurité de ces registres de containers car les images sont accessibles au public et peuvent donc contenir des vulnérabilités. Pour parer à cette éventualité, la plupart des registres sont dotés de fonctions intégrées d'analyse de sécurité. Si les machines virtuelles sont conçues à l’origine pour être utilisées au sein d'une entreprise, les registres, quant à eux, facilitent le partage de containers au sein d'une organisation ou leur  mise à disposition auprès du public dans le monde.

Cette facilité de création et de partage des containers en fait l'option privilégiée pour gérer les applications en microservices. Grâce aux containers, les services peuvent être rapidement lancés, dé-provisionnés et remplacés à la demande, et ce, à n'importe quelle échelle. Leur rapidité du temps de démarrage accélère chaque étape de la chaîne de livraison du logiciel. Une façon de pousser l’agilité dans ses derniers retranchements.

Conteneurs vs VM: qu’en est-il du stockage

Les VM ont plusieurs options de stockage, à la fois en local et en réseau. Quelle que soit l'option de stockage que vous choisissez,  un disque physique reste isolé de la VM. Le système d'exploitation, les fichiers et les données sont stockés sur le disque, et le disque lui-même peut être copié et déplacé sur plusieurs hôtes ou encore sauvegardé. Par défaut, le stockage de VM est censé être dynamique.

En revanche, les containers sont par défaut stateless. Cela signifie que le stockage est créé et éliminé avec le conteneur. Un  sandbox est créé lorsqu'une image de container est éditée. Toutes les données sont stockées dans cette partie, qui n'est active que dans le container. Pour le stockage persistant, quatre options existent : volumes de données, containers de données, supports de stockage ou plug-ins. Ces options diffèrent en fonction de là où elles stockent les données. Docker a des spécifications détaillées pour le stockage, mais il existe également des produits de stockage tiers tels que ClusterHQ Flocker et le plug-in NetApp.

La grande différence réside dans le fait que le stockage des containers est lié à la couche applicative et non à la couche infrastructure (comme c'est le cas avec les machines virtuelles). Chaque service de votre application en micro-services peut avoir son propre stockage, qui peut être géré différemment du stockage des autres services. Cela offre plus de flexibilité et de contrôle en matière  de stockage.

Containers vs VMs: Déploiement et gestion

Les outils de gestion et de déploiement des VM sont aujourd’hui matures. VCenter Server est utilisé pour gérer les machines virtuelles dans VMware. Les outils de gestion de configuration comme Chef et Puppet aident au déploiement automatisé dans le Cloud ou dans les datacenters. Les machines virtuelles hébergées sur des IaaS spécifiques sont gérées avec des outils propres à chaque fournisseur. AWS dispose par exemple de CloudFormation, qui automatise la création des instances EC2 à l'aide de templates. Il intègre également CodeDeploy, un outil qui facilite encore les déploiements. Les VM apportent plus de contrôle et ont plus d'options dans la façon dont elles sont gérées.

Nombre de ces outils se mettent à supporter rapidement les containers, mais en matière de gestion, on note un certain retard. Les orchestrateurs de containers sont utilisés pour gérer la création et le déploiement de containers à l'échelle. Kubernetes est en tête du peloton des outils d'orchestration, mais ce segment est encore naissant. Docker Swarm et Apache Mesos ont également leur place dans ce marché.

Conclusion

Les containers ont changé les pipelines de livraison logicielle, mais c’est une bonne nouvelle. Comprendre les différences dans le cycle de vie d'un container et d’une VM vous aidera à décider lequel utiliser et pour quelle type de workload.

Mais en matière de microservices, les containers ont bien  un avantage. Certes, les VM ont des capacités de sécurité plus fortes et des options de stockage qui sont plus familières auprès des entreprises. Elles sont également douées d’un écosystème mature d'outils de gestion. Mais, les containers sont beaucoup plus faciles à créer et à partager, plus faciles à contrôler et plus agiles que les VM. Cela fait des containers l'option préférée pour les applications modernes qui font appel à des  microservices.

Pour approfondir sur Stockage de conteneurs