Vous n’êtes pas sans savoir que les conteneurs ont apporté un changement radical dans la manière de construire et de déployer des applications. Pour pouvoir passer à un niveau supérieur, nous avons besoin des outils pour gérer la communication, l’administration et la planification de ces conteneurs, qui sont de plus en plus complexes. C’est dans ce contexte que Kubernetes est né. Cet article vous aidera à vous approprier cet outil pour vos développements et à comprendre ce qui se cache derrière cette technologie, les concepts de base et son fonctionnement.
Qu'est-ce que Kubernetes ?
Kubernetes est une technologie développée par Google pour la gestion et l’orchestration de containers Docker. Il s’agit de la plateforme préférée de la plupart des entreprises qui permet de déployer des applications en production dans un temps record.
Avec Kubernetes, vous pouvez vous focaliser sur l’application sans vous préoccuper de l’infrastructure derrière.
Si Docker a changé le paradigme de développement des applications industrielles avec la gestion du cycle de vie de conteneurs, Kubernetes va encore plus loin en proposant une gestion complète de plusieurs containers dans de multiples clusters, dans un contexte distribué à grande échelle, et surtout, dans le cloud. Kubernetes travaille donc à un niveau plus global que Docker.
Pour avoir une idée du fonctionnement de Kubernetes, on peut regarder ses composants principaux :
- Pods : il s’agit de l’unité basique de Kubernetes, qui représente une application ou un processus et qui contient un ou plusieurs conteneurs ;
- Replication Controllers : c’est le contrôleur de pods qui s’assure, entre autres, que toutes les copies de pods soient stables pour pouvoir passer à l’échelle ou pour les remplacer en cas d’erreur ;
- Service : définit comment accéder à un groupe de Pods.
Un cluster de Kubernetes est composé de plusieurs nœuds ou machines. Chaque nœud peut être de deux types : master ou esclave (appelés « minions »). C’est à l’intérieur d’un nœud que se trouve un Pod.
Les nœuds master administrent le cluster, mais ils n’exécutent pas de conteneur. Ils exécutent les services suivants :
- etcd : c’est une base de données pour gérer la configuration globale du cluster ;
- kube-apiserver : c’est une API du nœud master qui permet la communication des nœuds esclaves et les clients du cluster ;
- kube-scheduler : est en charge de décider quel nœud exécute chaque conteneur ;
- kube-controller-manager : exécute les contrôleurs.
Quant aux nœuds esclaves, ils exécutent les conteneurs déployés dans le cluster. Les éléments importants sont :
- kube-proxy : est en charge de la gestion du réseau virtuel et de l’adresse IP de chaque conteneur ;
- kubelet : c’est l’élément le plus important d’un nœud minion, car il veille à ce que tous les conteneurs soient en bon fonctionnement en faisant un monitoring.
Il existe également des concurrents, comme Docker Swarm, mais il n’y a aucun doute, le leader dans tous les aspects est Kubernetes, avec plus de 80% du marché. Docker Swarm est également open source et se présente comme une solution native pour les conteneurs Docker, ce qui a comme atout de ne pas avoir à utiliser une technologie ou API différente.
Néanmoins, n’oubliez pas l’une des forces de Kubernetes : la communauté qui travaille dessus. Il y a énormément d’apports, notamment de Google, alors que la communauté Docker est encore trop petite.
Comment l'intégrer dans des environnements Big Data ?
Il vous faudra un peu de patience pour intégrer Kubernetes dans des environnements big data. En effet, le cycle de vie de la donnée est très différent de celui des applications. Les outils big data sont « data-oriented » et complexes, alors que la philosophie de Kubernetes passe d’abord par les services et microservices, où la simple localisation de la donnée n’est pas évidente. Adapter un outil big data à la flexibilité et à la robustesse de Kubernetes n’est pas simple.
À l’heure actuelle, des outils comme Spark, HDFS ou Kafka ne sont pas facilement utilisables avec Kubernetes, mais beaucoup d’efforts sont faits par la communauté data pour les intégrer, comme le montre par exemple « Kafka Streams », « Apache Spark on Kubernetes ».
Ceci dit, il ne sera pas facile de gérer et synchroniser une distribution classique de big data où coexistent par exemple HDFS, Spark, Hive, Hbase et Zookeeper.
Nous avons vu que la puissance de Kubernetes vous permettra de passer à l’échelle supérieure dans le déploiement des applications et de surmonter beaucoup de problèmes dus à une mauvaise gestion de l’infrastructure.
Kubernetes est une technologie qui sera de plus en plus utilisée et vous devrez l’adopter à un moment ou à un autre si vos développements se complexifient. Néanmoins, vous devrez passer une étape d’intégration de l’outil, qui n’est pas toujours facile, notamment en contexte big data.