Kubernetes : c’est quoi ?

Un conteneur en informatique est utilisé pour disposer d’un espace de travail consacré à une application logicielle. Il permet de lancer une application et ses aboutissants à travers un ensemble de processus isolés du reste du système. Cette méthode permet de garantir le déploiement stable et rapide des logiciels, peu importe l’environnement informatique. En pleine évolution depuis quelques années, ces conteneurs ont modifié le fonctionnement des systèmes. Ainsi, ils ont besoin de nouveaux outils afin d’automatiser le management des applications basées sur les conteneurs. C’est dans cette vision que Kubernetes a été développé.

Les origines de Kubernetes

Kubernetes est une plateforme Open Source qui permet d’automatiser l’exploitation des conteneurs. Elle permet de supprimer les processus manuels liés au déploiement et à la mise à échelle des applications conteneurisées. En réalité, ce système vous permet de gérer et de coordonner des applications conteneurisées sur un cluster de machines. Il a été créé pour gérer pleinement le cycle de vie des applications en utilisant des techniques de prédiction et de hautes disponibilités. Kubernetes peut fonctionner avec tous les systèmes de conteneurs adaptés au standard Open Container Initiative.

kubernetes logo big

Développé à l'origine par Google comme une évolution de son système interne Borg, Kubernetes est aujourd'hui une plateforme “open source”, utilisée pour l'orchestration et la gestion automatique des conteneurs. Le large éventail de fonctionnalités, la portabilité entre les principaux fournisseurs de cloud et sa haute fiabilité en ont fait, en peu de temps, l'un des outils les plus populaires.

Dans la langue grecque ancienne, Kubernetes signifie "barreur" ou "pilote". Lorsque, en 2014, Google a choisi ce nom pour la plate-forme open source d'orchestration et de gestion des conteneurs, ils ont opté pour un logo formé d’un gouvernail de direction stylisé.

Les sept rayons du gouvernail font référence au “projet Seven of Nine” qui était le nom originel du projet Kubernetes, alors développement supplémentaire de Borg, le gestionnaire de cluster employé en interne par les ingénieurs de Mountain View.


L'allusion sémantique ne fait pas référence à l'antiquité classique mais à l'univers de Star Trek, avec le personnage emblématique qu’est “Seven of Nine”, membre d’équipage anciennement Borg.

En 2015, suite à une alliance avec la Linux Foundation, Google décide de faire don de Kubernetes à la toute nouvelle “Cloud Native Computing Foundation” (CNCF) à laquelle se joignent aujourd'hui les géants mondiaux du cloud public.

Seven Of Nine Stra Trek

Seven Of Nine, ancienne Borg devenu membre d'équipage du Voyager

La genèse du projet a été racontée à plusieurs reprises par Craig McLuckie, co-fondateur de Kubernetes avec Joe Beda, au cours des années où ils ont tous deux travaillé sur Google Compute Engine, l'infrastructure derrière les services en ligne tels que Google Search, Gmail et YouTube.

À l'une de ces occasions, McLuckie apporte une idée à partir de laquelle le projet open-source Kubernetes a vu le jour, à savoir la sous-utilisation des ressources des machines virtuelles (VM) par des clients qui devaient, de toute façon supporter, les coûts liés.

Nous savions que nous avions une solution interne à ce problème - écrit l'actuel vice-président de la R&D de VMware -. De plus, nous savions que les conteneurs étaient l'avenir de la technologie de l'information : ils sont évolutifs, portables et plus efficaces. Le système de conteneurs Docker était déjà en service et nous l'avons trouvé fantastique. Mais l'astuce, que nous avons trouvée au terme d’années d'essais et d'erreurs au sein de Google, était un excellent système de gestion de conteneurs. C'est ce que nous voulions construire.

Craig McLuckie

VP R&D VMware

Conteneurs vs Machines Virtuelles

