Kubernetes
Kubernetes, une plateforme d'orchestration de conteneurs open source, automatise le déploiement, la gestion et la mise à l'échelle des applications conteneurisées.
Arrière-plan noir et bleu
Qu'est-ce que Kubernetes ?

Kubernetes, également appelé « k8s » ou « kube », est une plateforme d'orchestration de conteneur permettant de planifier et d'automatiser le déploiement, la gestion et la mise à l'échelle des applications conteneurisées.

Kubernetes a d'abord été développé par les ingénieurs de Google avant de passer en open source en 2014. Il découle de 'Borg', une plateforme d'orchestration de conteneurs utilisée en interne chez Google. Kubernetes est un mot grec qui signifie timonier ou pilote, d'où la barre dans le logo Kubernetes (lien externe à ibm.com).

Aujourd'hui, Kubernetes et l'écosystème des conteneurs au sens large sont en train de devenir une plateforme et un écosystème informatiques polyvalents qui rivalisent avec les machines virtuelles (VM), voire les surpassent, en tant qu'éléments de base de l'infrastructure et des applications cloud modernes. Cet écosystème permet aux entreprises de fournir une PaaS (Platform-as-a-Service) hautement productive qui gère plusieurs tâches et problèmes liés à l'infrastructure et aux opérations liées au développement cloud natif afin que les équipes de développement puissent se focaliser uniquement sur le codage et l'innovation.     

La vidéo suivante offre une excellente introduction aux bases de Kubernetes :

Que sont les conteneurs ?

Les conteneurs sont des composants d'application exécutables légers qui combinent du code source d'application avec toutes les bibliothèques et dépendances de système d'exploitation nécessaires pour exécuter le code dans tout environnement.

Les conteneurs tirent parti d'une forme de virtualisation du système d'exploitation qui permet à plusieurs applications de partager une instance d'un système d'exploitation en isolant les processus et en contrôlant la quantité d'UC, de mémoire et de disque à laquelle ces processus peuvent accéder. Parce qu'ils sont plus petits, plus économes en ressources et plus portables que les machines virtuelles (VM), les conteneurs sont devenus les unités de calcul de facto des applications cloud natives modernes

Dans une étude récente d'IBM (PDF, 1,4 Mo), des utilisateurs ont indiqué plusieurs avantages techniques et métier spécifiques résultant de l'adoption de conteneurs et des technologies connexes. 

Conteneurs, machines virtuelles ou infrastructures traditionnelles

Il peut être plus facile ou plus utile de considérer les conteneurs comme le dernier point sur le continuum de l'automatisation et de l'abstraction de l'infrastructure informatique.

Dans les infrastructures traditionnelles, les applications s'exécutent sur un serveur physique et récupèrent toutes les ressources qu'elles peuvent trouver. Vous avez donc le choix entre exécuter plusieurs applications sur un seul serveur en espérant que l'une d'entre elles n'accapare pas les ressources au détriment des autres, ou dédier un serveur par application, ce qui entraîne un gaspillage de ressources et n'est pas évolutif.

Les machines virtuelles (VM) sont des serveurs isolés du matériel informatique réel, ce qui permet d'en exécuter plusieurs sur un seul serveur physique ou une seule machine virtuelle qui couvre plusieurs serveurs physiques. Chaque machine virtuelle exécute sa propre instance de système d'exploitation et vous pouvez isoler chaque application dans sa propre machine virtuelle, réduisant ainsi le risque que les applications s'exécutant sur le même matériel physique sous-jacent aient un impact les unes sur les autres. Les machines virtuelles tirent un meilleur parti des ressources et sont beaucoup plus faciles et plus économiques à mettre à l'échelle que les infrastructures traditionnelles. Et elles sont « jetables » : lorsque vous n'avez plus besoin d'exécuter l'application, vous arrêtez la VM.

Pour plus information sur les VM, voir « Que sont les machines virtuelles ? »

Les conteneurs font passer cette abstraction à un niveau supérieur. En plus de partager le matériel virtualisé sous-jacent, ils partagent notamment un noyau de système d'exploitation sous-jacent virtualisé. Les conteneurs offrent le même isolement, la même évolutivité et la même capacité d'élimination que les machines virtuelles, mais comme ils ne transportent pas le contenu de leur propre instance de système d'exploitation, ils sont plus légers (c'est-à-dire qu'ils prennent moins d'espace) que les machines virtuelles. Ils sont plus économes en ressources — ils vous permettent d'exécuter plus d'applications sur moins de machines (virtuelles et physiques), avec moins d'instances de système d'exploitation. Les conteneurs sont plus facilement portables dans les environnements de bureau, de data center et de cloud. Ils sont aussi parfaitement adaptés aux méthodes de développement agile et DevOps.

