Kubernetes
Kubernetes est une plateforme d’orchestration de conteneurs open source qui automatise le déploiement, la gestion et la mise à l’échelle des applications conteneurisées.
Optimisez votre environnement Kubernetes Abonnez-vous à la newsletter d’IBM
Fond noir et bleu
Qu’est-ce que Kubernetes ?

Kubernetes, aussi connu sous le nom de « k8s » ou « kube », est une plateforme d'orchestration de conteneurs permettant de planifier et d'automatiser le déploiement, la gestion et la mise à l'échelle d'applications conteneurisées.

Kubernetes a d'abord été développée par des ingénieurs de Google avant d'être proposée en open source en 2014. Elle est apparentée à Borg, une plateforme d'orchestration de conteneurs utilisée en interne chez Google. Kubernetes signifie timonier ou pilote en grec, d'où le helm sur le logo Kubernetes (lien externe à ibm.com).

Aujourd'hui, Kubernetes et l'écosystème plus large des conteneurs sont en train de devenir une plateforme et un écosystème informatiques polyvalents qui rivalisent, voire dominent, les machines virtuelles (VM) en tant qu'éléments de base de l'infrastructure et des applications cloud modernes. Cet écosystème permet aux organisations de fournir une plateforme en tant que service (PaaS) à haute performance qui prend en charge de multiples tâches et problèmes liés à l'infrastructure et aux opérations dans le cadre du développement d'applications  cloud natives. Ainsi, les équipes de développement peuvent se concentrer uniquement sur le codage et l'innovation.     

La vidéo suivante constitue une excellente introduction aux fondamentaux de Kubernetes :

Automatiser l'élasticité des conteneurs pilotée par les applications

Pour les ingénieurs de plateforme et les ingénieurs DevOps qui cherchent à opérationnaliser la vitesse de mise sur le marché tout en maintenant les performances des applications.

Que sont les conteneurs ?

Les conteneurs sont des composants d’application légers et exécutables qui regroupent le code source de l’application et toutes les bibliothèques et dépendances du système d’exploitation nécessaires à l’exécution du code dans n’importe quel environnement.

Les conteneurs tirent parti d'une forme de virtualisation des systèmes d'exploitation (OS) qui permet à plusieurs applications de partager une seule instance d'un système d'exploitation en isolant les processus et en contrôlant les ressources liées au processeur, à la mémoire et au disque auxquelles ces processus peuvent avoir accès. Étant donné qu'ils sont plus petits, plus économes en ressources et plus faciles à transporter que les machines virtuelles (VM), les conteneurs se sont imposés de facto comme les unités de calcul des applications cloud natives modernes. 

Dans une étude récente menée par IBM, les utilisateurs ont signalé plusieurs avantages techniques et commerciaux spécifiques résultant de leur adoption de conteneurs et de technologies connexes. 

Conteneurs, machines virtuelles et infrastructure classique

Il peut être plus facile ou plus utile de considérer les conteneurs comme le dernier point du continuum de l'automatisation et de l'abstraction des infrastructures informatiques.

Dans l'infrastructure classique, les applications s'exécutent sur un serveur physique et utilisent toutes les ressources dont elles disposent. Vous avez donc le choix entre faire tourner plusieurs applications sur un même serveur en espérant que l'une d'entre elles ne monopolise pas les ressources au détriment des autres ou dédier un serveur à chaque application, ce qui implique une perte de ressources et n'est pas évolutif.

Les machines virtuelles (VM) sont des serveurs abstraits du matériel informatique réel, ce qui vous permet d'exécuter plusieurs VM sur un serveur physique ou une seule VM sur plusieurs serveurs physiques. Chaque VM exécute sa propre instance de système d'exploitation et vous pouvez isoler chaque application dans sa propre VM, ce qui réduit le risque que les applications exécutés sur le même matériel physique sous-jacent aient un impact les unes sur les autres. Les VM permettent une meilleure utilisation des ressources et sont beaucoup plus efficaces et rentables que l'infrastructure classique. De plus, elles sont consommables : lorsque vous n'avez plus besoin d'exécuter l'application, vous supprimez la VM.

Pour plus d'informations sur les machines virtuelles, voir « Qu’est-ce que des machines virtuelles ?»

