kubernetes définition

Kubernetes – Tout savoir sur la plateforme d’orchestration de containers

Kubernetes est une plateforme open source d’orchestration de containers créé par Google. Découvrez son utilité, son fonctionnement, ainsi que ses différences avec Docker.

Les containers sont une méthode de virtualisation de système d’exploitation permettant de lancer une application et ses dépendances à travers un ensemble de processus isolés du reste du système. Cette méthode permet d’assurer le déploiement rapide et stable des applications dans n’importe quel environnement informatique.

En plein essor depuis plusieurs années, les containers ont modifié la façon dont nous développons, déployons et maintenons des logiciels. De par leur légèreté et leur flexibilité, ils ont permis l’apparition de nouvelles formes d’architectures d’application, consistant à constituer des applications au sein de containers séparés pour ensuite déployer ces containers sur un cluster de machines virtuelles ou physiques. Toutefois, cette nouvelle proche a créé le besoin de nouveaux outils « d’orchestration de containers » pour automatiser le déploiement, le management, le networking, le scaling et la disponibilité des applications basées sur container. Tel est le rôle de Kubernetes.

Kubernetes : qu’est-ce que c’est ?

Kubernetes est un projet Open Source créé par Google en 2015. Il permet d’automatiser le déploiement et la gestion d’applications multi-container à l’échelle. Il s’agit d’un système permettant d’exécuter et de coordonner des applications containerisées sur un cluster de machines. C’est une plateforme conçue pour gérer entièrement le cycle de vie des applications et services containerisés en utilisant des méthodes de prédictibilité, de scalabilité et de haute disponibilité.

Principalement compatible avec Docker, Kubernetes peut fonctionner avec n’importe quel système de container conforme au standard Open Container Initiative en termes de formats d’images et d’environnements d’exécution. De par son caractère open source, Kubernetes peut aussi être utilisé librement par n’importe qui, n’importe où.

Kubernetes : comment ça marche ?

Les architectures Kubernetes reposent sur plusieurs concepts et abstractions : certaines existaient déjà auparavant, d’autres lui sont spécifiques. La principale abstraction sur laquelle repose Kubernetes est le cluster, à savoir le groupe de machines exécutant Kubernetes et les containers qu’il gère.

Un cluster Kubernetes doit avoir un master : le système qui commande et contrôle toutes les autres machines du cluster. Un cluster Kubernetes hautement disponible réplique les fonctions du master sur les différentes machines, mais seul un master à la fois exécute le controller-manager et le scheduler.

Chaque cluster contient des noeuds Kubernetes. Il peut s’agir de machines physiques ou virtuelles. Les noeuds quant à eux exécutent des pods : les objets Kubernetes les plus basiques pouvant être créés ou gérés. Chaque pod représente une seule instance d’une application ou d’un processus en cours d’exécution sur Kubernetes, et se constitue d’un ou plusieurs containers. Tous les containers sont lancés et répliqués en groupe dans le pod. Ainsi, l’utilisateur peut se concentrer sur l’application plutôt que sur les containers.

Profitez de 2 To à vie de stockage en ligne avec pCloud

Le controller est une autre abstraction permettant de gérer la façon dont les pods sont déployés, créés ou détruits. En fonction des différentes applications à gérer, il existe différents pods. Une autre abstraction est le service, qui permet d’assurer la persistance des applications même si les pods sont détruits. Le service décrit la façon dont un groupe de pods peut être accédé via le réseau.

On dénombre d’autres composants clés de Kubernetes. Le scheduler répartit les workloads entre les noeuds pour assurer l’équilibre entre les ressources, et garantir que les déploiements correspondent aux besoins des applications. Le controller manager quant à lui assure que l’état du système (applications, workloads…) correspond à l’état désiré défini dans les paramètres de configuration Etcd.

kubernetes fonctionnement utilité

Kubernetes : à quoi ça sert ?

Le principal intérêt de Kubernetes est de permettre aux entreprises de se focaliser sur la façon dont ils veulent que les applications fonctionnent, plutôt que sur des détails spécifiques d’implémentation. Grâce aux abstractions permettant de gérer des groupes de containers, les comportements dont ils ont besoin sont dissociés des composants qui les fournissent.

