Qu’est-ce que Kubernetes ?

Publié le 11 mars 2024
Des traits bleus rayonnent à partir d’un point central sur un fond noir, créant un effet de vitesse de distorsion ou d’explosion lumineuse
By Stephanie Susnjara and Ian Smalley

Kubernetes : définition

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

Aujourd’hui, Kubernetes et l’écosystème plus large des technologies liées aux conteneurs ont fusionné pour former les éléments de base de l’infrastructure cloud moderne. Cet écosystème permet aux organisations de fournir un environnement multicloud hybride hautement productif pour accomplir des tâches complexes liées à l’infrastructure et aux opérations. Il soutient également le développement cloud native en permettant de créer une application en une seule fois et de la déployer n’importe où.

Le mot Kubernetes vient du grec et signifie timonier ou pilote, d’où la barre dans le logo Kubernetes.

Contexte : conteneurs, Docker et Kubernetes

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. Parce qu’ils sont plus petits, plus économes en ressources et plus portables que les machines virtuelles (VM), les conteneurs se sont imposés de facto comme les unités de calcul des applications cloud native modernes. Les conteneurs utilisent également les ressources plus efficacement. Ils permettent d’exécuter plus d’applications sur moins de machines (serveurs virtuels et serveurs physiques) avec moins d’instances d’OS.

Comme les conteneurs peuvent fonctionner de manière cohérente n’importe où, ils sont devenus essentiels à l’architecture sous-jacente qui prend en charge les environnements multicloud hybrides, combinant des services sur site, un cloud privé, un cloud public et plusieurs services cloud provenant de plusieurs fournisseurs cloud.

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 il désigne aujourd’hui é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, 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 d’exécution de conteneurs telles qu’Open Container Initiative (OCI), CoreOS et Canonical (Ubuntu) LXD, Docker reste le choix privilégié. De plus, Docker est devenu synonyme de conteneurs et est parfois considéré à tort comme un concurrent de technologies complémentaires telles que Kubernetes.

Aujourd’hui, Docker et Kubernetes sont les principaux outils de conteneurisation, Docker dominant 82 % du marché et Kubernetes contrôlant 11,52 % des parts en 2024.

Orchestration de conteneurs avec Kubernetes

Avec la prolifération des conteneurs, une entreprise peut aujourd’hui en posséder des centaines, voire des milliers. Les équipes opérationnelles sont nécessaires pour planifier et automatiser le déploiement des conteneurs, la mise en réseau, l’évolutivité et la disponibilité. C’est là qu’intervient l’orchestration de conteneurs.

Basé sur Borg, la plateforme interne d’orchestration de conteneurs de Google, Kubernetes a été présenté au public en tant qu’outil open source en 2014, Microsoft, Red Hat, IBM et d’autres grands acteurs technologiques étant devenus les premiers membres de la communauté Kubernetes. En 2015, Google a fait don de Kubernetes à la Cloud Native Computing Foundation (CNCF), la plateforme open source et indépendante des fournisseurs d’informatique cloud native.

Kubernetes est devenu le premier projet hébergé par la CNCF en mars 2016. Depuis, Kubernetes est devenu l’outil d’orchestration de conteneurs le plus utilisé pour l’exécution des workloads basés sur les conteneurs dans le monde entier. Dans un rapport de la CNCF, Kubernetes est le deuxième plus grand projet open source au monde (après Linux) et le principal outil d’orchestration de conteneurs pour 71 % des entreprises du Fortune 100.

En 2018, Kubernetes a été le premier projet au niveau Graduated de la CNCF, devenant ainsi l’un des projets open source les plus dynamiques de l’histoire. Alors que d’autres options d’orchestration de conteneurs, notamment Docker Swarm et Apache Mesos, ont gagné en popularité très tôt, Kubernetes est rapidement devenu la solution la plus largement adoptée.

Depuis que Kubernetes a rejoint la CNCF en 2016, le nombre de contributeurs est passé à 8 012, soit une hausse de 996 %. Au moment de la rédaction de cet article, les contributeurs ont ajouté plus de 123 000 commits au dépôt Kubernetes sur GitHub.

Que propose Kubernetes ?

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

Déploiement

Kubernetes déploie un nombre spécifique de conteneurs sur un hôte donné et les maintient dans l’état souhaité.

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.

Découverte de services

Kubernetes peut automatiquement exposer un conteneur à Internet ou à d’autres conteneurs en utilisant un nom DNS (Domain Name System) ou une adresse IP.

Provisionnement du stockage

