En profondeur
Containers 101: Conteneurs ou machines virtuelles (et pourquoi les conteneurs sont-ils l'avenir de l'infrastructure informatique)
Qu'est-ce qu'un conteneur et qu'est-ce qui le rend différent – et parfois meilleur – d'une machine virtuelle? Pour répondre à cette question, Joey explique pourquoi nous avions déjà eu besoin de conteneurs.
Containers et Kubernetes, le système d’orchestration de conteneurs très répandu, ont été les mots les plus en vogue des technologies de l’information ces dernières années. Vous vous demandez peut-être pourquoi et en quoi cette technologie de conteneur est différente des machines virtuelles (VM) avec lesquelles vous avez travaillé au cours de la dernière décennie.
Tout d'abord, comprenons comment les conteneurs sont arrivés. Unix, puis Linux, a une longue histoire de configuration de l'isolation de processus. Les premières implémentations sur lesquelles j'ai travaillé étaient les zones Sun Microsystems Solaris (les zones étaient en fait des conteneurs partageant un noyau avec le système d'exploitation de base, mais qui autrement fonctionnaient de manière totalement isolée). Celles-ci ont été introduites sur les serveurs Sun haut de gamme en 2004, mais lorsque la technologie est arrivée à maturité, de nombreuses organisations migraient de serveurs Unix propriétaires vers des serveurs Linux standard.
Dans le même temps, Google et Netflix étaient des entreprises à la croissance rapide, caractérisées par une demande massive et flexible. Netflix a très tôt agi pour migrer ses charges de travail vers Amazon Web Services (AWS) en 2008. Au début de cette migration, la quasi-totalité des charges de travail de la société était exécutée sur des ordinateurs virtuels. Cependant, il a rencontré des problèmes dans son environnement, principalement constitué de VM.
Les ordinateurs virtuels nécessitent une copie complète d'un système d'exploitation à déployer, ce qui représente une grande quantité de données à déplacer. Cela limite à la fois la mobilité et la densité des machines virtuelles. Il est également plus difficile d'assurer la compatibilité des versions complètes entre les bibliothèques de logiciels des environnements dev / test / QA / prod. Toutes les charges de travail ne s'intègrent pas dans les zones de VM définies par les fournisseurs de cloud. Certaines charges de travail peuvent être considérablement surdimensionnées, même dans une petite machine virtuelle. D'autres peuvent avoir besoin de la capacité d'évoluer rapidement pour les périodes de charge élevée, mais sont généralement inactifs.
Alors, en quoi les conteneurs sont-ils différents de la simple exécution d’une machine virtuelle? La plus grande différence est que vos conteneurs doivent exécuter le même système d'exploitation de base que celui de votre hôte (le serveur ou la machine virtuelle hébergeant vos conteneurs). Cela varie quelque peu. Si vous exécutez des conteneurs Linux, vous pouvez potentiellement avoir des conteneurs d'une distribution différente de celle de votre système d'exploitation hôte. Cela est dû au fait que la plupart des différences entre les systèmes d’exploitation Linux se trouvent dans l’espace utilisateur et que l’espace du noyau – où les appels système sont passés à partir des conteneurs – est commun à toutes les distributions. Vous remarquerez toutes les références à Linux; Bien que Windows ait fait de grands progrès dans les conteneurs dans les dernières versions, l'espace reste dominé par le système d'exploitation Linux.
Les conteneurs peuvent s'exécuter dans un format imbriqué, ce qui signifie que vous pouvez installer un logiciel de gestion de conteneur tel que Docker ou Kubernetes dans une VM (ou un hôte sans système d'exploitation) et exécuter des charges de travail de conteneur dans cette VM. La mise en réseau et le stockage fonctionnent également différemment dans les conteneurs; ce sont des propriétés du système d'orchestration de conteneur, par opposition à des propriétés de la machine virtuelle.
Faire en sorte que l'hôte partage un noyau avec le conteneur vous aide à atteindre la densité. Etant donné que vous n'avez plus besoin d'exécuter plusieurs copies de tout un système d'exploitation, vous réduisez la quantité de temps processeur, de mémoire et de stockage associée à la virtualisation de vos charges de travail. Cela signifie que vous pouvez exécuter beaucoup plus de conteneurs sur un hôte donné que de machines virtuelles.
Un autre avantage des conteneurs est leur place dans le flux de travail de développement moderne. Les conteneurs deviennent votre unité de déploiement de développement. Au lieu de créer un ensemble de bibliothèques et de fichiers binaires à déployer sur un serveur, le développeur crée simplement un conteneur, défini dans un format appelé image de conteneur, qui est ensuite chargé dans un registre de conteneurs. Alors qu'une image de machine virtuelle peut faire 10 ou 20 Go, une image de conteneur peut être d'un ordre de grandeur inférieur – peut-être 10 ou 20 Mo. Compte tenu de la taille et des ressources nécessaires pour construire des conteneurs, cela signifie qu'ils peuvent passer directement de l'ordinateur portable d'un développeur à la production (après avoir passé un ensemble de tests d'assurance qualité automatisés, bien sûr). Cela correspond aux pipelines de développement et d'intégration continue les plus modernes, construits autour de la notion d'utilisation du conteneur comme unité de déploiement.
Les registres de conteneurs peuvent être distribués dans le monde entier et la petite taille des conteneurs permet de déployer facilement ces images dans des centres de données locaux et distants et des régions de cloud public dans le monde entier. Il existe des registres de conteneurs privés et publics, en fonction de la nature du code. Les applications personnalisées peuvent utiliser des images privées et publiques dans leur pile de déploiement, car votre équipe de développement peut avoir des dépendances sur des conteneurs publics (tels que Microsoft SQL Server) et souhaiter conserver le code propriétaire contenant la logique métier dans un référentiel privé. AWS et Microsoft proposent tous deux des services de registre de conteneurs privés dans leurs clouds respectifs.
Les systèmes d’orchestration de conteneur sur les hyperviseurs de machine virtuelle présentent d’autres avantages. Dans la prochaine partie, nous allons approfondir Kubernetes, le système d’orchestration de conteneurs le plus populaire. Pour l'instant, cependant, je vais vous donner un bon exemple d'une caractéristique clé: la mise à l'échelle automatique du conteneur. Cela ne s'applique pas aux serveurs de base de données, mais de nombreux niveaux d'application et Web ont des serveurs sans état qui bénéficient de plus d'instances sous charge. En augmentant le nombre d'instances de votre niveau Web ou d'application, vous répartissez le travail sur plusieurs travailleurs.
Kubernetes peut mettre à l'échelle automatiquement les pods en fonction de l'utilisation du processeur. (Un pod est une unité de déploiement dans Kubernetes et peut comprendre un ou plusieurs conteneurs.) Par exemple, vous pouvez définir un seuil d'échelle automatique de l'utilisation du processeur de 50% sur les pods. Lorsque votre utilisation de l'unité centrale atteint 50%, davantage de modules (travailleurs) seront déployés dans votre cluster jusqu'à ce que l'utilisation de l'unité centrale soit inférieure à 50% ou que vous atteigniez le nombre maximal de modules que vous avez défini dans votre manifeste d'application.
Kubernetes fournit également une fonctionnalité d'équilibrage de charge de manière native. L'implémentation de fonctionnalités similaires dans une machine virtuelle nécessiterait à la fois des plug-ins à coût supplémentaire et des personnalisations étendues. Même après que tout cela a été configuré, le temps nécessaire pour utiliser des machines virtuelles est beaucoup plus long en raison de leur taille même.
Les conteneurs offrent de nombreux avantages aux développeurs. C'est la raison pour laquelle ils ont gagné en notoriété dans les organisations informatiques. En regroupant les bibliothèques et le code, et en s'exécutant dans un système d'exploitation existant, les conteneurs aident à automatiser les flux de travail DevOps modernes et permettent une livraison plus rapide avec de meilleurs tests et résultats. Dans le prochain épisode de cette série, vous apprendrez des informations plus détaillées sur Kubernetes et vous expliqueront en quoi cela change la donne pour les opérations informatiques.
A propos de l'auteur
Joseph D'Antoni est un architecte et SQL Server MVP avec plus de dix ans d'expérience dans des entreprises du classement Fortune 500 et de petites entreprises. Il est actuellement consultant principal pour Denny Cherry and Associates Consulting. Il est titulaire d'une licence en systèmes informatiques de la Louisiana Tech University et d'un MBA de la North Carolina State University. Joey est le co-président du Philadelphia SQL Server Users Group. Il est un conférencier fréquent aux événements PASS Summit, TechEd, Code Camps et SQLSaturday.
Commentaires
Laisser un commentaire