Kubernetes

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Kubernetes
Logo

Développeur GoogleVoir et modifier les données sur Wikidata
Dernière version 1.4.12 ()[1]
1.5.7 ()[2]
1.6.7 ()[3]
1.7.0 ()[4]Voir et modifier les données sur Wikidata
Écrit en GoVoir et modifier les données sur Wikidata
Environnement MultiplateformeVoir et modifier les données sur Wikidata
Type Linux Foundation Project (d)Voir et modifier les données sur Wikidata
Licence Apache-2.0 (d)[5],[6]Voir et modifier les données sur Wikidata
Site web kubernetes.ioVoir et modifier les données sur Wikidata

Kubernetes (communément appelé « K8s ») est un système open source permettant d'automatiser le déploiement, la montée en charge et la gestion des applications conteneurisées, conçu à l'origine par Google et offert à la Cloud Native Computing Foundation. Il vise à fournir une « plate-forme permettant d'automatiser le déploiement, la montée en charge et la mise en œuvre de conteneurs d'applications sur des clusters de serveurs »[7]. Il fonctionne avec toute une série de technologies de containers, et est souvent utilisé avec Docker.

Historique[modifier | modifier le code]

Kubernetes (de κυβερνήτης : grec pour « timonier » ou « pilote ») créé par Joe Beda, Brendan Burns et Craig McLuckie[8], rapidement rejoints par d'autres ingénieurs de Google comme Brian Grant et Tim Hockin, est annoncé pour la première fois par Google à la mi-2014[9]. Son développement et son architecture a été fortement influencé par le système Borg de Google[10],[11] d'ailleurs, la plupart des contributeurs principaux sont issus du projet Borg. Le nom original de Kubernetes en interne fut Project Seven, en référence au personnage de Star Trek qui est un Borg devenu amical[12]. Les sept rayons de la barre du logo de Kubernetes sont un clin d'œil au nom original.

Kubernetes version 1.0 est sorti le 21 juillet 2015[13]. Avec la sortie de la première version de Kubernetes, Google fit un partenariat avec la Fondation Linux pour créer la Cloud Native Computing Foundation (CNCF)[14] et offrit Kubernetes comme technologie de départ.

Kubernetes est également utilisé par RedHat pour son produit OpenShift[15],[16], par CoreOS dans son produit Tectonic, et par Rancher Labs pour sa plateforme de gestion de conteneurs Rancher[17].

Conception[modifier | modifier le code]

Kubernetes définit un jeu d'outils ("primitives") qui, ensemble, fournissent des mécanismes pour déployer, maintenir et mettre à l’échelle des applications. Ces composants qui composent Kubernetes sont conçus pour être combinés et extensibles et donc permettre de supporter une grande variété de charge de travail. Cette extensibilité est fournie en grande partie par l'API de Kubernetes, qui est utilisée par les composants internes aussi bien que par les extensions et les conteneurs tournant sur Kubernetes[18].

Pods[modifier | modifier le code]

L’unité de base de l'ordonnancement dans Kubernetes est appelé "pod". C'est une vue abstraite de composants conteneurisés. Un pod consiste en un ou plusieurs conteneurs qui ont la garantie d'être co-localisés sur une machine hôte et peuvent en partager les ressources[18]. Chaque pod dans Kubernetes possède une adresse IP unique (à l'intérieur du cluster), qui permet aux applications d'utiliser les ports de la machine sans risque de conflit[19]. Un pod peut définir un volume, comme un répertoire sur un disque local ou sur le réseau, et l'exposer aux conteneurs de ce pod[20]. Les Pods peuvent être gérés manuellement au travers de l'API de Kubernetes. Leur gestion peut également être déléguée à un contrôleur[18].

Labels et selectors[modifier | modifier le code]

Kubernetes permet à des clients (utilisateurs et composants internes) d'attacher des paires clés-valeurs appelées "labels" à n'importe quel objet d'API dans le système, par exemple les pods et les nodes. Par correspondance, les "label selectors" sont des interrogations faites sur les labels en lien avec des objets[18].

Labels et selectors constituent le premier mécanisme de groupement dans Kubernetes, et sont utilisés pour déterminer les composants sur lesquels appliquer une opération[21].

Par exemple, si les Pods d'une application ont des labels pour un système tier ("front-end", "back-end", par exemple) et une release_track ("preproduction", "production", par exemple), alors une opération sur tous les nodes "back-end" et "preproduction" peuvent utiliser un label selector comme suit[22] :

tier=back-end AND release_track=preproduction

Contrôleurs[modifier | modifier le code]