Configurez Kubernetes pour que la solution installe un espace de stockage local ou cloud permanent pour vos conteneurs, en fonction des besoins.

Equilibrage de charge

En fonction de l’utilisation du CPU ou d’indicateurs personnalisés, l’équilibrage de charge Kubernetes peut distribuer le workload sur le réseau afin de maintenir des performances et une stabilité optimales.

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.

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.

IBM DevOps

Qu’est-ce que le DevOps ?

Andrea Crawford présente le DevOps, démontre sa valeur, et explique de quelle façon les pratiques et les outils DevOps vous aident à faire progresser vos applications dans l’ensemble du pipeline de livraison logiciel, de l’idéation à la production. Dirigé par des leaders d’opinion d’IBM, le programme a pour but d’aider les chefs d’entreprise à acquérir les connaissances nécessaires pour donner la priorité aux investissements dans l’IA capables de stimuler la croissance.

Architecture et composants Kubernetes

Le déploiement de Kubernetes implique des clusters, les éléments constitutifs de l’architecture Kubernetes. Ceux-ci sont composés de nœuds, chacun représentant un hôte de calcul unique, soit une machine physique (serveur bare metal), soit une machine virtuelle.

L’architecture Kubernetes se compose de deux parties principales : les composants du plan de contrôle et les composants qui gèrent les nœuds individuels.

Un nœud est constitué de pods. Il s’agit de groupes de conteneurs qui partagent les mêmes ressources informatiques et le même réseau. Ils constituent également l’unité d’évolutivité dans Kubernetes. Si un conteneur d’un pod reçoit plus de trafic qu’il ne peut en gérer, Kubernetes réplique le pod vers d’autres nœuds du cluster.

Le plan de contrôle gère automatiquement la planification des pods entre les nœuds d’un cluster.

Composants du plan de contrôle

Chaque cluster dispose d’un nœud maître qui gère le plan de contrôle. Ce nœud 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é de calcul disponible.

Les principaux composants d’un cluster Kubernetes sont le kube-apiserver, etcd, kube-scheduler, kube-controller-manager et cloud-controller-manager :

Serveur API :
Le serveur d’interface de programmation d’applications (API) dans Kubernetes expose l’API Kubernetes (l’interface utilisée pour gérer, créer et configurer les clusters Kubernetes) et sert de point d’entrée pour toutes les commandes et requêtes.

etcd
 : etcd est un magasin clé-valeur distribué open source utilisé pour stocker et gérer les informations critiques dont les systèmes distribués ont besoin pour continuer à fonctionner. Dans Kubernetes, etcd gère les données de configuration, les données d’état et les métadonnées.

Planificateur :
Ce composant suit les nouveaux pods créés et sélectionne les nœuds sur lesquels ils peuvent s’exécuter. Le planificateur prend en compte la disponibilité des ressources et les contraintes d’allocation, les exigences matérielles et logicielles, et bien plus encore.

Gestionnaire de contrôleurs :
ensemble de contrôleurs intégrés, le gestionnaire de contrôleurs Kubernetes exécute une boucle de contrôle qui surveille l’état partagé du cluster et communique avec le serveur API pour gérer les ressources, les pods ou les points de terminaison de service. Le contrôleur-gestionnaire est composé de processus distincts regroupés pour réduire la complexité et exécutés dans un seul processus.

Gestionnaire de contrôleurs cloud :
ce composant a une fonction similaire à celle du gestionnaire de contrôleurs. Il se connecte à l’API d’un fournisseur cloud et sépare les composants qui interagissent avec cette plateforme cloud de ceux qui interagissent uniquement au sein du cluster.

Composants des nœuds

Les nœuds de travail sont chargés de déployer, d’exécuter et de gérer les applications conteneurisées :

Kubelet :
Kubelet est un agent logiciel qui reçoit et exécute les ordres du nœud maître et contribue à garantir le bon fonctionnement des conteneurs dans un pod.

Kube-proxy :
installé sur chaque nœud d’un cluster, le kube-proxy maintient les règles réseau sur l’hôte et surveille les changements dans les services et les pods.

