Présentation
Les conteneurs Linux® et les machines virtuelles sont des environnements informatiques en paquets qui associent divers composants et les isolent du reste du système. Leurs principales différences résident dans leur évolutivité et leur portabilité.
- Généralement, le volume des conteneurs se mesure en mégaoctets. Ils ne renferment rien de plus gros qu'une application, avec tous les fichiers nécessaires à son exécution, et servent souvent à mettre en paquet des fonctions uniques qui effectuent des tâches spécifiques (appelées microservices). Parce qu'ils sont légers et qu'ils n'intègrent pas leur propre système d'exploitation, il est très facile de les déplacer entre plusieurs environnements.
- Les machines virtuelles, quant à elles, pèsent souvent plusieurs gigaoctets. Elles intègrent généralement leur propre système d'exploitation et peuvent ainsi exécuter simultanément plusieurs fonctions gourmandes en ressources. Grâce aux gros volumes de ressources auxquels elles ont accès, les machines virtuelles peuvent dissocier, séparer, dupliquer et émuler des serveurs, des systèmes d'exploitation, des postes de travail, des bases de données et des réseaux entiers.
En dehors de leurs différences technologiques, comparer les conteneurs avec les machines virtuelles revient à comparer les pratiques informatiques émergentes et les architectures informatiques classiques.
Les pratiques informatiques émergentes (développement d'applications cloud-native, CI/CD et DevOps) existent, car il est possible de décomposer des charges de travail en unités de services les plus petites possible, en général une fonction ou un microservice. Les conteneurs représentent le meilleur moyen de mettre en paquet ces petites unités. Ils permettent à plusieurs équipes de travailler sur des parties individuelles d'une application ou d'un service, sans avoir à interrompre l'exécution du code dans les autres conteneurs ni menacer son intégrité.
Les architectures informatiques classiques (monolithiques et traditionnelles) conservent tous les aspects d'une charge de travail dans un seul type de fichier volumineux. Il n'est pas possible de le décomposer et il doit être mis en paquet dans son intégralité au sein d'un environnement plus grand, souvent une machine virtuelle. Avant, il était courant de créer et d'exécuter une application entière au sein d'une machine virtuelle. Cependant, l'hébergement du code tout entier et des dépendances dans un seul endroit nécessitait des machines virtuelles surdimensionnées, ce qui entraînait des défaillances et des temps d'arrêt en cascade lors de la publication des mises à jour.
Quelle option choisir ?
Tout dépend : avez-vous besoin de petites instances (conteneurs) faciles à déplacer ou souhaitez-vous allouer des ressources informatiques personnalisées de manière semi-permanente ?
Petits et légers, les conteneurs sont faciles à déplacer entre les systèmes nus, ainsi que dans les environnements de cloud public, privé, hybride et multicloud. Ils représentent également l'environnement parfait pour déployer des applications cloud-native modernes, constituées de microservices conçus pour fournir une expérience cohérente de développement et de gestionautomatisée à travers les environnements de cloud public, privé, hybride et multicloud. Cette approche du développement accélère la création d'applications, l'optimisation des applications existantes et la façon dont elles sont connectées. Attention toutefois à vérifier la compatibilité de vos conteneurs avec le système d'exploitation sous-jacent. Les conteneurs sont à privilégier par rapport aux machines virtuelles pour les tâches suivantes :
- Création d'applications cloud-native
- Mise en paquet des microservices
- Développement de pratiques DevOps ou CI/CD
- Déplacement des projets informatiques évolutifs entre différents équipements matériels qui partagent le même système d'exploitation
Les machines virtuelles sont capables d'exécuter bien plus d'opérations qu'un conteneur unique. Elles sont donc utilisées traditionnellement pour mettre en paquet les charges de travail monolithiques. Toutefois, les fonctionnalités étendues de ces machines virtuelles nuisent à leur portabilité, puisqu'elles dépendent de leur système d'exploitation, de leurs applications et de leurs bibliothèques. Les machines virtuelles sont à privilégier par rapport aux conteneurs pour les tâches suivantes :
- Prise en charge des charges de travail monolithiques, traditionnelles et d'ancienne génération
- Isolation des cycles de développement risqués
- Provisionnement des ressources d'infrastructure (réseaux, serveurs et données)
- Exécution d'un système d'exploitation au sein d'un autre système d'exploitation (Unix sous Linux, par exemple)
Virtualisation
Un logiciel appelé « hyperviseur » sépare les ressources des machines physiques afin de les partitionner et de les allouer à des machines virtuelles. Lorsqu'un utilisateur émet une instruction de machine virtuelle qui nécessite des ressources supplémentaires de la part de l'environnement physique, l'hyperviseur fait parvenir la demande au système physique et conserve les modifications en mémoire cache. Les machines virtuelles ressemblent à des serveurs physiques et agissent comme tels, ce qui présente des inconvénients au niveau des dépendances des applications et de la taille de l'empreinte du système d'exploitation (le plus souvent surdimensionnée pour exécuter une application ou un microservice unique).
Conteneurs
Les conteneurs contiennent un microservice ou une application, ainsi que tout le nécessaire pour son exécution. Tout le contenu d'un conteneur est conservé sous la forme d'une image. Il s'agit d'un fichier de code qui comprend l'ensemble des bibliothèques et dépendances. Ces fichiers sont comparables aux fichiers d'installation d'une distribution Linux, car l'image est fournie avec tous ses paquets RPM et ses fichiers de configuration. Puisque les conteneurs sont très petits, ils sont généralement plusieurs centaines, faiblement couplés, et c'est pour cette raison que leur gestion et leur approvisionnement sont assurés par des plateformes d'orchestration de conteneurs telles que Red Hat OpenShift et Kubernetes.
Pourquoi choisir Red Hat ?
Parce que nous prenons en charge depuis longtemps la virtualisation et le développement des conteneurs. Nous apportons notre contribution aux communautés KVM (Kernel-based Virtual Machine) et oVirt depuis leur création, et nous sommes le deuxième contributeur des codes base de Docker et Kubernetes. Nous nous investissons aussi pour l'avenir de ces deux technologies. Grâce à notre engagement dans la virtualisation native pour les conteneurs, KubeVirt et l'infrastructure hyperconvergée, nous améliorons la façon dont les conteneurs et les machines virtuelles fonctionnent ensemble au sein d'un même système informatique.