Les conteneurs portent cette abstraction à un niveau supérieur : outre le partage du matériel virtualisé sous-jacent, ils partagent également un noyau de système d'exploitation virtualisé sous-jacent. Les conteneurs offrent les mêmes possibilités d'isolation, d'évolutivité et de cession que les machines virtuelles, mais comme ils ne transportent pas la charge utile de leur propre instance de système d'exploitation, ils sont plus légers (c'est-à-dire qu'ils occupent moins d'espace) que les machines virtuelles. Ils sont plus efficaces en termes de ressources : ils vous permettent d'exécuter plus d'applications sur moins de machines (virtuelles et physiques), en utilisant moins d'instances de système d'exploitation. Les conteneurs sont plus facilement transportables d'un bureau à l'autre, d'un centre de données à l'autre et d'un environnement cloud à l'autre. Et ils conviennent parfaitement aux pratiques de développement Agile et DevOps.

« Qu'est ce que les conteneurs ? » fournit une explication complète quant aux conteneurs et à la conteneurisation. Et le billet de blog « Conteneurs vs. VM : quelle est la différence ? » offre un aperçu détaillé des différences entre les deux.

Qu’est-ce que Docker ?

Docker est l'outil le plus populaire pour créer et exécuter des conteneurs Linux®. Alors que les premières formes de conteneurs ont été introduites il y a plusieurs décennies (avec des technologies telles que FreeBSD Jails et AIX Workload Partitions), les conteneurs se sont démocratisés en 2013 lorsque Docker les a mis à la portée du plus grand nombre avec une nouvelle implémentation intuitive pour les développeurs et pour le cloud.

Docker était à l'origine un projet open source, mais aujourd'hui il désigne également la société Docker Inc. qui produit Docker, un outil commercial de conteneurisation qui s'appuie sur le projet open source (et restitue ses améliorations à la communauté open source).

Docker a été conçu sur la base de la technologie classique des conteneurs Linux (LXC), mais il permet une virtualisation plus granulaire des processus du noyau Linux et ajoute des fonctionnalités qui facilitent la création, le déploiement, la gestion et la sécurisation des conteneurs pour les développeurs.

Bien qu'il existe aujourd'hui d'autres plateformes de conteneurs (telles que Open Container Initiative (OCI), CoreOS et Canonical (Ubuntu) LXD), Docker est si largement préféré qu'il est pratiquement synonyme de conteneurs et est parfois considéré à tort comme un concurrent de technologies connexes telles que Kubernetes (voir la vidéo « Kubernetes vs, Docker : pourquoi choisir ? » ci-dessous).

Orchestration de conteneurs avec Kubernetes

À mesure que les conteneurs se multipliaient (aujourd'hui, une entreprise peut en posséder des centaines, voire des milliers), les équipes opérationnelles devaient planifier et automatiser le déploiement, la mise en réseau, l'évolutivité et la disponibilité des conteneurs. C'est ainsi qu'est né le marché de l'orchestration de conteneurs.

Si d'autres options d'orchestration de conteneurs, notamment Docker Swarm et Apache Mesos, ont connu un certain succès au début, Kubernetes est rapidement devenu la solution la plus largement adoptée (en fait, à un moment donné, il s'agissait du projet dont la croissance était la plus rapide dans l'histoire des logiciels open source).

Les développeurs choisissent et continuent de choisir Kubernetes pour son large éventail de fonctionnalités, son vaste écosystème croissant d'outils open source, ainsi que sa prise en charge et sa portabilité entre les fournisseurs de services cloud. Tous les principaux fournisseurs de cloud public, dont Amazon Web Services (AWS), Google Cloud, IBM Cloud et Microsoft Azure, offrent des services Kubernetes entièrement gérés.

Que propose Kubernetes ?

Kubernetes planifie et automatise les tâches liées aux conteneurs tout au long du cycle de vie des applications, notamment :

  • Le déploiement : elle déploie un nombre spécifique de conteneurs sur un hôte donné et les maintient dans l’état souhaité.

  • Les rollouts : un rollout est une modification apportée à un déploiement. Kubernetes vous permet d’initier, de mettre en pause, de reprendre ou d’annuler des rollouts.

  • La découverte de services : Kubernetes peut automatiquement exposer un conteneur à Internet ou à d’autres conteneurs à l’aide d’un nom DNS ou d’une adresse IP.

  • La mise à disposition d’espace de stockage : vous pouvez faire en sorte que Kubernetes installe un espace de stockage local ou cloud permanent pour vos conteneurs, en fonction des besoins.

  • L'équilibrage de charge : basé sur l'utilisation du processeur ou des indicateurs personnalisées, l'équilibrage de charge Kubernetes peut distribuer le workload sur le réseau pour maintenir les performances et la stabilité. 

  • La mise à l'échelle automatique : lorsque le trafic augmente, la mise à l'échelle automatique Kubernetes peut créer de nouveaux clusters selon les besoins pour gérer le workload supplémentaire.

  • L'auto-réparation pour garantir une haute disponibilité : en cas de panne d’un conteneur, Kubernetes peut le redémarrer ou le remplacer automatiquement pour éviter les temps d’arrêt. Il peut également mettre hors service les conteneurs qui ne répondent pas à vos exigences en matière de contrôle de l’état de santé du système.

Kubernetes vs. Docker

Si vous avez lu jusqu'ici, vous réalisez déjà que si Kubernetes est une alternative à Docker Swarm, ce n'est pas (contrairement à une idée reçue tenace) une alternative ou un concurrent à Docker lui-même.

En fait, si vous avez adopté Docker dans un esprit enthousiaste et que vous créez des déploiements de conteneurs à grande échelle basés sur Docker, l'orchestration Kubernetes est une étape logique pour la gestion de ces workloads.

Pour en savoir plus, regardez « Kubernetes vs, Docker : pourquoi choisir ? » :

Architecture Kubernetes

Les principaux composants de l'architecture Kubernetes sont les suivants :

Les clusters et nœuds (calcul)

Les clusters sont les éléments constitutifs de l'architecture Kubernetes. Les clusters sont composés de noeuds, chacun représentant un hôte de calcul unique (machine virtuelle ou physique).

Chaque cluster se compose d'un noeud maître qui sert de plan de contrôle pour le cluster et de plusieurs nœuds worker qui déploient, exécutent et gèrent des applications conteneurisées. Le nœud maître exécute un service de planification qui automatise le moment et l'endroit où les conteneurs sont déployés en fonction des exigences de déploiement définies par les développeurs et de la capacité informatique disponible. Chaque nœud worker inclut l'outil utilisé pour gérer les conteneurs, tel que Docker, et un agent logiciel appelé Kubelet qui reçoit et exécute les ordres du nœud maître.

Les développeurs gèrent les opérations de cluster à l'aide de kubectl, une interface de ligne de commande (cli) qui communique directement avec l'API Kubernetes. 

Pour en savoir plus sur les clusters Kubernetes, lisez : « Clusters Kubernetes : architecture pour une mise à disposition rapide et contrôlée d'applications dans le cloud ».

Les pods et déploiements (logiciel)

Les pods sont des groupes de conteneurs qui partagent les mêmes ressources de calcul et le même réseau. Ils constituent également l'unité d'évolutivité de Kubernetes : si un conteneur dans un pod reçoit plus de trafic qu'il ne peut en gérer, Kubernetes répliquera le pod sur d'autres nœuds du cluster. C'est pourquoi il est conseillé de garder les pods compacts afin qu'ils ne contiennent que des conteneurs qui doivent partager des ressources.

Le déploiement contrôle la création et l'état de l'application conteneurisée et en assure le fonctionnement. Il spécifie le nombre de répliques d'un pod qui doivent être exécutées sur le cluster. En cas de défaillance d’un pod, le déploiement en crée un nouveau.

Pour en savoir plus sur les déploiements Kubernetes, regardez « Déploiement Kubernetes : tout savoir avant de vous lancer » :

Maillage de service Istio

Kubernetes peut déployer et faire évoluer les pods, mais il ne peut pas gérer ou automatiser le routage entre eux et ne fournit aucun outil pour surveiller, sécuriser ou déboguer ces connexions. À mesure que le nombre de conteneurs dans un cluster augmente, le nombre de chemins de connexion possibles entre eux augmente de façon exponentielle (par exemple, deux conteneurs ont deux connexions potentielles, mais 10 pods en ont 90), un cauchemar potentiel en termes de configuration et de gestion.

C'est là qu'intervient Istio, une couche de maillage de service open source pour les clusters Kubernetes. Pour chaque cluster Kubernetes, Istio ajoute un conteneur sidecar, quasiment invisible pour le programmeur et l'administrateur, qui configure, surveille et gère les interactions entre les autres conteneurs.

Avec Istio, vous définissez une politique unique qui configure les connexions entre les conteneurs, de sorte que vous n'avez pas à configurer chaque connexion individuellement. Cela facilite le débogage des connexions entre les conteneurs.

Istio fournit également un tableau de bord que les équipes DevOps et les administrateurs peuvent utiliser pour surveiller la latence, les erreurs de temps de service et d'autres caractéristiques des connexions entre les conteneurs. Enfin, il intègre la sécurité, en particulier la gestion des identités qui empêche les utilisateurs non autorisés d'usurper un appel de service entre les conteneurs, ainsi que des fonctionnalités d'authentification, d'autorisation et d'audit (AAA) que les professionnels de la sécurité peuvent utiliser pour surveiller le cluster.

En savoir plus sur Istio
Knative et l'informatique sans serveur

Knative (prononcé « kay-native ») est une plateforme open source qui se greffe sur Kubernetes et offre deux catégories importantes d'avantages pour le développement cloud natif :

Knative permet d'accéder facilement à l'informatique sans serveur

L’informatique sans serveur est une méthode relativement nouvelle de déploiement de code qui rend les applications cloud natives plus efficaces et plus rentables. Au lieu de déployer une instance permanente de code qui reste inactive en attendant les demandes, l'approche sans serveur met en place le code en fonction des besoins. Elle l'augmente ou le réduit en fonction des fluctuations de la demande, puis le désactive lorsqu'il n'est pas utilisé. L'informatique sans serveur permet de ne pas gaspiller la capacité et l'énergie du système informatique et de réduire les coûts, car vous ne payez pour l'exécution du code que lorsqu'il est réellement en cours d'exécution.

Knative permet aux développeurs de créer un conteneur et de l'exécuter en tant que service logiciel ou en tant que fonction sans serveur. Le développeur n'y voit que du feu : Knative s'occupe des détails en arrière-plan et le développeur peut se concentrer sur le code.

Knative simplifie le développement et l'orchestration des conteneurs

Pour les développeurs, la conteneurisation du code nécessite de nombreuses étapes répétitives, et l'orchestration des conteneurs nécessite de nombreuses configurations et scripts (tels que la génération de fichiers de configuration, l'installation de dépendances, la gestion de la journalisation et du traçage, et l'écriture de scripts d'intégration continue/déploiement continu (CI/CD)).

Knative facilite ces tâches en les automatisant grâce à trois composants :

Build : Le composant Build de Knative transforme automatiquement le code source en un conteneur ou une fonction cloud native. Plus précisément, il extrait le code du référentiel, installe les dépendances requises, créé l'image du conteneur et le place dans un container registry que les autres développeurs pourront utiliser. Les développeurs doivent spécifier l'emplacement de ces composants afin que Knative puisse les trouver, mais une fois cela fait, Knative automatise ce processus.

Serve : le composant Serve exécute les conteneurs comme des services évolutifs ; il peut s'étendre à des milliers d'instances de conteneurs ou se réduire à zéro (appelé scaling to zero). En outre, Serve possède deux fonctionnalités très utiles : la configuration, qui enregistre les versions d'un conteneur (appelées snapshots) chaque fois que vous mettez le conteneur en production et vous permet d'exécuter ces versions simultanément ; et le routage des services, qui vous permet de diriger différents volumes de trafic vers ces versions. Vous pouvez utiliser ces fonctionnalités ensemble pour mettre en place progressivement un déploiement de conteneurs ou pour effectuer un test canari d'une application conteneurisée avant de la mettre en production à l'échelle mondiale.

Event : Event permet à des événements spécifiés de déclencher des services ou des fonctions basés sur des conteneurs. C'est particulièrement intègre aux capacités sans serveur de Knative ; quelque chose doit dire au système de lancer une fonction en cas de besoin. Event permet aux équipes d'exprimer leur intérêt pour des types d'événements, puis il se connecte automatiquement au producteur de l'événement et achemine les événements vers le conteneur, éliminant ainsi la nécessité de programmer ces connexions.

Lire plus sur Knative
Les commits GitHub de Kubernetes et d'autres preuves d'une popularité accrue

Kubernetes est l'un des projets open source à la croissance la plus rapide de l'histoire, et cette croissance se poursuit. L'adoption continue de monter en flèche parmi les développeurs et les entreprises qui les utilisent. Quelques chiffres qui méritent d'être soulignés :

  • À l'heure où nous écrivons ces lignes, plus de 120 190 commits ont été apportées au référentiel Kubernetes sur GitHub (lien externe à ibm.com), soit une augmentation de près de 34 000 commits au cours des 18 derniers mois, et le projet compte plus de 3 100 contributeurs actifs. Selon la Cloud Native Computing Foundation (CNCF), il y a eu plus de 148 000 commits dans tous les référentiels liés à Kubernetes (y compris Kubernetes Dashboard et Kubernetes MiniKube). Vous pouvez retrouver toutes les statistiques ici (lien externe à ibm.com).

  • Plus de 2 000 entreprises utilisent Kubernetes dans leurs piles logicielles de production. Il s'agit notamment d'entreprises de renommée mondiale telles que AirBnB, Ancestry, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder et, bien sûr, IBM. Lisez ces études de cas et d'autres études de cas relatives à son adoption (lien à ibm.com)

  • Une enquête de 2021 citée dans Container Journal (lien externe à ibm.com) a révélé que 68 % des professionnels de l'informatique avaient davantage recours à Kubernetes pendant la pandémie de COVID-19.

  • Selon ZipRecruiter (lien externe à ibm.com), le salaire annuel moyen (en Amérique du Nord) pour un emploi lié à Kubernetes est de 147 732 dollars. À l'heure actuelle, plus de 57 000 postes en lien avec Kubernetes sont répertoriés sur LinkedIn (lien externe à ibm.com), contre 21 000 postes répertoriés il y a seulement 18 mois.
Solutions connexes
Red Hat OpenShift on IBM Cloud

Avec Red Hat OpenShift on IBM Cloud, les développeurs OpenShift disposent d’un moyen rapide et sécurisé pour conteneuriser et déployer des workloads d’entreprise au sein de clusters Kubernetes.

Découvrir Red Hat OpenShift
IBM Cloud Satellite

Déployez et exécutez des applications de manière cohérente dans des environnements sur site, d'edge computing et de cloud public de n'importe quel fournisseur cloud, en utilisant un ensemble commun de services cloud, tels que des chaînes d'outils, des bases de données et des outils d'IA, où que vous soyez.

Découvrir les solutions IBM Cloud Satellite
IBM Cloud Code Engine

Plateforme sans serveur entièrement gérée, IBM Cloud Code Engine vous permet d’exécuter votre conteneur, code d’application ou tâche par lots sur un runtime de conteneur entièrement géré.

Découvrir Code Engine
Ressources Containers in the enterprise (Les conteneurs dans l’entreprise)

Une nouvelle étude d’IBM décortique l’essor fulgurant des conteneurs et de Kubernetes.

Une informatique flexible, résiliente et sécurisée pour votre cloud hybride

Les conteneurs font partie d’une stratégie de cloud hybride qui vous permet de créer et de gérer des workloads à partir de n’importe quel endroit.

Qu’est-ce que l’approche « sans serveur » ?

L’approche sans serveur (ou « serverless ») est un modèle de développement et d’exécution d’applications cloud qui permet aux développeurs de générer et d’exécuter du code sans gérer de serveurs ni payer pour une infrastructure cloud inutilisée.

Les bases du YAML dans Kubernetes

Découvrir comment un fichier YAML est utilisé dans Kubernetes.

Passez à l’étape suivante

Red Hat OpenShift sur IBM Cloud offre aux développeurs OpenShift un moyen rapide et sécurisé de conteneuriser et de déployer des charges de travail d’entreprise au sein de clusters Kubernetes. Déployez des clusters Kubernetes hautement disponibles et entièrement gérés pour vos applications conteneurisées en un seul clic. IBM s’occupe d’OpenShift Container Platform (OCP), ce qui vous laisse plus de temps pour vous concentrer sur votre cœur de métier.

Découvrir Red Hat OpenShift on IBM Cloud