Kubernetes

menu icon

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.

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. C'est un descendant de Borg, une plateforme d'orchestration de conteneur utilisée en interne sur Google. Kubernetes est le mot grec pourtimonieroupilote, d'où la barre dans le logo Kubernetes(lien en dehors d' IBM).

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 organisations de fournir une plateforme sous forme de service (PaaS, Platform-as-a-Service) à haute productivité qui prend en charge les multiples tâches et problèmes liés à l'infrastructure et aux opérations entourant le développement cloud natif, afin que les équipes de développement puissent se concentrer uniquement sur le codage et l'innovation.     

Dans la vidéo suivante, Sai Vennam explique les concepts de base de Kubernetes (10:59) :

Que sont les conteneurs ?

Commençons par une définition : Un conteneur est une unité exécutable de logiciel dans laquelle le code de l'application est empaqueté, avec des bibliothèques et des dépendances, de manières courante, afin qu'il puisse être exécuté n'importe où sur l'ordinateur de bureau, l'informatique traditionnelle ou le cloud.

Les conteneurs tirent parti d'une forme de virtualisation du système d'exploitation, où plusieurs applications le partagent en isolant les processus et en contrôlant la quantité d'UC, de mémoire et de disque à laquelle ces processus peuvent accéder.

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'exécuter plusieurs machines virtuelles 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 d'informations sur les machines virtuelles, consultez "Virtual Machines: An Essential Guide".

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. Et ils s’adaptent parfaitement aux pratiques de développement Agile et DevOps.

"Containers: An Essential Guide" fournit une explication exhaustive des conteneurs et de la conteneurisation. L'article de blogue « Conteneurs et machines virtuelles : quelle est la différence ? » fournit la liste complète des 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 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.

Si d'autres options d'orchestration de conteneurs, notamment Docker Swarm et Apache Mesos, ont connu un certain succès dès le 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 ont choisi (et continuent de choisir) Kubernetes pour l'étendue de ses fonctionnalités, son écosystème vaste et croissant d'outils de support open source, ainsi que pour sa prise en charge et sa portabilité par les principaux fournisseurs de cloud computing (dont certains proposent des services Kubernetes entièrement gérés).

Pour plus d'informations sur l'orchestration de conteneur, regardez la vidéo « L'orchestration de conteneur expliquée » (08:59) :

Que fait Kubernetes ?

Kubernetes planifie et automatise les tâches suivantes, ainsi que d'autres tâches liées aux conteneurs :

  • Déploiement : Déployez un nombre de conteneurs précis sur un hôte donné et les maintenir en cours d'exécution à l'état souhaité.
  • Redéploiement : 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 exposer automatiquement un conteneur à Internet ou à d'autres conteneurs à l'aide d'un nom DNS ou d'une adresse IP.
  • Allocation d'espace de stockage : Définissez Kubernetes de manière à monter un espace de stockage local ou cloud permanent pour vos conteneurs selon vos besoins.
  • Équilibrage de charge et évolutivité : Lorsque le trafic vers un conteneur atteint un pic, Kubernetes peut faire appel à l'équilibrage de la charge et à l'évolutivité pour la répartir sur le réseau, afin de maintenir la stabilité.
  • Réparation spontanée pour la haute disponibilité : Lorsqu'un conteneur tombe en panne, Kubernetes peut le redémarrer ou le remplacer automatiquement ; il peut aussi éliminer des conteneurs qui ne répondent pas à vos exigences de bilan de santé.

Kubernetes versus Docker

Si vous avez lu l'article jusqu'ici, vous avez déjà compris que si Kubernetes est une alternative à Docker Swarm, iln'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 la vidéo "Kubernetes et Docker : Ce n'est pas une question soit/ou » (08:03) :

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 nœuds, chaque nœud représentant un seul hôte de calcul (machine virtuelle ou physique).

Chaque cluster est composé de plusieurs noeuds worker qui déploient, exécutent et gèrent des applications conteneurisées et d'un noeud principal qui contrôle et surveille les noeuds worker.

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, l'agent logicielKubeletqui reçoit et exécute les commandes du nœud principal.

Pour en savoir plus sur les clusters Kubernetes, consultez ce post de blog : "Clusters Kubernetes: Architecture for Rapid, Controlled Cloud App Delivery.

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'extensibilité de 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'autres 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 en savoir plus sur les déploiements Kubernetes, regardez la vidéo "Déploiements Kubernetes : Mise en route rapide » (03:54) :

Pour une compréhension plus précise des éléments de l'architecture de Kubernetes, consultez ce cours d'auto-formation en ligne : « Kubernetes 101 ».