Un contrôleur est une boucle d'arbitrage qui pilote l'état courant d'un cluster vers son état désiré[23]. Il effectue cette action en gérant un ensemble de pods. Un des types de contrôleur est appelé "contrôleur de réplication”, il gère la réplication et la mise à l'échelle en lançant un nombre spécifique de copies d'un pod sur un cluster. Il gère également la création de pods de remplacement si le nœud sous-jacent est en défaut[23]. Deux des contrôleurs qui font partie du cœur de système de Kubernetes sont : le “DaemonSet Controller” pour lancer un seul pod sur chaque machine (ou un sous-ensemble de machine), ainsi que le “Job Controller” pour lancer des pods qui ont une fin déterminé (par exemple des scripts)[24]. L'ensemble des pods qu'un contrôleur gère est déterminé par des label selectors qui font partie de la définition du contrôleur[22].

Services[modifier | modifier le code]

Un service Kubernetes est un groupe de pods travaillant ensemble, par exemple, une couche dans une application multi-couches. L'ensemble des pods qui constituent un service sont définis par un label selector[18]. Kubernetes fournit un service de découverte et de routage en assignant une adresse IP et un nom de domaine à un service, et équilibre la charge du trafic en utilisant le round-robin des connexions réseaux de cette adresse sur l'ensemble des pods correspondant au sélecteur (même lorsqu'en en cas de défaut, les pods changent de machines)[19]. Par défaut, un service est exposé à l'intérieur d'un cluster (ex: les pods de back-end peuvent être groupés dans un service, avec les requêtes des pods de front-end load balancées vers les back-end), mais un service peut également être exposé à l'extérieur d'un cluster (par exemple pour que les clients puissent joindre les pods de front-end)[25].

Architecture[modifier | modifier le code]

Kubernetes architecture diagram

Kubernetes suit l'architecture maitre/esclave. Les composants de Kubernetes peuvent être divisé en ceux qui gèrent un nœud individuel et ceux qui font partie du plan de contrôle[18],[26].

Plan de contrôle Kubernetes[modifier | modifier le code]

Le maître Kubernetes est l'unité de contrôle principale qui gère la charge de travail et dirige les communications dans le système. Le plan de contrôle de Kubernetes consiste en plusieurs composants, chacun ayant son propre processus, qui peuvent s'exécuter sur un seul node maître ou sur plusieurs maîtres permettant de créer des clusters haute disponibilité[26]. Les différents composants du plan de contrôle de Kubernetes est décrit ci-dessous:

etcd[modifier | modifier le code]

etcd est une unité de stockage distribuée persistante et légère de données clé-valeur développée par CoreOS, qui permet de stocker de manière fiable les données de configuration du cluster, représentant l'état du cluster à n'importe quel instant. D'autres composants scrutent les changements dans ce stockage pour aller eux-même vers l'état désiré[26].

serveur d'API[modifier | modifier le code]

Le serveur d'API est un élément clé et sert l'API Kubernetes grâce à JSON sur HTTP. Il fournit l'interface interne et externe de Kubernetes[18],[27]. Le serveur d'API gère et valide des requêtes REST et met à jour l'état des objets de l'API dans etcd, permettant ainsi aux clients de configurer la charge de travail et les containers sur les nœuds de travail.

L'ordonnanceur[modifier | modifier le code]

L'ordonnanceur est un composant additionnel permettant de sélectionner quel node devrait faire tourner un pod non ordonnancé en se basant sur la disponibilité des ressources. L'ordonnanceur gère l'utilisation des ressources sur chaque node afin de s'assurer que la charge de travail n'est pas en excès par rapport aux ressources disponibles. Pour accomplir cet objectif, l'ordonnanceur doit connaître les ressources disponibles et celles actuellement assignées sur les serveurs.

Controller manager[modifier | modifier le code]

Le gestionnaire de contrôle (controller manager) est le processus dans lequel s'exécutent les contrôleurs principaux de Kubernetes tels que DaemonSet Controller et le Replication Controller. Les contrôleurs communiquent avec le serveur d'API pour créer, mettre à jour et effacer les ressources qu'ils gèrent (pods, service endpoints, etc.)[27].

Node Kubernetes[modifier | modifier le code]

Le Node aussi appelé Worker ou Minion est une machine unique (ou une machine virtuelle) où des conteneurs (charges de travail) sont déployés. Chaque node du cluster doit exécuter le programme de conteneurisation (par exemple Docker), ainsi que les composants mentionnés ci-dessous, pour communiquer avec le maître afin de configurer la partie réseau de ces conteneurs.

Kubelet[modifier | modifier le code]

Kubelet est responsable de l'état d'exécution de chaque nœud (c'est-à-dire, d'assurer que tous les conteneurs sur un nœud sont en bonne santé). Il prend en charge le démarrage, l'arrêt, et la maintenance des conteneurs d'applications (organisé en pods) dirigé par le plan de contrôle[18],[28].

Kubelet surveille l'état d'un pod et s'il n'est pas dans l'état voulu, le pod sera redéployé sur le même node. Le statut du node est relayé à intervalle de quelques secondes via messages d’état vers le maître. Dés que le maître détecte un défaut sur un node, le Replication Controller voit ce changement d'état et lance les pods sur d'autres hôtes en bonne santé[citation nécessaire].

Kube-proxy[modifier | modifier le code]

Le kube-proxy est l’implémentation d'un proxy réseau et d'un répartiteur de charge, il gère le service d'abstraction ainsi que d'autres opérations réseaux[18]. Il est responsable d'effectuer le routage du trafic vers le conteneur approprié en se basant sur l'adresse IP et le numéro de port de la requête entrante.

cAdvisor[modifier | modifier le code]

cAdvisor est un agent qui surveille et récupère les données de consommation des ressources et des performances comme le processeur, la mémoire, ainsi que l'utilisation disque et réseau des conteneurs de chaque node.

Références[modifier | modifier le code]

  1. https://github.com/kubernetes/kubernetes/releases/tag/v1.4.12
  2. https://github.com/kubernetes/kubernetes/releases/tag/v1.5.7
  3. https://github.com/kubernetes/kubernetes/releases/tag/v1.6.7
  4. https://github.com/kubernetes/kubernetes/releases/tag/v1.7.0
  5. https://en.wikipedia.org/wiki/Kubernetes
  6. https://github.com/kubernetes/kubernetes/blob/master/LICENSE
  7. (en) « What is Kubernetes? », sur kubernetes.io (consulté le 31 mars 2017)
  8. (en) « Google Made Its Secret Blueprint Public to Boost Its Cloud »
  9. (en) « Google Open Sources Its Secret Weapon in Cloud Computing », sur Wired (consulté le 24 septembre 2015)
  10. (en) Abhishek Verma, Luis Pedrosa, Madhukar R. Korupolu, David Oppenheimer, Eric Tune et John Wilkes, « Large-scale cluster management at Google with Borg », Proceedings of the European Conference on Computer Systems (EuroSys),‎ april 21–24, 2015 (lire en ligne)
  11. (en) « Borg, Omega, and Kubernetes - ACM Queue », sur queue.acm.org
  12. (en) « Early Stage Startup Heptio Aims to Make Kubernetes Friendly », {{Article}} : paramètre « périodique » manquant, paramètre « année » ou « date » manquant (lire en ligne)
  13. (en) « As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation », sur TechCrunch (consulté le 24 septembre 2015)
  14. (en) « Cloud Native Computing Foundation »
  15. (en) « OpenShift v3 Platform Combines Docker, Kubernetes », sur blog.openshift.com (consulté le 14 août 2014)
  16. (en) « Why Red Hat Chose Kubernetes for OpenShift », sur blog.openshift.com (consulté le 7 novembre 2016)
  17. (en) « Deploy and Manage Kubernetes Clusters | Rancher Labs », Rancher Labs, {{Article}} : paramètre « année » ou « date » manquant (lire en ligne)
  18. a, b, c, d, e, f, g, h et i (en) « An Introduction to Kubernetes », sur DigitalOcean (consulté le 24 septembre 2015)
  19. a et b (en) Jon Langemak, « Kubernetes 101 – Networking », Das Blinken Lichten, (consulté le 2 novembre 2015)
  20. (en) James Strachan, « Kubernetes for Developers », Medium (publishing platform), (consulté le 2 novembre 2015)
  21. (en) Ramit Surana, « Containerizing Docker on Kubernetes », LinkedIn,‎ (lire en ligne)
  22. a et b (en) « Intro: Docker and Kubernetes training - Day 2 », Red Hat, (consulté le 2 novembre 2015)
  23. a et b (en) « Overview of a Replication Controller », Documentation, CoreOS (consulté le 2 novembre 2015)
  24. (en) Jake Sanders, « Kubernetes: Exciting Experimental Features »(ArchiveWikiwixArchive.isGoogleQue faire ?), Livewyer, (consulté le 2 novembre 2015)
  25. (en) Jon Langemak, « Kubernetes 101 – External Access Into The Cluster », Das Blinken Lichten, (consulté le 2 novembre 2015)
  26. a, b et c (en) « Kubernetes Infrastructure », sur OpenShift Community Documentation, OpenShift (consulté le 24 septembre 2015)
  27. a et b (en) Kamal Marhubi, « Kubernetes from the ground up: API server », kamalmarhubi.com,
  28. (en) Kamal Marhubi, « What [..] is a Kubelet? », kamalmarhubi.com,

(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Kubernetes » (voir la liste des auteurs).

Liens externes[modifier | modifier le code]