« Utilisateur:UnknownJessie/Brouillon2 » : différence entre les versions
Résumé automatique : blanchiment. |
Annulation de la modification de UnknownJessie (d) |
||
Ligne 1 : | Ligne 1 : | ||
{{Aide:Comment créer un article/brouillon}} |
|||
<!-- Merci d'écrire sous cette ligne --> |
|||
{{À fusionner |Utilisateur:UnknownJessie/Brouillon2|Kubernetes}} |
|||
{{Infobox Logiciel |
|||
| titre = Kubernetes |
|||
| nom = Kubernetes |
|||
| logo = [[File:Kubernetes (container engine).png|75px]] |
|||
| légende = |
|||
| développeur = |
|||
| date de première version = {{Start date|2014|06|06|df=yes}}<ref name="github first-commit">{{cite web|url=https://github.com/kubernetes/kubernetes/commit/2c4b3a562ce34cddc3f8218a2c4d11c7310e6d56 |title=First GitHub commit for Kubernetes |work=github.com | date=2014-06-07}}</ref> |
|||
| dernière version = 1.4.3<ref name="github releases">{{cite web|url=https://github.com/kubernetes/kubernetes/releases |title=GitHub Releases page |work=github.com | date=2016-10-16}}</ref> |
|||
| date de dernière version = {{release date|2016|10|16}} |
|||
| état = Active |
|||
| langage de programmation = [[Go_(langage)|Go]] |
|||
| système d'exploitation = [[Cross-platform]] |
|||
| genre = [[Computer cluster#Cluster management|Cluster management software]] |
|||
| licence = [[Apache License]] 2.0 |
|||
| site web = {{URL|kubernetes.io}} |
|||
| compatibilité posix = |
|||
}} |
|||
'''Kubernetes''' (aussi connu sous l'appelation "[[Numéronyme|k8s]]") est une solution [[open source]] de gestion de cluster de conteneurs originellement crée par [[Google]] puis cédée à la [[Cloud Native Computing Foundation]]. Son but est de fournir une plateforme pour le déploiement automatique, la mise à l'échelle, et la gestion de conteneurs au travers de clusters d'hôtes<ref>{{cite web|title=What is Kubernetes|url=http://kubernetes.io/v1.0/docs/whatisk8s.html|website=Kubernetes|accessdate=28 August 2015}}</ref>. Il est généralement utilisé avec le système de conteneurisation Docker. |
|||
== Historique == |
|||
Kubernetes (de κυβερνήτης: Grec pour "timonier" ou "pilote") a été crée par Joe Beda, Brendan Burns et Craig McLuckie<ref>{{Cite web|url=http://www.wired.com/2015/06/google-kubernetes-says-future-cloud-computing/|title=Google Made Its Secret Blueprint Public to Boost Its Cloud|language=en-US|access-date=2016-06-27}}</ref>, puis rapidement rejoins 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.<ref>{{cite web|title=Google Open Sources Its Secret Weapon in Cloud Computing|url=http://www.wired.com/2014/06/google-kubernetes/|website=Wired|accessdate=24 September 2015}}</ref> Son développement et son architecture a été fortement influencé par le système Borg de Google<ref>{{cite journal|author1=Abhishek Verma|author2=Luis Pedrosa|author3=Madhukar R. Korupolu|author4=David Oppenheimer|author5=Eric Tune|author6=John Wilkes|title=Large-scale cluster management at Google with Borg|journal=Proceedings of the European Conference on Computer Systems (EuroSys)|date=April 21–24, 2015|url=https://research.google.com/pubs/pub43438.html}}</ref>{{,}}<ref>{{Cite web|url=http://queue.acm.org/detail.cfm?id=2898444|title=Borg, Omega, and Kubernetes - ACM Queue|website=queue.acm.org|access-date=2016-06-27}}</ref> d'ailleurs, la plupart des contributeurs principaux sont issu du projet Borg. Le nom original de Kubernetes en interne fut Project [[Seven of Nine|Seven]], en référence au personnage de [[Star Trek]] qui est un [[Borg (Star Trek)|Borg]] devenu amical<ref>{{Cite news|url=http://www.eweek.com/cloud/early-stage-startup-heptio-aims-to-make-kubernetes-friendly.html|title=Early Stage Startup Heptio Aims to Make Kubernetes Friendly|access-date=2016-12-06}}</ref>. Les sept rayons de la barre du logo de Kubernetes sont un clin d'oeil au nom original. |
|||
Kubernetes version 1.0 est sorti le 21 Juillet 2015<ref>{{cite web|title=As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation|url=http://techcrunch.com/2015/07/21/as-kubernetes-hits-1-0-google-donates-technology-to-newly-formed-cloud-native-computing-foundation-with-ibm-intel-twitter-and-others/|website=TechCrunch|accessdate=24 September 2015}}</ref>. Avec la sortie de la permière version de Kubernetes, Google fit un partenariat avec la [[Linux Foundation|Fondation Linux]] pour créer la [[Linux Foundation#Cloud Native Computing Foundation|Cloud Native Computing Foundation]] (CNCF)<ref>{{cite web|url=https://cncf.io/|title=Cloud Native Computing Foundation}}</ref> et offrit Kubernetes comme technologie de départ. |
|||
Kebernetes est également utilisé par [[Red_Hat|RedHat]] pour son produit OpenShift<ref>{{cite web|title=OpenShift v3 Platform Combines Docker, Kubernetes|url=https://blog.openshift.com/openshift-v3-platform-combines-docker-kubernetes-atomic-and-more/|website=blog.openshift.com|accessdate=14 August 2014}}</ref>{{,}}<ref>{{cite web|title=Why Red Hat Chose Kubernetes for OpenShift|url=https://blog.openshift.com/red-hat-chose-kubernetes-openshift/|website=blog.openshift.com|accessdate=7 November 2016}} </ref>, par CoreOS dans son produit Tectonic, et par [[Rancher Labs]] pour sa plateforme de gestion de conteneurs Rancher<ref>{{Cite news|url=http://rancher.com/kubernetes/|title=Deploy and Manage Kubernetes Clusters {{!}} Rancher Labs|work=Rancher Labs|access-date=2017-04-15|language=en-US}}</ref>. |
|||
== Conception == |
|||
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.<ref name="do-intro">{{cite web|title=An Introduction to Kubernetes|url=https://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes|website=DigitalOcean|accessdate=24 September 2015}}</ref> |
|||
=== Pods === |
|||
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<ref name="do-intro" />. 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<ref name="kubernetes-101-networking">{{cite web |url=http://www.dasblinkenlichten.com/kubernetes-101-networking/ |title=Kubernetes 101 – Networking |last=Langemak |first=Jon |work=Das Blinken Lichten |date=2015-02-11 |accessdate=2015-11-02 }}</ref>. 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<ref name="kubernetes-for-developers">{{cite web |last=Strachan |first=James |url=https://medium.com/fabric8-io/kubernetes-for-developers-2a9c7202fcd3#.b6u76jxar |title=Kubernetes for Developers |work=[[Medium (publishing platform)]] |date=2015-05-21 |accessdate=2015-11-02 }}</ref>. 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.<ref name="do-intro" /> |
|||
=== Labels et selectors === |
|||
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.<ref name="do-intro" /> |
|||
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.<ref name="containerizing-docker-on-Kubernetes">{{cite news |last=Surana |first=Ramit |url=https://www.linkedin.com/pulse/containerizing-docker-kubernetes-ramit-surana |title=Containerizing Docker on Kubernetes |work=[[LinkedIn]] |date=2015-09-16 |accessdate=2015-11-02 }}</ref> |
|||
Par exemple, si les Pods d'une application ont des labels pour un système <code>tier</code> ("<code>front-end</code>", "<code>back-end</code>", par exemple) et une <code>release_track</code> ("<code>[[Feature toggle#Canary release|preproduction]]"</code>, "<code>production</code>", par exemple), alors une opération sur tous les nodes "<code>back-end</code>" and "preproduction" peuvent utiliser un label selector comme suit :<ref name="redhat-docker-and-kubernetes-training-labels-examples">{{cite web |url=http://christianposta.com/slides/docker/generated/day2.html#/label-examples |title=Intro: Docker and Kubernetes training - Day 2 |publisher=[[Red Hat]] |date=2015-10-20 |accessdate=2015-11-02}}</ref> |
|||
<blockquote><code>tier=back-end AND release_track=preproduction</code></blockquote> |
|||
=== Contrôleurs === |
|||
Un contrôleur est une boucle d'arbitrage qui pilote l'état courant d'un cluster vers son état désiré<ref name="coreos-replication-controller">{{cite web |url=https://coreos.com/kubernetes/docs/latest/replication-controller.html |title=Overview of a Replication Controller |work=Documentation |publisher=[[CoreOS]] |accessdate=2015-11-02 }}</ref>. 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<ref name="coreos-replication-controller" />. Deux des contrôleurs qui font parti 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)<ref name="exciting-experimental-features">{{cite web |url=http://www.livewyer.com/blog/2015/10/02/kubernetes-exciting-experimental-features |title=Kubernetes: Exciting Experimental Features |last=Sanders |first=Jake |work=Livewyer |date=2015-10-02 |accessdate=2015-11-02 }}</ref>. 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<ref name="redhat-docker-and-kubernetes-training-labels-examples"/>. |
|||
=== Services === |
|||
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<ref name="do-intro" />. 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_(informatique)|round-robin]] des connexions réseaux de cette adresse sur l'ensemble des pods correspondant au selecteur (même lorsqu'en en cas de défaut, les pods changent de machines)<ref name="kubernetes-101-networking" />. Par défaut, un service est exposé à l'intérieur d'un cluster (ex: les pods de [[Backend|back-end]] peuvent être groupés dans un service, avec les requêtes des pods de [[Frontal_(serveur)|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)<ref name="kubernetes-101-external-access">{{cite web |url=http://www.dasblinkenlichten.com/kubernetes-101-external-access-into-the-cluster/ |title=Kubernetes 101 – External Access Into The Cluster |last=Langemak |first=Jon |work=Das Blinken Lichten |date=2015-02-15 |accessdate=2015-11-02 }}</ref>. |
|||
== Architecture == |
|||
[[File:kubernetes.png|600px|thumb|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<ref name="do-intro" />{{,}}<ref name=":0">{{cite web|title=Kubernetes Infrastructure|url=https://docs.openshift.org/latest/architecture/infrastructure_components/kubernetes_infrastructure.html|website=OpenShift Community Documentation|publisher=OpenShift|accessdate=24 September 2015}}</ref>. |
|||
=== Plan de contrôle Kubernetes === |
|||
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é.<ref name=":0" /> Les différents composants du plan de contrôle de Kubernetes est décrit ci-dessous: |
|||
==== etcd ==== |
|||
'''[https://github.com/coreos/etcd etcd]''' est une unité de stockage distribuée persistante et légère de données clé-valeur développée par [[CoreOS]], qui permer 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é.<ref name=":0" /> |
|||
==== serveur d'API ==== |
|||
Le serveur d'API est un élément clé et sert l'[[Application programming interface|API]] Kubernetes grâce à [[JSON]] sur [[Hypertext Transfer Protocol|HTTP]]. Il fournit l'interface interne et externe de Kubernetes<ref name="do-intro" />{{,}}<ref name=":1">{{Cite web|url=http://kamalmarhubi.com/blog/2015/09/06/kubernetes-from-the-ground-up-the-api-server/|title=Kubernetes from the ground up: API server|last=Marhubi|first=Kamal|date=2015-09-26|website=|publisher=kamalmarhubi.com|access-date=2015-11-02}}</ref>. Le serveur d'API gère et valide des requêtes [[Representational state transfer|REST]] et met à jour l'état des objets de l'API dans [https://github.com/coreos/etcd etcd], permettant ainsi aux clients de configurer la charge de travail et les containers sur les noeuds de travail. |
|||
==== L'ordonnanceur ==== |
|||
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 ==== |
|||
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 s'exécutent. 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.)<ref name=":1" />. |
|||
=== Node Kubernetes === |
|||
Le Node aussi appelé Worker ou Minion est une machine unique (ou une [[Virtual Machine Disk|machine virtuelle]]) ou des conteneurs (charges de travail) sont déployés. Chaque node du cluster doit exécuter le programme de conteneurisation (par exemple [[Docker (software)|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 ==== |
|||
Kubelet est responsable de l'état d'exécution de chaque noeud (c'est-à-dire, d'assurer que tous les conteneurs sur un noeud 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<ref name="do-intro" />{{,}}<ref>{{Cite web|url=http://kamalmarhubi.com/blog/2015/08/27/what-even-is-a-kubelet/|title=What [..] is a Kubelet?|last=Marhubi|first=Kamal|date=2015-08-27|website=|publisher=kamalmarhubi.com|access-date=2015-11-02}}</ref>. |
|||
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 needed|date=October 2016}}. |
|||
==== Kube-proxy ==== |
|||
Le kube-proxy est l’implémentation d'un [[proxy]] réseau et d'un [[Répartition de charge|répartiteur de charge]], il gère le service d'abstraction ainsi que d'autres opérations réseaux<ref name="do-intro" />. 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 ==== |
|||
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. |
|||
== References == |
|||
{{Reflist|30em}} |
|||
{{Traduction/Référence|en|Kubernetes|type=note}} |
|||
{{Reflist}} |
|||
{{Auteurs crédités après suppression|Utilisateur:UnknownJessie/Brouillon2|{{u|UnknownJessie}}, {{u|G.castelain}}, {{u|MelAntipam}} et {{u|Huster}}}} |
|||
== External links == |
|||
* {{site officiel|http://kubernetes.io/}} |
|||
* https://github.com/kubernetes/kubernetes |
|||
* http://www.imotif.net/index.php/2016/11/08/google-kubernetes/ |
|||
<nowiki> |
|||
{{Virtualization software}} |
|||
{{Linux Containers}} |
|||
[[Catégorie:Informatique]] |
|||
[[Catégorie:Logiciel libre sous licence Apache]] |
|||
</nowiki> |
|||
<!-- Ne rien modifier au-dessous de cette ligne --> |
|||
{{page personnelle}} |
Version du 18 mai 2017 à 11:55
- → N'hésitez pas à publier sur le brouillon un texte inachevé et à le modifier autant que vous le souhaitez.
- → Pour enregistrer vos modifications au brouillon, il est nécessaire de cliquer sur le bouton bleu : « Publier les modifications ». Il n'y a pas d'enregistrement automatique.
Si votre but est de publier un nouvel article, votre brouillon doit respecter les points suivants :
- Respectez le droit d'auteur en créant un texte spécialement pour Wikipédia en français (pas de copier-coller venu d'ailleurs).
- Indiquez les éléments démontrant la notoriété du sujet (aide).
- Liez chaque fait présenté à une source de qualité (quelles sources – comment les insérer).
- Utilisez un ton neutre, qui ne soit ni orienté ni publicitaire (aide).
- Veillez également à structurer votre article, de manière à ce qu'il soit conforme aux autres pages de l'encyclopédie (structurer – mettre en page).
- → Si ces points sont respectés, pour transformer votre brouillon en article, utilisez le bouton « publier le brouillon » en haut à droite. Votre brouillon sera alors transféré dans l'espace encyclopédique.
Première version | [1] |
---|---|
Dernière version | 1.4.3[2] (le 2016 octobre 16 ) |
État du projet | Active |
Écrit en | Go |
Système d'exploitation | Cross-platform |
Licence | Apache License 2.0 |
Site web | kubernetes.io |
Kubernetes (aussi connu sous l'appelation "k8s") est une solution open source de gestion de cluster de conteneurs originellement crée par Google puis cédée à la Cloud Native Computing Foundation. Son but est de fournir une plateforme pour le déploiement automatique, la mise à l'échelle, et la gestion de conteneurs au travers de clusters d'hôtes[3]. Il est généralement utilisé avec le système de conteneurisation Docker.
Historique
Kubernetes (de κυβερνήτης: Grec pour "timonier" ou "pilote") a été crée par Joe Beda, Brendan Burns et Craig McLuckie[4], puis rapidement rejoins 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.[5] Son développement et son architecture a été fortement influencé par le système Borg de Google[6],[7] d'ailleurs, la plupart des contributeurs principaux sont issu 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[8]. Les sept rayons de la barre du logo de Kubernetes sont un clin d'oeil au nom original.
Kubernetes version 1.0 est sorti le 21 Juillet 2015[9]. Avec la sortie de la permière version de Kubernetes, Google fit un partenariat avec la Fondation Linux pour créer la Cloud Native Computing Foundation (CNCF)[10] et offrit Kubernetes comme technologie de départ.
Kebernetes est également utilisé par RedHat pour son produit OpenShift[11],[12], par CoreOS dans son produit Tectonic, et par Rancher Labs pour sa plateforme de gestion de conteneurs Rancher[13].
Conception
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.[14]
Pods
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[14]. 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[15]. 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[16]. 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.[14]
Labels et selectors
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.[14]
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.[17]
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
" and "preproduction" peuvent utiliser un label selector comme suit :[18]
tier=back-end AND release_track=preproduction
Contrôleurs
Un contrôleur est une boucle d'arbitrage qui pilote l'état courant d'un cluster vers son état désiré[19]. 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[19]. Deux des contrôleurs qui font parti 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)[20]. 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[18].
Services
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[14]. 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 selecteur (même lorsqu'en en cas de défaut, les pods changent de machines)[15]. 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)[21].
Architecture
![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Kubernetes.png/600px-Kubernetes.png)
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[14],[22].
Plan de contrôle Kubernetes
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é.[22] Les différents composants du plan de contrôle de Kubernetes est décrit ci-dessous:
etcd
etcd est une unité de stockage distribuée persistante et légère de données clé-valeur développée par CoreOS, qui permer 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é.[22]
serveur d'API
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[14],[23]. 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 noeuds de travail.
L'ordonnanceur
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
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 s'exécutent. 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.)[23].
Node Kubernetes
Le Node aussi appelé Worker ou Minion est une machine unique (ou une machine virtuelle) ou 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
Kubelet est responsable de l'état d'exécution de chaque noeud (c'est-à-dire, d'assurer que tous les conteneurs sur un noeud 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[14],[24].
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é[réf. nécessaire].
Kube-proxy
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[14]. 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
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.
References
- « First GitHub commit for Kubernetes », github.com,
- « GitHub Releases page », github.com,
- « What is Kubernetes », sur Kubernetes (consulté le )
- (en-US) « Google Made Its Secret Blueprint Public to Boost Its Cloud » (consulté le )
- « Google Open Sources Its Secret Weapon in Cloud Computing », sur Wired (consulté le )
- 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)
- « Borg, Omega, and Kubernetes - ACM Queue », sur queue.acm.org (consulté le )
- (en) « Early Stage Startup Heptio Aims to Make Kubernetes Friendly », {{Article}} : paramètre «
périodique
» manquant, paramètre «date
» manquant (lire en ligne) - « As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation », sur TechCrunch (consulté le )
- « Cloud Native Computing Foundation »
- « OpenShift v3 Platform Combines Docker, Kubernetes », sur blog.openshift.com (consulté le )
- « Why Red Hat Chose Kubernetes for OpenShift », sur blog.openshift.com (consulté le )
- (en-US) « Deploy and Manage Kubernetes Clusters | Rancher Labs », Rancher Labs, {{Article}} : paramètre «
date
» manquant (lire en ligne) - « An Introduction to Kubernetes », sur DigitalOcean (consulté le )
- Jon Langemak, « Kubernetes 101 – Networking », Das Blinken Lichten, (consulté le )
- James Strachan, « Kubernetes for Developers », Medium (publishing platform), (consulté le )
- (en) Ramit Surana, « Containerizing Docker on Kubernetes », LinkedIn, (lire en ligne)
- « Intro: Docker and Kubernetes training - Day 2 », Red Hat, (consulté le )
- « Overview of a Replication Controller », Documentation, CoreOS (consulté le )
- Jake Sanders, « Kubernetes: Exciting Experimental Features », Livewyer, (consulté le )
- Jon Langemak, « Kubernetes 101 – External Access Into The Cluster », Das Blinken Lichten, (consulté le )
- « Kubernetes Infrastructure », sur OpenShift Community Documentation, OpenShift (consulté le )
- Kamal Marhubi, « Kubernetes from the ground up: API server », kamalmarhubi.com, (consulté le )
- Kamal Marhubi, « What [..] is a Kubelet? », kamalmarhubi.com, (consulté le )
External links
- Site officiel
- https://github.com/kubernetes/kubernetes
- http://www.imotif.net/index.php/2016/11/08/google-kubernetes/
{{Virtualization software}} {{Linux Containers}} [[Catégorie:Informatique]] [[Catégorie:Logiciel libre sous licence Apache]]