Vous pouvez aussi obtenir des informations détaillées via le post de blog "Kubernetes Architecture: Four Approaches to Container Solutions".

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 conteneurside-car, essentiellement invisible au 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.

Consultez l'article "What is Istio?" pour plus de détails, il comporte une 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 un mode relativement nouveau de déploiement de code qui rend les applications natives cloud plus efficaces et rentables. Au lieu de déployer une instance permanente de code qui reste inactive en attendant les demandes, la technologie sans serveur appelle le code selon les besoins, en le mettant à l'échelle à la hausse ou à la baisse en fonction des fluctuations de la demande, puis l'arrête 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. C'est totalement transparent pour le développeur : Knative gère les détails en arrière-plan et le développeur peut se concentrer 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 continue/déploiement continu (CI/CD)).

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

  • BuildGénératio : 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 en tant que services évolutifs ; il peut passer à plusieurs milliers d'instances de conteneur ou au contraire se limiter à une seule instance - c'est ce que l'on appelle l'évolution vers zéro). En outre, Serve possède deux fonctions très utiles :
    • Configuration, qui sauvegarde les versions d'un conteneur (appelées instantanés) chaque fois que vous poussez le conteneur en production et permet d'exécuter ces versions simultanément.
    • Routage de services, 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. Event permet aux équipes d'exprimer leur intérêt pour certains types d'événements. Il se connecte ensuite automatiquement au producteur d'événements et achemine les événements vers le conteneur, éliminant ainsi la nécessité de programmer ces connexions.

Pour en savoir plus sur Knative, lisez "Knative: An Essential Guide".

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 :

  • À l'heure où nous écrivons ces lignes, plus de 86 200 validations ont été effectuées dans le référentiel Kubernetes sur GitHub (le lien est en dehors d'IBM), dont près de 6 000 au cours des quatre derniers mois, avec plus de 2 300 contributeurs actifs au projet. Selon la Cloud Native Computing Foundation (lien en dehors d'IBM), plus de 148 000 validations ont été effectuées dans tous les référentiels Kubernetes (y compris Kubernetes Dashboard et  Kubernetes MiniKube).
  • Plus de 1 500 entreprises utilisent Kubernetes dans leurs piles de logiciels de production. Il s'agit d'entreprises mondialement connues telles que AirBnB, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder et, bien sûr, IBM. Lire ces études de cas et d'autres (lien externe à IBM)
  • Une enquête de juillet 2019, citée dans Container Journal (lien en dehors d'IBM), indique une augmentation de 51 % de l'adoption de Kubernetes au cours des six mois précédents.
  • Plus de 12 000 personnes ont assisté à la conférence KubeCon + CloudNative Con North America 2019 (lien en dehors d'IBM), soit une hausse de plus de 3 000 personnes par rapport à la participation record de l'année précédente.
  • Selon ZipRecruiter (lien en dehors d'IBM), le salaire annuel moyen (en Amérique du Nord) pour un emploi lié à Kubernetes est de 144 628 USD.Au moment où nous rédigeons cet article, il existe plus de 21 000 postes liés à Kubernetes répertoriés sur LinkedIn (lien en dehors d'IBM).

Tutoriels Kubernetes

Si vous êtes prêt à utiliser Kubernetes ou si vous cherchez à développer vos compétences sur Kubernetes et les outils de l'écosystème Kubernetes, essayez l'un de ces tutoriels :

Kubernetes et IBM Cloud

Solution d'orchestration de conteneurs gérée, IBM Cloud® Kubernetes Service automatise le déploiement, l'exploitation, la mise à l'échelle et la surveillance d'applications conteneurisées dans un cluster d'hôtes de calcul, tout en ajoutant des fonctionnalités spécifiques à IBM. Elle permet de distribuer rapidement des applications et peut se lier à des services avancés tels que la blockchainet IBM® Watson.

Pour un aperçu de la façon dont un service Kubernetes géré peut vous aider dans votre transition vers le cloud, regardez notre vidéo « Avantages de Kubernetes géré » (03:14) :

Red Hat® OpenShift® on IBM Cloud est un service complet qui propose des clusters OpenShift entièrement gérés sur la plateforme IBM Cloud. (OpenShift est une plateforme Kubernetes d'entreprise fonctionnant sur Red Hat Enterprise Linux).

Découvrez-en plus sur OpenShift dans le nouveau rapport Forrester Wave: Multicloud Container Development Platforms (PDF, 415 Ko).

Pour démarrer, inscrivez-vous pour obtenir un IBMid et créez votre compte IBM Cloud.