Kubernetes orchestre des containers qui s'exécutent sur des nœuds qui sont en fait des machines virtuelles ou physiques. Mais quelle est la différence entre un conteneur et une machine virtuelle ? Quels sont les avantages que les conteneurs apportent ? On y répond tout de suite.

L'avantage des conteneurs sur les machines virtuelles réside dans la "virtualisation" des applications logicielles et non, comme cela se produit dans les machines virtuelles, de l'ensemble de l'infrastructure informatique.

En substance, les développeurs n’ont pas besoin intervenir pour modifier l'ensemble de l'infrastructure, l’intervention se limitant à chaque composant d'application individuel. D'où la nécessité d'un modèle pour gouverner automatiquement l'orchestration des conteneurs distribués en clusters et sur plusieurs serveurs hôtes.

Le résultat est aujourd'hui un mouvement mondial qui voit Kubernetes (également abrégé "K8S") comme l'un des principaux outils à utiliser, avec une vitesse d'adoption qui, selon McLuckie lui-même, n'est même pas "les cibles les plus folles" que ses fondateurs avaient prédit

En 2019, elle pourrait en effet compter sur plus de 2 300 contributeurs et une diffusion généralisée parmi les entreprises les plus innovantes du monde dans des secteurs économiques très disparates.

Kubernetes vs Docker Swarm

La plupart du temps, on a tendance à comparer Kubernetes et Docker Swarm. En effet, ces deux plateformes mettent à disposition des capacités de déploiement et de gestion de conteneurs virtuels. Toutefois, ces deux outils présentent de nombreuses différences. En premier lieu, Docker Swarm se montre plus facile à utiliser que Kubernetes. C’est d’ailleurs l’une des failles de Kubernetes, sa complexité. L’installation et la configuration de ce dernier prennent énormément de temps. Car avant de commencer, un cluster doit être bootstrapé et configuré. Partie plus aisée sur Docker Swarm.

Toutefois, Kubernetes offre au final une gestion d'infrastructure sous containers beaucoup plus puissante que Docker Swarm. Une fois la courbe d'apprentissage passée, tout son potentiel se dévoile et les features qu'il offre sont légion.

Il est vrai que dans certains cas l'utilisation d'un cluster Kubernetes ne soit pas adapté, et qu'il faut plutôt se tourner vers des solutions plus simples telles que Docker Swarm ou Hashicorp Nomad. Mais pour des projets demandant une haute scalabilité, une infrastructure sous containers agile et gérable en tout point, Kubernetes prend les devant. Il s'impose comme l'outil incontournable.

Les principes de base d'un cluster

Maître

Il s'agit de la machine qui contrôle les nœuds et vous permet d'exécuter un service de planification capable d'automatiser la distribution des conteneurs en fonction des exigences définies par le développeur et de la capacité de calcul disponible.

Kubelet

C'est l'agent logiciel qui reçoit et exécute les commandes du nœud maître, en s'assurant que les conteneurs définis sont démarrés et exécutés sur les nœuds.

Nœuds

Les clusters sont constitués de nœuds, chacun représentant un seul hôte informatique, c'est-à-dire une machine virtuelle ou physique. Les nœuds exécutent les tâches qui leur sont confiées, sous la direction du nœud maître qui les contrôle.

Pods

C'est le plus petit et le plus simple objet Kubernetes. Un pod représente un ensemble de conteneurs dans le cluster. Ces conteneurs partagent un ensemble de ressources telles que les volumes de stockage et l'adresse IP.

Certains principes et notions lui sont spécifiques, mais d’autres existaient déjà. La conception de Kubernetes repose sur le cluster et les conteneurs qu’il contrôle. Le cluster est en réalité un groupe de machines exécutant Kubernetes. Ce groupe de machines doit disposer d’un master et de nœuds de travail. Le master étant là, comme dans tout système de cluster, pour gérer et contrôler les nœuds de travail.

