Getty Images/iStockphoto

Comment Kubernetes et virtualisation se différencient et se complètent

Vus de l’extérieur, containers et machines virtuelles semblent servir le même besoin : exécuter des applications sans tenir compte des limites de l’infrastructure sous-jacente. Vu de l’intérieur, choisir une plateforme ou l’autre est d’abord une question d’infrastructure.

Cet article est extrait d'un de nos magazines. Téléchargez gratuitement ce numéro de : STORAGE: Storage 32 : Kubernetes, le nouveau terrain de jeu du stockage

Kubernetes est-il un hyperviseur ? Tout administrateur d’hyperviseur ou de Kubernetes rĂ©pondra : bien sĂ»r que non ! L’un n’a rien Ă  voir avec l’autre. Mais lorsque votre activitĂ© quotidienne consiste juste Ă  exĂ©cuter des applications indĂ©pendamment du matĂ©riel sous-jacent, la question n’est finalement pas si dĂ©nuĂ©e de sens.

La véritable question est plutôt de savoir dans quel cas il est pertinent d’utiliser l’un ou l’autre. Il y a d’autant moins de réponses universelles que, dans certains cas, il est pertinent d’utiliser des containers Kubernetes depuis des machines virtuelles Linux.

Similitudes et différences entre Kubernetes et un hyperviseur

Certaines similitudes pourraient vous faire penser que Kubernetes est un hyperviseur. Avec Kubernetes, vous exĂ©cutez des containers – qui contiennent des applications â€“ depuis une plateforme logicielle. Cette plateforme dĂ©cide de dĂ©ployer ces applications sur tels ou tels serveurs, selon l’activitĂ©.

Avec un hyperviseur, on procède de la mĂŞme manière pour exĂ©cuter des machines virtuelles â€“ qui contiennent aussi des applications â€“ sur plusieurs serveurs. Celles-ci sont Ă©galement placĂ©es en fonction de la charge de travail, dynamiquement.

À ce stade, il convient de préciser que Kubernetes n’exécute pas lui-même les charges de travail. C’est le moteur de containers, Docker le plus souvent, qui le fait. Kubernetes place les containers sur les bons serveurs, où le moteur de containers les exécute.

PlutĂ´t que de se demander si Kubernetes est un hyperviseur, la question serait plutĂ´t de savoir si les moteurs de containers sont des hyperviseurs. Dans les faits, la plupart des gens font la confusion entre les deux.

Avec un hyperviseur, chaque machine virtuelle possède ses propres caractéristiques matérielles (mais virtuelles) et son propre système d’exploitation pour les piloter. Par exemple, dans une machine virtuelle, il y a nécessairement un OS qui possède un pilote pour le stockage et un pilote pour le réseau. Ce stockage et ce réseau sont des ressources virtuelles présentées par l’hyperviseur à partir de ressources physiques.

On notera cependant que les containers ont Ă©tĂ© conçus dans l’idĂ©e d’exĂ©cuter des applications « pour le cloud Â», ou « cloud native Â». Afin d’assurer leur portabilitĂ© du data center Ă  un cloud public et d’un cloud public Ă  un autre cloud public, ces applications ne devraient jamais accĂ©der directement au système de fichiers de l’OS hĂ´te ni aux adresses IP de son rĂ©seau local. Elles devraient Ă  la place envoyer des requĂŞtes HTTP vers des hĂ´tes – domaines applicatifs, systèmes de stockage objet â€“ renseignĂ©s dans le DNS. Pour autant, cette pratique est contournĂ©e, car il est intĂ©ressant d’exĂ©cuter au format container des applications prĂ©vues pour des serveurs physiques ou des machines virtuelles.

Faut-il lancer des containers par-dessus des machines virtuelles ?

Les entreprises se posent ensuite la question de lancer leurs containers directement depuis des serveurs physiques, ou depuis des machines virtuelles exécutées par des serveurs physiques. Dans tous les cas, il faut un système d’exploitation et un moteur de container par machine physique ou virtuelle.

La réponse dépend de facteurs tels que l’élasticité, les coûts, les ressources et les besoins de performance.

Déployer des applications avec Kubernetes sur des serveurs physiques, également appelés serveurs bare-metal, permet d’éviter le goulet d’étranglement de l’hyperviseur. Dans un tel déploiement bare-metal, toutes les ressources matérielles sont consacrées uniquement aux applications containerisées. Chaque cycle du processeur est affecté aux applications métiers. En outre, les paquets réseau et les lectures et écritures de stockage sont traités directement, sans intervention de l’hyperviseur.

Pour autant, les progrès réalisés en matière d’optimisation des VMs ont permis de réduire considérablement la charge de calcul que représente un hyperviseur. Au point qu’une entreprise pourrait considérer que les fonctions de haut niveau qu’apportent les plateformes virtualisées l’emportent sur le faible gain en puissance de calcul que l’on obtient sans virtualisation.

VMware, par exemple, affirme que son système de virtualisation vSphere 7 peut offrir des performances supĂ©rieures de 8 % Ă  celles d’un serveur bare-metal, lors de l’exĂ©cution de charges de travail Kubernetes. Le planificateur de puissance CPU de l’hyperviseur ESXi de VMware optimiserait ainsi les accès Ă  la mĂ©moire des pods (ensembles de containers similaires) en regroupant en RAM les similitudes, ce que ne saurait pas faire Linux.

L’exécution de Kubernetes dans des VM permet également aux équipes informatiques de choisir plusieurs tailles de serveurs pour différents types de déploiement. Dans un déploiement bare-metal, l’ensemble des ressources du serveur est offert aux containers. Il est plus compliqué de limiter les ressources pour les containers. Alors que cela est facile pour les VMs. Le contrôle précis des ressources par Kubernetes se fait au niveau du pod.

