Kubernetes est un orchestrateur open source pour le déploiement d’applications en conteneurs.

Kubernetes a été développé à l’origine par google, qui s’est inspiré de sa longue expérience du déploiement de systèmes évolutifs et fiables dans des conteneurs via des API orientées application.

Qu’entend-on par <<systèmes distribués fiables et évolutifs>> ?

Faut noter que de plus en plus de services sont livrés sur le réseau via des API. Ces API sont souvent livrées par un système distribué, les différents éléments qui implémentent ces API fonctionnant sur différentes machines, connectées via le réseau et coordonnant leur actions via des communications réseau. Dans la mesure où nous comptons de plus en plus sur ces API pour gérer tous les aspects de notre vie quotidienne (par exemple, trouver l’itinéraire vers l’hôpital le plus proche), ces systèmes doivent être extrêmement fiables. Ils ne peuvent pas se permettre de tomber en panne, même si une partie du système plante ou fonctionne mal. De la même manière, ils doivent rester disponibles même pendant les déploiements de logiciels ou les opérations de maintenance. Enfin, comme de plus en plus de monde est présent sur Internet et utilise de tels services, ils doivent être très évolutifs afin de pouvoir accroître leur capacité pour satisfaire une utilisation en augmentation continue sans avoir à modifier radicalement la conception du système distribué qui implémente les services.

La valeur de l’immutabilité

Les containers et Kubernetes encouragent les développeurs à créer des systèmes distribués qui respectent les principes d’infrastructure immutable, une fois qu’un artefact est créé dans le système, les modifications de l’utilisateur ne peuvent pas le faire changer.

Configuration déclarative

L’immutabilité s’étend au-delà des conteneurs en cours d’exécution dans votre cluster et s’applique aussi à la façon dont vous décrivez votre application à Kubernetes. Tout élément dans Kubernetes est un objet de configuration déclarative qui représente l’état désiré du système. C’est le travail de Kubernetes de s’assurer que l’état réel du monde correspond à cet état désiré.

Systèmes d’auto-guérison

Kubernetes est un système d’auto-guérison en ligne. Lorsqu’il reçoit une configuration d’état désiré, il ne prend pas simplement des mesures pour que l’état actuel corresponde à l’état désiré à un instant donné, il agit de manière continue pour s’assurer que l’état actuel corresponde en permanence à l’état désiré. Cela signifie que non seulement Kubernetes va initialiser votre système, mais en plus qu’il le protègera contre toute panne ou perturbation qui pourrait le déstabiliser et affecter sa fiabilité.

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.

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.