Kubernetes permet ainsi d’automatiser et de simplifier plusieurs tâches. Tout d’abord, on peut citer le déploiement d’applications multi-container. De nombreuses applications résident dans plusieurs containers (base de données, front end web, serveur de cache…), et les microservices sont également développés sur ce modèle. Généralement, les différents services sont liés par API et des protocoles web.

Cette approche présente des avantages sur le long terme, mais demande beaucoup de travail sur le court terme. Kubernetes permet de réduire les efforts nécessaires. L’utilisateur indique à Kubernetes comment composer une application à partir d’un ensemble de containers, et la plateforme prend en charge le déploiement et assure la synchronisation des composants entre eux.

Cet outil simplifie aussi le scaling d’applications containerisées. En effet, les applications ont besoin d’être mises à l’échelle pour suivre la demande et optimiser l’usage des ressources. Kubernetes permet d’automatiser cette mise à l’échelle. La plateforme permet aussi le déploiement continu de nouvelles versions d’applications, éliminant les temps de maintenance. Ses mécanismes permettent de mettre à jour les images de containers et même de revenir en arrière en cas de problème.

Profitez de 2 To à vie de stockage en ligne avec pCloud

Kubernetes et ses APIs permettent aussi le networking des containers, la découverte de service et le stockage. Enfin, n’étant pas liée à un environnement ou à une technologie cloud spécifique, Kubernetes peut être lancé dans n’importe quel environnement : cloud public, stacks privés, hardware physique ou virtuel… il est même possible de mixer les environnements.

Alternatives et concurrents de Kubernetes

Il existe plusieurs alternatives à Kubernetes. On peut citer Docker Compose, très adapté pour le staging, mais pas vraiment pour la production.

Un autre outil réputé est Nomad. Celui-ci permet la gestion de cluster et la planification, mais pas la gestion de configuration et le monitoring.

De son côté, Titus est la plateforme d’orchestration open source développée par Netflix. Pour l’heure, peu de personnes l’utilisent en production.

Un autre projet souvent cité comme concurrent de Kubernetes est Mesos. Il s’agit d’un projet Apache, initialement lancé par des développeurs de Twitter. Cet outil offre des services d’orchestration de conteneurs, mais va plus loin.

Il est pensé comme un système d’exploitation Cloud permettant de coordonner les composants conteneurisés et non conteneurisés. De nombreuses plateformes sont compatibles, à commencer par Kubernetes.

Kubernetes vs Docker Swarm : quelle est la différence ?

kubernetes vs docker

On compare très souvent Kubernetes avec la plateforme de stockage de container Docker, et plus précisément avec Docker Swarm la solution de clustering native pour les containters Docker. Ces deux outils offrent en effet des fonctionnaltiés de création et de gestion de containers virtuels. Cependant, ces deux systèmes présentent de nombreuses différences.

Tout d’abord, Docker se révèle plus simple à utiliser que Kubernetes. L’un des défauts souvent reproché à Kubernetes est en effet sa complexité. Par exemple, Kubernetes est très long à installer et à configurer, et nécessite une certaine planification car les noeuds doivent être définis avant de débuter. La procédure diffère également pour chaque système d’exploitation.

Profitez de 2 To à vie de stockage en ligne avec pCloud

De son côté, Docker Swarm utilise la CLI de Docker pour exécuter toutes les portions de son programme. Il suffit d’apprendre à maîtriser cet ensemble d’outils pour pouvoir créer des environnements et des configuration. Il n’est pas non plus nécessaire de cartographier les clusters avant de commencer.

En outre, Kubernetes peut être exécuté par dessus Docker mais nécessite de connaître les caractéristiques de leurs CLI respectives pour pouvoir accéder aux données via l’API. Il faut connaître la CLI de Docker pour naviguer au sein de la structure, et la CLI kubectl de Kubernetes pour exécuter les programmes.