Déploiement et facilité de gestion

La facilitĂ© de dĂ©ploiement est un argument clairement en faveur des VMs. MĂŞme si les plateformes de virtualisation nĂ©cessitent un travail supplĂ©mentaire pour installer Ă  la fois un hyperviseur et des VMs sur le matĂ©riel, les hyperviseurs demandent ensuite moins de manipulations sur l’infrastructure pour dĂ©ployer des applications. De plus, les mises Ă  jour de l’hyperviseur sous-jacent sont moins frĂ©quentes que celles du système d’exploitation d’un serveur bare-metal. 

Une fois les hyperviseurs en place, les déploiements de VMs sont indépendants du matériel. Lorsque du matériel est ajouté, toutes les VM restent intactes et peuvent être déplacées facilement entre les hyperviseurs. Cela simplifie la gestion de la plateforme et élimine les temps d’arrêt pendant les opérations de maintenance de l’infrastructure.

Moyennant un coût supplémentaire chez VMware, il est possible de souscrire à l’offre Tanzu, qui confie les fonctions de moteur de containers à ESXi lui-même. Ce qui simplifie encore les configurations. Les VMs qui font office de nœuds pour un cluster Kubernetes correspondent ici à un modèle avec un Linux préinstallé.

Capture d'écran de la page du client vSphere d'un déploiement Kubernetes.
Figure 1. La page du client vSphere.

Une fois les hyperviseurs en place, les déploiements de VMs sont indépendants du matériel. Lorsque du matériel est ajouté, toutes les VM restent intactes et peuvent être déplacées facilement entre les hyperviseurs. Cela simplifie la gestion de la plateforme et élimine les temps d’arrêt pendant les opérations de maintenance de l’infrastructure.

Moyennant un coût supplémentaire chez VMware, il est possible de souscrire à l’offre Tanzu, qui confie les fonctions de moteur de containers à ESXi lui-même. Ce qui simplifie encore les configurations. Les VMs qui font office de nœuds pour un cluster Kubernetes correspondent ici à un modèle avec un Linux préinstallé.

Il est intéressant d’exécuter au format container des applications prévues pour des serveurs physiques ou des machines virtuelles.

Les containers, quant Ă  eux, fonctionnent tous au-dessus du mĂŞme système d’exploitation, celui Ă  partir duquel est exĂ©cutĂ© le moteur de containers. Ce système d’exploitation gère le matĂ©riel, la mise en rĂ©seau, voire l’accès au stockage. Les containers sont donc beaucoup plus lĂ©gers en mĂ©moire que des machines virtuelles, puisqu’ils ne contiennent que l’application. Mais du point de vue de l’application, il n’y a pas de diffĂ©rence : elle communique avec un système d’exploitation et peut accĂ©der Ă  son stockage, comme Ă  son rĂ©seau.

Toutefois, un tel dĂ©ploiement n’apporte pas exactement un cluster Kubernetes entièrement conforme. Certaines fonctionnalitĂ©s â€“ les ressources rĂ©seau/stockage personnalisĂ©es, les modules tiers â€“ ne peuvent pas ĂŞtre mises en Ĺ“uvre sur la plateforme. NĂ©anmoins, vSphere avec VMware Tanzu permet de mettre en production des clusters Kubernetes gĂ©nĂ©riques Ă  l’intĂ©rieur de VMs qui sont de simples machines Linux. Et cette construction simplifie radicalement l’évolutivitĂ© de l’infrastructure.

Un autre avantage du déploiement de Kubernetes par des VMs est que les administrateurs qui gèrent l’hyperviseur peuvent se familiariser avec la nouvelle plateforme au fil du temps, plutôt que de se lancer dès le premier jour dans un déploiement entièrement nouveau de type bare-metal.

 Haute disponibilitĂ© et Ă©lasticitĂ©

Les hyperviseurs protègent les VM et peuvent être redémarrés rapidement et automatiquement sur un autre hôte en cas de panne. Mais les équipes informatiques doivent être prudentes lorsqu’elles placent plusieurs VMs sur le même hyperviseur. En cas de défaillance de cette machine, les conséquences sont beaucoup plus graves qu’en cas de perte d’un seul hôte bare-metal, car davantage de charges de travail sont perdues. Cette limitation peut généralement être surmontée avec des règles qui répartissent les VMs sur différents serveurs.

Pour garantir davantage la haute disponibilité, il convient de configurer la gestion des défaillances à la fois dans les couches Kubernetes et VMs. En cas de panne, une seule plateforme à la fois doit tenter de remettre les charges de travail en état de marche.

Concernant l’élasticité, Kubernetes semble le mieux pourvu puisqu’il est né chez Google, qui gère des centres de données à grande échelle. La plupart des entreprises ne chapeautent pas des déploiements aussi grands que Google. Mais lorsque Kubernetes constitue le cœur d’une infrastructure sur des centaines, voire des milliers de serveurs, les configurations bare-metal sont probablement le meilleur choix.

Les serveurs bare-metal éliminent les coûts associés aux licences des hyperviseurs. En outre, les entreprises qui effectuent des déploiements à grande échelle disposent généralement d’administrateurs qualifiés qui se consacrent à l’utilisation d’une seule plateforme.

Une fois que de nombreux serveurs bare-metal sont en place, Kubernetes peut équilibrer les charges de travail sur ces hôtes et gérer les défaillances. Cet environnement homogène est généralement plus simple à administrer. Exécuter Kubernetes dans des VMs est plus cohérent pour des environnements hétérogènes.

Pour approfondir sur Virtualisation de serveurs