Autres concepts et terminologie de Kubernetes

  • ReplicaSet : un ReplicaSet maintient un ensemble stable de pods répliqués pour des workloads spécifiques.

  • Déploiement : 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.

  • Kubectl : les développeurs gèrent les opérations du cluster à l’aide de kubectl, un outil de développement composé d’une interface en ligne de commande (CLI) qui communique directement avec l’API Kubernetes.

  • DaemonSets : les DaemonSets sont chargés de veiller à ce qu’un pod soit créé sur chaque nœud du cluster.

  • Modules complémentaires : les modules complémentaires Kubernetes étendent les fonctions et comprennent Cluster DNS (un serveur DNS qui fournit des enregistrements DNS à Kubernetes), Web UI (un tableau de bord Kubernetes pour la gestion d’un cluster), et plus encore.

  • Service : un service Kubernetes est une couche d’abstraction qui définit un ensemble logique de pods et l’accès à ces derniers. Un service expose une application réseau s’exécutant sur un ou plusieurs pods d’un cluster. Il fournit un moyen abstrait d’équilibrer la charge des pods.

L’écosystème Kubernetes

Il existe aujourd’hui plus de 90 offres Kubernetes certifiées, notamment des plateformes de gestion dédiées aux entreprises qui fournissent des outils, des mises à niveau et des fonctionnalités complémentaires afin d’accélérer le développement et la livraison d’applications conteneurisées.

Services Kubernetes gérés

Bien que Kubernetes soit la technologie de choix pour orchestrer des applications cloud basées sur conteneurs, elle dépend d’autres composants, allant du réseau à l’ingress, en passant par l’équilibrage de charge, le stockage, l’intégration continue et la distribution continue (CI/CD), entre autres, pour être pleinement fonctionnelle.

Bien qu’il soit possible d’héberger soi-même un cluster Kubernetes dans un environnement cloud, la configuration et la gestion peuvent s’avérer complexes pour une entreprise. C’est là qu’interviennent les services Kubernetes gérés.

Grâce à eux, le fournisseur gère généralement les composants du plan de contrôle Kubernetes. Le fournisseur de services gérés aide à automatiser les processus de routine pour les mises à jour, l’équilibrage de charge, la mise à l’échelle et la surveillance. Par exemple, Red Hat OpenShift est un service Kubernetes qui peut être déployé dans n’importe quel environnement et sur tous les principaux clouds publics, notamment Amazon Web Services (AWS), Microsoft Azure, Google Cloud et IBM® Cloud. De nombreux fournisseurs de cloud proposent également leurs propres services Kubernetes gérés.

Outils de surveillance Kubernetes

La surveillance de Kubernetes fait référence à la collecte et à l’analyse des données relatives à l’état, aux performances et au coût des applications conteneurisées fonctionnant au sein d’un cluster Kubernetes.

La surveillance des clusters Kubernetes permet aux administrateurs et aux utilisateurs de suivre le temps de fonctionnement, l’utilisation des ressources des clusters et les interactions entre les composants des clusters. La surveillance permet d’identifier rapidement des problèmes tels que le manque de ressources, les pannes et les nœuds qui ne peuvent pas rejoindre le cluster. Les solutions de surveillance Kubernetes actuelles incluent des outils automatisés pour la gestion de la performance des applications (APM), l’observabilité, la gestion des ressources applicatives (ARM) et bien plus encore.

Maillage de service Istio

Kubernetes peut déployer et mettre à l’échelle 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 manière exponentielle. Par exemple, 2 conteneurs ont 2 connexions potentielles, mais 10 pods en ont 90, un cauchemar potentiel en termes de configuration et de gestion.

Istio, une couche de maillage de services configurable et open source, est une solution qui connecte, surveille et sécurise les conteneurs dans un cluster Kubernetes. Ses autres avantages significatifs incluent des capacités de débogage améliorées et un tableau de bord que les équipes DevOps et les administrateurs peuvent exploiter pour surveiller la latence, les erreurs de temps de service et d’autres caractéristiques des connexions entre les conteneurs.

Knative et l'informatique sans serveur

Knative (prononcé « kay-native ») est une plateforme open source qui facilite l’accès à l’informatique sans serveur, le modèle de développement et d’exécution d’applications cloud computing qui permet aux développeurs de créer et d’exécuter du code d’application sans provisionner ni gérer de serveurs ou d’infrastructure back-end.
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.

Tekton

Tekton est un cadre open source et indépendant permettant de créer des systèmes d’intégration et de livraison continues (CI/CD) régis par la Continuous Delivery Foundation (CDF).

En tant que cadre Kubernetes, Tekton contribue à moderniser la livraison continue en fournissant des spécifications sectorielles pour les pipelines, les workflows et d’autres composantes, ce qui facilite le déploiement sur plusieurs fournisseurs de cloud ou environnements hybrides.