En comparaison, l’utilisation de Docker Swarm se rapproche de celle des autres outils Docker comme Compose. On utilise la même CLI Docker, et il est même possible de lancer de nouveaux containers avec une simple commande. De par sa vitesse, sa polyvalence et sa simplicité d’utilisation, Docker prend donc un certain avantage sur Kubernetes en termes d’usabilité.

Les deux plateformes se distingaient aussi jadis par le nombre de containers qu’il est possible de lancer, ainsi que par leur taille. Dans ce domaine, Kubernetes avait l’avantage. Cependant, les récentes mises à jour de Docker ont permis de réduire l’écart.

Désormais, les deux systèmes peuvent prendre en charge un maximum de 1000 clusters et 30 000 containers. Cependant, un test mené par Docker en mars 2016 révèle que Docker peut lancer le même nombre de containers que Kubernetes cinq fois plus rapidement. En revanche, une fois les containers lancés, Kubernetes conserve un avantage en termes de réactivité et de flexibilité.

Quoi qu’il en soit, rien n’empêche d’utiliser à la fois Kubernetes et Docker Swarm. Il est par exemple possible d’utiliser conjointement Docker et Kubernetes pour coordonner la programmation et l’exécution de containers Docker sur Kubelets. Le moteur Docker se charge d’exécuter l’image de container, tandis que la découverte de service, l’équilibrage des tâches et le networking sont gérés par Kubernetes. Ces deux outils sont donc très adaptés au développement d’architecture Cloud moderne malgré leurs différences.

Kubernetes pour la Data Science

Kubernetes est devenu un outil essentiel pour les développeurs logiciels et les opérateurs système, en leur permettant de déployer et de gérer diverses applications dans des conteneurs Linux. Toutefois, cette solution s’avère aussi très utile pour la Data Science.

De nombreux Data Scientists sont en effet confrontés aux mêmes problématiques que les ingénieurs logiciels. Ils ont besoin d’environnements portables et reproductibles, de répéter des expériences, de surveiller des métriques en production, et doivent disposer d’une élasticité.

Les pipelines de Machine Learning sont par ailleurs similaires aux pipelines de développement en intégration continue. Plusieurs étapes coordonnées doivent fonctionner en simultané et de façon reproductible afin de pouvoir extraire des caractéristiques, traiter les données, et entraîner des modèles d’apprentissage automatique.

En outre, les architectures de microservices simplifient le débogage des modèles de Machine Learning au sein du pipeline et facilitent la coopération entre les scientifiques des données et les autres membres d’équipe. Enfin, les configurations déclaratives illustrant les connexions entre les services simplifient la création de modèles et les pipelines d’apprentissage reproductibles.

Les Data Scientists font donc face aux mêmes défis que les développeurs d’applications, mais doivent aussi relever d’autres challenges liés à leur façon de travailler et de tester les modèles ML. Beaucoup utilisent des notebooks interactifs développés par Project Jupyter.

Toutefois, Kubernetes offre de nombreux avantages et permet de développer des outils de plus haut niveau. En plus de permettre de développer des techniques basées sur le Machine Learning pour résoudre les problèmes d’entreprise, Kubernetes offre aussi des opportunités pour implémenter ces techniques en production.

Kubeflow : Kubernetes pour le Machine Learning

Le projet open source Kuberflow simplifie les déploiements de workflows de Machine Learning sur Kubernetes, tut en les rendant portables et extensibles. Il s’agit d’une boîte à outils complète pour le Machine Learning sur Kubernetes.

La capacité de Kubernetes à exécuter des étapes indépendantes et configurables et étendues grâce à des frameworks et des bibliothèques spécifiques. Kubeflow peut être exécuté très facilement sur une workstation, un rig d’entraînement sur site ou sur le Cloud.

Il regroupe tous les outils et frameworks open source nécessaires : des Notebooks Jupyter, des frameworks d’entraînement comme PyTorch, TensorFlow, Chainer, MPI et MXNet, Katib pour la configuration d’hyperparamètres, un système IAM et différents outils de serving comme KFServing, Seldon Core, BentoML, Nvidia Triton et Tensorflow Serving.