Chaque cluster comporte donc des nœuds Kubernetes qui exécutent les pods. Ces nœuds peuvent être des machines physiques ou virtuelles. Les pods sont les objets Kubernetes les plus élémentaires. Chaque pod désigne une seule instance d’une application en cours d'exécution dans le cluster et est constitué d’un ou plusieurs conteneurs. Dans le pod, tous les conteneurs sont émis et reproduits en groupe. De cette façon, l’utilisateur peut se concentrer sur l’application au lieu des conteneurs.

Il existe évidemment d'autres éléments dans un cluster Kubernetes comme les services, les déploiements, les volumes persistants, les ingresses, etc... Ceux-ci feront l'objet d'articles à part.

Les principales fonctionnalités

Kubernetes offre un ensemble riche de fonctionnalités pour l’orchestration de container.

La découverte de service et l’équilibrage de charge

Pas besoin de modifier votre application pour utiliser un système de découverte de service. Kubernetes alloue aux pods (nous verrons ce qu’est un pod plus tard) leur propres adresses IP, des noms DNS uniques et peut équilibrer la charge entre eux.

Bin packing automatique

Kubernetes planifie automatiquement les containers en fonction de leurs besoins et contraintes afin d’en maximiser l’utilisation sans sacrifier la disponibilité.

Rollouts et rollbacks automatiques

Kubernetes rolls out et rolls back les mises à jour d’application et les changements de configuration de manière seamless en monitorant en continu la santé des applications afin d’éviter les downtimes.

Orchestration du stockage

Kubernetes monte automatiquement les espaces de stockage dans les containers via des Software-Defined Storage (SDS) ce qui permet de monter du stockage local, externe propre au provider cloud ou encore du stockage réseau.

Topologie de service

Kubernetes route le trafic aux différents services selon la topologie du cluster.

Self healing

Kubernetes remplace et replanifie automatiquement les containers en défaillance. Il tue et redémarre les containers qui ne répondent pas à leur health checks. Il évite également que le trafic soit routé sur des containers non disponibles.

Scaling horizontal

Les applications peuvent être scalées manuellement ou automatiquement selon des métriques type CPU/Mémoire ou custom.

Configurations et secrets

Kubernetes gère les secrets et les configurations des applications de manière distinct afin d’éviter à avoir à rebuilder l’image d’une application. Les secrets sont des informations confidentielles transmises à une application comme par exemple un mot de passe de connexion à une base de donnée.

Exécution de travail en masse

Kubernetes supporte l’exécution de travail en masse, les travaux de longue durée et remplace les containers en échec.

!

Il existe bien évidemment une multitude d’autres fonctionnalités, dont certaines sont en beta ou en alpha et passent en stable une fois finies. Je ne pouvais pas toutes les décrire ici, j'en ai donc sélectionné qu'une petite partie.

Son adoption massive au sein de la communauté

L'appréciation croissante dont Kubernetes bénéficie au sein de la communauté des développeurs découle de l'étendue de ses fonctionnalités, de son vaste écosystème d'outils de support open source et de sa portabilité via les principaux fournisseurs de cloud, dont certains offrent les services K8S de manière entièrement gérée.

En effet, dans les scénarios d'aujourd'hui, dominés par un grand nombre de conteneurs et la nécessité conséquente de garantir leur sécurité, Kubernetes est capable d'intégrer les différents niveaux de sécurité de la même manière qu'il parvient à orchestrer les charges de travail, les réseaux, le stockage, etc., en fournissant une architecture de conteneurs complète.

Un avantage qui se reflète également dans la réduction du risque de temps d'arrêt, étant donné que l'architecture redondante de la plateforme garantit des niveaux de continuité de service avec des pourcentages proches de 100 %.

C'est pourquoi Kubernetes fait partie des solutions haute disponibilité (HA) qui incluent les performances SLA (Service Level Agreement) les plus élevées.

Tous mes articles sur Kubernetes

Besoin d'un expert ?

Besoin d'une expertise fiable pour votre stratégie de conteneurisation ? Je vous guide dans la bonne utilisation des technologies de conteneurs tout au long de vos projets.

>