« Que sont les conteneurs ? » fournit une explication complète des conteneurs et de la conteneurisation. Et le post de blog « Conteneurs vs VM : quel est la différence ? » récapitule les différences.

Qu'est-ce que Docker ?

Docker est l'outil le plus utilisé 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 fait découvrir aux masses avec une nouvelle implémentation conviviale pour les développeurs et adaptée au cloud.

Docker a commencé comme un projet open source, mais aujourd'hui ce nom fait aussi référence à Docker Inc., la société qui produit Docker — un kit d'outils de conteneurs en vente dans le commerce qui s'appuie sur le projet open source (et fait profiter la communauté open source de ces améliorations).

Docker a été construit à partir de la technologie de conteneurs Linux (LXC) traditionnelle mais permet une virtualisation plus granulaire des processus du noyau Linux ; il ajoute aussi des fonctions pour faciliter 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 qu'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 des technologies complémentaires telles que Kubernetes (voir la vidéo « Kubernetes et Docker : l'un ne va pas sans l'autre » ci-dessous.

Orchestration de conteneurs avec Kubernetes

Alors que les conteneurs proliféraient (aujourd'hui, une entreprise peut en avoir des centaines ou des milliers), les équipes d'exploitation devaient planifier et automatiser le déploiement des conteneurs, la mise en réseau, l'évolutivité et la disponibilité. C'est ainsi qu'est né le marché de l'orchestration de conteneurs.

Tandis que d'autres solutions d'orchestration de conteneurs, notamment Docker Swarm et Apache Mesos, ont rapidement gagné des adeptes, Kubernetes est vite devenu la solution la plus largement adoptée (à un moment donné, elle a même été le projet ayant enregistré la croissance la plus rapide de l'histoire des logiciels open source).

Les développeurs ont choisi et continuent à choisir Kubernetes en raison de l'étendue de ses fonctionnalités, de son écosystème vaste et croissant d'outils associés open source de son support et sa portabilité au niveau des fournisseurs de services cloud . Tous les fournisseurs de cloud public leaders, y compris Amazon Web Services (AWS), Google Cloud, IBM Cloud et Microsoft Azur, offrent des services Kubernetes totalement gérés.

Que fait Kubernetes ?

Kubernetes planifie et automatise les tâches liées aux conteneurs dans l'ensemble du cycle de vie de l'application , notamment :

  • Déploiement : Déployez un nombre de conteneurs précis sur un hôte donné et maintenez leur exécution dans un état souhaité.

  • Redéploiements : Un redéploiement est une modification apportée à un déploiement. Kubernetes permet de lancer, mettre en pause, reprendre ou annuler des redéploiements.

  • Reconnaissance de service : Kubernetes peut automatiquement exposer un conteneur à Internet ou à d'autres conteneurs au moyen d'un nom DNS ou d'une adresse IP.

  • Mise à disposition du stockage : Définissez Kubernetes de manière à monter un espace de stockage local ou cloud permanent pour vos conteneurs selon vos besoins.

  • Equilibrage de charge : Sur la base de l'utilisation de l'unité centrale ou de métriques personnalisées , l'équilibrage de charge Kubernetes peut répartir la charge de travail sur l'ensemble du réseau pour maintenir la performance et la stabilité. 

  • Mise à l'échelle automatique : Lorsque le trafic augmente, la mise à l'échelle automatique de Kubernetes peut lancer de nouveaux clusters pour gérer la charge de travail supplémentaire.

  • Réparation spontanée pour une haute disponibilité : Lorsqu'un conteneur tombe en panne, Kubernetes peut le redémarrer ou le remplacer automatiquement pour éviter tout temps d'indisponibilité. Il peut également stopper des conteneurs qui ne répondent pas à vos exigences en matière de contrôle d'état.

Kubernetes versus Docker

Si vous avez lu l'article jusqu'ici, vous avez déjà compris que si Kubernetes est une alternative à Docker Swarm, il n'est pas (contrairement à une idée reçue persistante) une alternative ou un concurrent de Docker lui-même.

En fait, si vous avez adopté Docker avec enthousiasme et que vous créez des déploiements de conteneurs basés sur Docker à grande échelle, l'orchestration Kubernetes constitue la prochaine étape logique pour gérer ces charges de travail.

Pour en savoir plus, regardez « Kubernetes vs Docker : l'un ne va pas sans l'autre » :

Architecture Kubernetes

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

Clusters et nœuds (calcul)

Les clusters sont les blocs fonctionnels de l'architecture Kubernetes. Ils sont constitués de noeuds, chaque nœud représentant un seul hôte de calcul (machine virtuelle ou physique).

Chaque cluster est composé d'un noeud principal qui lui sert de plan de contrôle et de plusieurs nœuds worker qui déploient, exécutent et gèrent des applications conteneurisées . Le nœud principal exécute un service de planificateur qui automatise quand et 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. Chaque nœud de travail comprend l'outil utilisé pour gérer les conteneurs, tels que Docker et un agent logiciel appelé Kubelet qui reçoit et exécute des commandes du nœud principal.

Les développeurs gèrent les opérations de clusters via kubectl, une interface de ligne de commande qui communique directement avec l'API Kubernetes . 

Pour en savoir plus sur les clusters Kubernetes, consultez ce post de blog : « Clusters Kubernetes : l'architecture pour une livraison rapide et contrôlée d'applications cloud. »

Pods et déploiements (logiciels)

Les pods sont des groupes de conteneurs qui partagent les mêmes ressources de calcul et le même réseau. Ils sont aussi l'unité d'évolutivité dans Kubernetes : si un conteneur dans un pod reçoit plus de trafic qu'il ne peut en gérer, Kubernetes réplique le pod vers d'autre nœuds du cluster. Il est donc recommandé de conserver 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 assure son exécution continue. Il indique le nombre de répliques d'un pod qui doivent s'exécuter sur le cluster. Si un pod tombe en panne, le déploiement en créera un nouveau.

Pour plus d'informations sur les déploiements Kubernetes, regardez « Déploiements Kubernetes : démarrez rapidement » :

Maillage de services Istio

Kubernetes peut déployer et mettre à l'échelle des pods mais il ne peut pas gérer ni automatiser le routage entre eux, et il 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), ce qui crée un cauchemar potentiel de configuration et de gestion.

C'est là qu'entre en jeu Istio, une couche de maillage de services open source conçue pour les clusters Kubernetes. Pour chaque cluster Kubernetes, Istio ajoute un conteneur sidecar, pour l'essentiel 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 règle unique qui configure les connexions entre les conteneurs pour vous éviter d'avoir à configurer chaque connexion individuellement. Cela facilite le débogage des connexions entre conteneurs.

Istio fournit également un tableau de bord que les équipes et les administrateurs DevOps peuvent utiliser pour surveiller la latence, les erreurs de temps en service et d'autres caractéristiques des connexions entre conteneurs. De plus, il intègre la sécurité, notamment la gestion des identités qui empêche les utilisateurs non autorisés d'usurper un appel de service entre conteneurs, ainsi que des fonctions 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 s'appuie sur Kubernetes et offre deux catégories importantes d'avantages pour le développement cloud natif :

Knative fournit une passerelle facile vers l'informatique sans serveur

L'informatique sans serveur est une façon relativement nouvelle de déployer le code qui rend les applications cloud natives plus efficaces et plus rentables. Au lieu de déployer une instance de code continue qui reste inactive en attendant des demandes, l'informatique sans serveur fournit le code selon les besoins, en le faisant évoluer à la hausse ou à la baisse en fonction de la demande, puis élimine le code lorsqu'il n'est pas utilisé. L'informatique sans serveur empêche le gaspillage de la capacité et de la puissance informatiques et réduit les coûts car vous ne payez que pour le code qui est cours d'exécution.

Knative permet aux développeurs de créer un conteneur une fois pour toutes, puis de l'exécuter en tant que service logiciel ou en tant que fonction sans serveur. Tout est transparent pour le développeur : Knative gère les détails dans l'arrière-plan et le développeur peut s'axer sur le code.

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

Pour les développeurs, la conteneurisation du code nécessite de nombreuses étapes répétitives, et l'orchestration des conteneurs requiert de nombreuses tâches de configuration et d'écriture de script (comme la génération de fichiers de configuration, l'installation de dépendances, la gestion de la consignation, le traçage et l'écriture de scripts d'intégration et de déploiement continus

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

Build : Le composant Build de Knative transforme automatiquement le code source en conteneur ou fonction cloud natif. Plus précisément, il extrait le code du référentiel, installe les dépendances requises, génère l'image du conteneur qu'il place dans un registre de conteneur pour permettre aux autres développeurs de l'utiliser. Les développeurs doivent indiquer l'emplacement de ces composants pour que Knative puisse les retrouver, mais une fois que cela est fait, Knative automatise la construction.

Serve : Le composant Serve exécute des conteneurs comme des services évolutifs ; il peut passer à des milliers d'instances de conteneur ou à aucune (ce qui est appelé réduction à zéro). De plus, Serve dispose de deux fonctionnalités très utiles : la configuration, qui enregistre les versions d'un conteneur (appelées instantanés) chaque fois que vous poussez un conteneur en production et vous permet d'exécuter ces versions en même temps ; et le routage de service, qui permet de diriger différents volumes de trafic vers ces versions. Vous pouvez utiliser ces fonctions ensemble pour planifier le déploiement progressif d'un conteneur ou pour effectuer un test du canari sur une application conteneurisée avant de la faire passer en phase de production globale.

Event : Le composant Event permet aux événements indiqués de déclencher des services ou des fonctions basés sur des conteneurs. Cela fait partie intégrante des capacités sans serveur de Knative ; quelque chose doit dire au système d'exécuter une fonction si nécessaire. Le composant Event permet aux équipes d'exprimer leur « intérêt » pour certains types d'événement et il se connecte ensuite automatiquement au producteur d'événements et route les événements vers le conteneur, éliminant ainsi le besoin de programmer ces connexions.

En savoir plus sur Knative
Soumissions GitHub Kubernetes et attestation d'une popularité croissante

Kubernetes est l'un des projets open source qui enregistre l'une des croissances les plus rapides de l'histoire, et cette croissance s'accélère. Son adoption continue d'exploser chez les développeurs et les entreprises qui les emploient. Voici quelques faits marquants :

  • Au moment de la rédaction de cet article, plus de 120 190 soumissions ont été faites sur le référentiel Kubernetes sur GitHub (lien externe à ibm.com), une augmentation de près de 34 000 soumissions au cours des 18 derniers mois et on compte 3100 contributeurs actifs au projet. Selon la Cloud Native Computing Foundation (CNCF), il y a eu plus de 148 000 soumissions dans tous les référentiels liés à Kubernetes (y compris Kubernetes Dashboard et Kubernetes MiniKube). Vous pouvez lire toutes les statistiques ici (lien externe à ibm.com).

  • Plus de 2000 entreprises utilisent Kubernetes dans leurs piles de logiciels de production. Il s'agit d'entreprises mondialement connues telles que AirBnB, Ancestry, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder et, bien sûr, IBM. Lisez ces études de cas d'adoption (lien externe à ibm.com)

  • Une étude de 2021 citée dans Container Journal (lien externe à ibm.com) a révélé que 68 % des professionnels de l'IT ont davantage utilisé Kubernetes au cours de 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 USD. Lors de la rédaction de cet article, il y a plus de 57 000 postes liés à Kubernetes répertoriés sur LinkedIn (lien externe à ibm.com), comparé à 21 000 postes il y a 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é de conteneuriser et déployer des charges de travail d'entreprise dans des clusters Kubernetes.

Explorer Red Hat OpenShift
IBM Cloud Satellite

Déployez et exécutez des applications de manière cohérente dans des environnements sur site, informatiques de périphérie et de cloud public de n'importe quel fournisseur de cloud, en utilisant un ensemble commun de services cloud, notamment des chaînes d'outils, des bases de données et l'IA.

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, votre code d'application ou votre travail par lots sur un moteur d'exécution de conteneur entièrement géré.

Explorer IBM Code Engine
Ressources Conteneurs dans l'entreprise
Une nouvelle étude d'IBM montre que l'adoption des conteneurs et de Kubernetes est en plein essor.
Des technologies de l'information flexibles, résilientes et sécurisées 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 les charges de travail à partir de n'importe où.
Qu'est-ce que le "sans serveur" ?
Serverless est un modèle de développement et d'exécution d'applications cloud qui permet aux développeurs de créer et d'exécuter du code sans avoir à gérer de serveurs ou à payer pour une infrastructure de cloud inactive.
Pour aller plus loin

Avec Red Hat OpenShift on IBM Cloud, les développeurs OpenShift disposent d'un moyen rapide et sécurisé de conteneuriser et déployer des charges de travail d'entreprise dans des clusters Kubernetes. D'un clic, déployez des clusters Kubernetes hautement disponibles et entièrement gérés pour vos applications conteneurisées.IBM gérant OpenShift Container Platform (OCP), vous aurez davantage de temps pour vous concentrer sur vos tâches principales.

Explorer Red Hat OpenShift sur IBM Cloud