Kubernetes
Arrière-plan noir et bleu
Qu'est-ce que 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. Découvrez comment Kubernetes permet un développement cloud natif rentable.

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 (le lien réside en dehors d'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 un PaaS (Platform-as-a-Service) hautement productif qui gère plusieurs tâches et problèmes liés à l'infrastructure et aux opérations liés au développement cloud natif afin que les équipes de développement puissent se focaliser uniquement sur la codification et l'innovation.     

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

Les conteneurs dans l'entreprise - La nouvelle recherche IBM documente l'essor de l'adoption des conteneurs et de Kubernetes.

Lire l'e-book (1,4 Mo)


Définition des 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 simple ou plus concret de considérer les conteneurs comme le dernier point sur le continuum de l'automatisation et de l'abstraction de l'infrastructure IT.

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 informations sur les VM, voir "Machines virtuelles : un guide essentiel ."

Les conteneurs portent cette abstraction à un niveau supérieur. Plus précisément, en plus de partager le matériel virtualisé sous-jacent, ils partagent également un noyau de système d'exploitation virtualisé sous-jacent. 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 efficaces en termes de ressources : ils vous permettent d'exécuter un plus grand nombre d'applications sur un nombre moindre 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.

"Conteneurs : un guide essentiel" donne une explication exhaustive 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 débuté en tant que projet open source, mais aujourd'hui, il fait également référence à Docker Inc, l'entreprise qui produit Docker, une boîte à outils de conteneurs commerciaux qui s'appuie sur le projet open source (et contribue à ces améliorations à la communauté open source).

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 vas pas sans l'autre" ci-dessous.

Un IT flexible, résilient, sécurisé pour votre cloud hybride - Les conteneurs orchestrés à l'aide de Kubernetes font partie d'une stratégie de cloud hybride ouverte qui vous permet de créer et de gérer les charges de travail de n'importe où, sans dépendance vis-à-vis d'un fournisseur .

En savoir plus


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.

Pour plus d'informations sur l'orchestration de conteneurs, voir la vidéo "L'orchestration de conteneurs expliquée" ci-dessous.

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, de mettre en pause, de reprendre ou d'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és , 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 ce qui précède, vous savez déjà que si Kubernetes est une alternative à Docker Swarm, il n'est pas (contrairement aux idées reçues) une alternative ni un concurrent de Docker.

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 vas pas sans l'autre" :

Produits à la une

Red Hat OpenShift on IBM Cloud

IBM Cloud Satellite

IBM Cloud Code Engine

IBM Cloud Kubernetes Service


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" :

Liens connexes

IBM Cloud Paks


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.

Pour en savoir plus, lisez l'article "Qu'est-ce qu'Istio ?", regardez la vidéo et quelques exemples d'utilisation d'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.

Pour en savoir plus sur Knative, lisez "Knative : un guide essentiel ."


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 sousmissions dans tous les référentiels liés à Kubernetes (y compris Kubernetes Dashboard et Kubernetes MiniKube). Vous pouvez lire toutes les statistiques ici (le lien réside en dehors d'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 (le lien réside en dehors d'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.

Kubernetes et IBM Cloud

Les conteneurs sont idéaux pour moderniser vos applications et optimiser votre infrastructure IT. Basés sur Kubernetes and d'autres outils dans l'écosystème Kubernetes open source, les services de conteneurs d'IBM Cloud peuvent faciliter et accélérer votre parcours de développement d'applications  cloud natives  et votre approche de cloud hybride ouverte qui intègre les meilleures fonctions du cloud privé, du  cloud public  et de l'infrastructure IT sur site.

Pour aller plus loin :

  • Découvrez comment déployer des clusters Kubernetes totalement gérés et hautement disponibles pour vos  applications conteneurisées via un seul clic par le biais de Red Hat OpenShift sur IBM Cloud.
  • Déployez et gérez  des applications conteneurisées de façon cohérente sur des environnements  sur site, d'edge computing et de  cloud public  de tout fournisseur via IBM Cloud Satellite.
  • Exécutez  des images de conteneurs, des travaux par lots ou du code source en tant que charge de travail sans serveur - pas de dimensionnement, de déploiement , de mise en réseau ou de mise à l'échelle requis - avec IBM Cloud Code Engine.
  • Déployez des applications sûres, hautement disponibles dans une expérience Kubernetes native via IBM Cloud Kubernetes Service.

Pour démarrer immédiatement, ouvrez un compte  IBM Cloud.


Solutions connexes

Solutions de modernisation des applications

Créez, modernisez et gérez avec confiance les applications de façon sécurisée dans tous les clouds


Solutions d'infrastructure de cloud hybride

Une stratégie de cloud hybride ouverte qui permet de générer et de gérer des charges de travail depuis n'importe où, sans dépendance vis-à-vis d'un fournisseur


Solutions cloud hybrides

Exploiter des solutions d'infrastructure sur site ouvertes, flexibles et sécurisées pour mettre en œuvre votre stratégie de cloud hybride


Red Hat OpenShift

D'un clic, déployez des clusters hautement disponibles et entièrement gérés.


Cloud Satellite Solutions

Découvrez des données qui peuvent aider à résoudre les problèmes des entreprises et de la recherche.


Solutions Code Engine

Exécutez votre conteneur, votre code de l'application ou votre travail par lots sur un environnement d'exécution de conteneur entièrement géré .