Il convient de noter que Tekton est le successeur de Knative Build, qui demeure pris en charge dans certaines distributions Knative. Les pipelines Tekton sont devenus la norme pour la création d’images de conteneurs et leur déploiement dans un registre de conteneurs au sein d’un environnement Kubernetes.

Cas d’utilisation de Kubernetes

Les grandes entreprises exploitent Kubernetes pour prendre en charge les cas d’utilisation suivants, qui jouent tous un rôle prépondérant dans la composition d’une infrastructure informatique moderne :

Architecture de microservices ou développement cloud natif

Le cloud natif est une approche de développement logiciel pour la création, le déploiement et la gestion d’applications basées sur le cloud. Le principal avantage du cloud natif est qu’il permet au DevOps et aux autres équipes de coder une seule fois et de déployer sur n’importe quelle infrastructure cloud depuis n’importe quel fournisseur de services cloud.

Ce processus de développement moderne repose sur les microservices, une approche où une application unique est composée de nombreux composants ou services plus petits, faiblement couplés et déployables indépendamment, qui sont déployés dans des conteneurs gérés par Kubernetes.

Kubernetes permet de s’assurer que chaque microservice dispose des ressources dont il a besoin pour fonctionner efficacement, tout en minimisant la charge opérationnelle liée à la gestion manuelle de plusieurs conteneurs.

Environnements multicloud hybrides

Le cloud hybride combine et unifie le cloud public, le cloud privé et les centres de données sur site pour créer une infrastructure informatique unique et flexible qui optimise les coûts.

Aujourd’hui, le cloud hybride a fusionné avec le multicloud, les services de cloud public de plusieurs fournisseurs de cloud, pour créer un environnement multicloud hybride.

Cette approche offre plus de flexibilité et réduit la dépendance à un seul fournisseur, évitant ainsi l’enfermement propriétaire. Kubernetes constituant la base du développement cloud natif, il est essentiel à l’adoption du multicloud hybride.

Des applications à l’échelle

Kubernetes prend en charge le déploiement d’applications cloud à grande échelle grâce à la mise à l’échelle automatique. Ce processus permet aux applications de s’adapter automatiquement à l’évolution de la demande, avec rapidité, efficacité et un temps d’arrêt minimal.

Grâce à l’évolutivité élastique du déploiement Kubernetes, les ressources peuvent être ajoutées ou supprimées en fonction des variations du trafic utilisateur, comme les ventes flash sur les sites de vente au détail.

Modernisation des applications

Kubernetes fournit la plateforme cloud moderne nécessaire pour soutenir la modernisation des applications, la migration et la transformation d’applications héritées monolithiques en applications cloud construites sur une architecture de microservices.

Pratiques DevOps

L’automatisation est au cœur du DevOps, qui accélère la distribution de logiciels de meilleure qualité en combinant et en automatisant le travail des équipes de développement logiciel et d’exploitation informatique.

Kubernetes aide les équipes DevOps à créer et à mettre à jour rapidement des applications en automatisant leur configuration et leur déploiement.

Intelligence artificielle (IA) et machine learning (ML)

Les modèles de ML et les grands modèles de langage (LLM) qui alimentent l’IA intègrent des composants dont la gestion séparée serait complexe et chronophage. En automatisant la configuration, le déploiement et l’évolutivité dans les environnements cloud, Kubernetes contribue à fournir l’agilité et la flexibilité nécessaires pour entraîner, tester et déployer ces modèles sophistiqués.

Tutoriels Kubernetes

Si vous souhaitez commencer à utiliser Kubernetes ou cherchez à développer vos compétences existantes avec Kubernetes et les outils de l’écosystème Kubernetes, essayez l’un de ces tutoriels :

Auteurs

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Solutions connexes
IBM Instana Observability

Exploitez le pouvoir de l’IA et de l’automatisation pour résoudre de manière proactive les problèmes de la pile d’applications.

Découvrir IBM Instana Observability
Solutions DevOps

Utilisez les logiciels et outils DevOps pour construire, déployer et gérer des applications cloud natives sur plusieurs appareils et environnements.

Découvrir les solutions DevOps
Services de conseil en cloud

Renforcez l’agilité et la croissance de votre entreprise. Modernisez en continu vos applications sur n’importe quelle plateforme grâce à nos services de conseil cloud.

Découvrir les services de conseil cloud
Passer à l’étape suivante

De la détection proactive des incidents avec IBM Instana aux informations en temps réel sur l’ensemble de votre pile, garantissez la fiabilité de vos applications cloud-native.

  1. Découvrir IBM Instana
  2. Découvrir les solutions DevOps