Kubernetes distribue et orchestre des workloads sur des clusters de serveurs dans des datacenters.

De nos jours, les conteneurs sont devenus la technologie de référence pour le packaging d’applications. De plus en plus d’applications sont conteneurisées et déployées. Le déploiement d’un seul conteneur vers une machine virtuelle et/ou physique n’est pas un problème en soi et est réalisable simplement. Cependant, les choses se compliquent lorsqu’il faut déployer des centaines de conteneurs sur de nombreuses VMs tout en assurant l’évolutivité et la disponibilité.

Kubernetes amène une solution à cette problématique. Il aide à automatiser le déploiement, la gestion et l’évolutivité des applications conteneurisées. Kubernetes le fait en créant un cluster composé de machines physiques et/ou virtuelles, qui sont capables d’exécuter des applications conteneurisées.

Lorsqu’une application est déployée sur Kubernetes, il faut indiquer l’emplacement des images des conteneurs et spécifier les ressources, la mémoire, la configuration. Kubernetes s’occupe de tout : il va chercher les images des conteneurs, les déployer sur les machines du cluster et s’assurer que les conteneurs disposent bien des ressources nécessaires. Kubernetes surveille aussi l’état du cluster. Il prend les mesures nécessaires pour assurer à la fois l’évolutivité, la disponibilité et l’intégrité des conteneurs quíl doit surveiller.

Déploiement déclaratif ou impératif

Pour bien comprendre le fonctionnement de Kubernetes, il est important de comprendre la différence entre un déploiement déclaratif et un déploiement impératif.

Kubernetes est un système déclaratif (par opposition aux systèmes impératifs). Cela signifie qu’il n’est pas possible de lui donner des ordres. Il n’est donc pas possible de lui dire : créer un conteneur. Il est seulement possible de décrire ce que l’on souhaite avoir un conteneur et attendre que Kubernetes agisse. Le rôle de Kubernetes est donc de réconcilier deux états : l’état actuel du cluster et l’état dans lequel le cluster devrait être.

Par exemple, il est possible de dire : “Nous avons besoin d’un Pod nommé web, dans lequel il n’y aurait qu’un seul conteneur. Ce conteneur fera tourner une image de nginx”. Si ce Pod n’existe pas encore, Kubernetes le créera. Si ce Pod existe déjà et correspond aux spécifications, Kubernetes ne fera rien.

Kubernetes essaie constamment de réconcilier la différence entre l’état souhaité et l’état actuel. Ainsi, dès que l’état désiré diffère de l’état actuel, il tentera de modifier l’état pour converger vers l’état désiré.

Kubernetes est-il nécessaire pour tout le monde ?

Kubernetes est devenu synonyme de “Cloud Native” et est souvent utilisé comme un moyen de transformer et de moderniser les applications.

Bien que Kubernetes soit une plate-forme puissante, ce pouvoir s’accompagne d’une grande complexité et d’une responsabilité encore plus grande. Kubernetes met plus de responsabilités entre les mains des développeurs. Kubernetes exige non seulement un changement complet dans la pile technologique d’une entreprise, mais aussi dans sa culture et son processus de développement.

Toute cette complexité n’ajoute pas nécessairement une valeur commerciale. Il est difficile d’innover lorsque les équipes passent du temps à chercher des moyens de faire fonctionner l’infrastructure sous-jacente.

Kubernetes est certainement très puissant, mais il existe d’autres technologies permettant de réaliser des développements natifs Cloud et de moderniser les applications. Si l’objectif de l’entreprise est de mettre rapidement sur le marché des applications efficaces, sécurisées et évolutives, alors qu’elle ne dispose pas des compétences internes nécessaires pour mettre en œuvre une stratégie Kubernetes, il est probablement préférable de se tourner vers des solutions serverless.

Kubernetes comme environnement d’hébergement de micro-services

Une architecture micro-services est une technique de développement et de déploiement de logiciels. Elle est également connue sous le nom d’architecture de micro-services. Elle permet de diviser une application en un ensemble de services faiblement couplés. Ce type d’architecture facilite le déploiement d’applications d’envergure. Grâce à sa modularité, l’architecture de micro-services permet à une application d’évoluer plus facilement. Elle permet également à plusieurs équipes de développement de travailler ensemble.

L’architecture micro-services permet de développer des applications logicielles comme un ensemble de services/briques plus petits. Ces services peuvent être déployés de manière indépendante. Chaque service exécute un processus et communique avec les autres services à l’aide d’un mécanisme qui doit être léger.

Ce type d’architecture est utilisé depuis des années par des entreprises telles que Google, Amazon, Facebook ou Netflix.

Kubernetes fournit un système complet permettant de faire fonctionner plusieurs conteneurs sur plusieurs machines. Kubernetes est un environnement de gestion de l’exécution d’applications basé sur des conteneurs. Si l’on considère qu’un service peut être hébergé dans un conteneur, Kubernetes devient la solution parfaite pour le déploiement de micro-services.

Kubernetes permet une portabilité des applications sur le Cloud

Kubernetes est un logiciel destiné à “automatiser le déploiement, l’évolutivité et la gestion des applications conteneurisées”.

Kubernetes lui-même est une abstraction de tous les fournisseurs d’infrastructures et de cloud computing qui permet une approche simplifiée pour orchestrer toutes les ressources nécessaires au bon fonctionnement d’une application.

La fonctionnalité de Kubernetes qui permet d’orchestrer plusieurs clusters Kubernetes est appelée “multi-cluster”. Le multi-cluster (également appelé fédération) vise à simplifier la gestion de plusieurs clusters Kubernetes en synchronisant les ressources entre les différents clusters membres du cluster global.

Le multi-cluster permet une haute disponibilité en équilibrant les workloads entre les clusters et augmente la fiabilité en cas de défaillance dún cluster. De plus, il évite le verrouillage des fournisseurs et permet d’écrire une application une seule fois et de la déployer sur plusieurs fournisseurs de cloud computing. C’est ce que propose de réaliser une solution comme Google Anthos.

Kubernetes comme socle pour construire un PaaS

Un PaaS est une solution conçue pour créer une couche d’abstraction afin que l’utilisateur final puisse se concentrer sur le déploiement, la gestion et l’évolutivité de ses applications et de ses données sans avoir à se soucier de l’infrastructure physique.

Une solution PaaS peut automatiser de nombreuses tâches répétitives de bas niveau.

Kubernetes n’est pas une solution PaaS en tant que telle. Mais Kubernetes permet de construire des solutions PaaS.

Technologies Kubernetes-native

Les technologies natives Kubernetes (outils/systèmes/interfaces) sont celles qui sont principalement conçues et construites pour Kubernetes.

Une technologie native Kubernetes offre ses fonctionnalités en s’intégrant profondément au cœur de Kubernetes. Cela peut se manifester de multiples façons, par exemple en étendant les fonctionnalités d’un cluster Kubernetes par l’ajout de nouvelles API et de contrôleurs personnalisés, ou en fournissant des plugins d’infrastructure pour les composants de base.

Les technologies natives Kubernetes fonctionnent généralement avec le CLI de Kubernetes (“kubectl”), peuvent être installées sur le cluster avec le gestionnaire Helm, et peuvent être intégrées de manière transparente avec les fonctionnalités de Kubernetes.

L’avenir est clairement dans cette direction. Il faut s’attendre à ce que des normes commencent à émerger pour des surcouches comme le Serverless, l’API management, les bases de données, etc.

Ecosystème de Kubernetes

Kubernetes a été fondée par Joe Beda, Brendan Burns et Craig McLuckie, qui travaillaient alors tous chez Google. D’autres ingénieurs, dont Brian Grant et Tim Hockin, se sont rapidement joints à eux. Kubernetes a été annoncé par Google à la mi-2014. Le développement et sa conception de Kubernetes était alors fortement influencés par le système Borg, qui est au cœur du fonctionnement des data centers de Google. L’écosystème de Kubernetes est géré par la Cloud Native Compute Foundation. Un grand nombre d’acteurs contribuent à son développement. Et il est utilisé par toutes les entreprises qui développent des applications cloud natives.

Apprendre Kubernetes à l’aide de tutoriels

Passer par un tutoriel est une bonne manière de découvrir Kubernetes. Chaque tutoriel comporte plusieurs sections, chacune d’entre elles ayant une séquence d’étapes. L’intégralité de ces tutoriels comportent une partie pratique. Il en existe beaucoup. Voici une liste de tutoriels sur Kubernetes.

Kubernetes système d’exploitation cloud natif

Beaucoup considèrent que Kubernetes est un véritable système d’exploitation pour le cloud et prédisent que son impact sur l’informatique sera du même niveau que Linux.

Architecture de Kubernetes

Un déploiement opérationnel de Kubernetes est appelé “cluster”. C’est pourquoi nous parlons souvent d’un cluster Kubernetes. De manière logique, le cluster se compose de deux parties :

D’un point de vue physique, le cluster est composé de nœuds qui sont des machines Linux. Ces machines Linux peuvent être virtualisées.

L’utilisation d’un conteneur sur un ordinateur portable est relativement simple. Mais connecter des conteneurs à plusieurs machines, aussi appelé hôte, les mettre à l’échelle, les déployer, créer des applications sans temps d’arrêt, est difficile. Kubernetes propose une architecture qui relève ces défis en offrant un ensemble ouvert et extensible de services et d’API.

Kubernetes vs Docker

Il ne faut pas opposer Kuberntes et Docker. Kubernetes et Docker sont des solutions différentes qui, si elles sont utilisées ensemble, fonctionnent très bien et rendent la gestion et la mise en œuvre des conteneurs dans une architecture distribuée plus facile et plus efficace.

Les outils de l’ecosystème Kubernetes

Dans l’écosystème Kubernetes, de plus en plus d’outils sont créés pour résoudre des problèmes communs : kalisto, gVisor, k3s, skaffold, kubectl, stern, kubens, kubespy, k9s, kompose, kustomize. Ces outils ont tous pour objectifs d’améliorer la simpiicité d’utilisation, la productivité, la sécurité de Kubernetes et de son écosystème.

Kubernetes est basé sur l’expérience de Google

L’infrastructure de Google a atteint une très grande échelle avant que les machines virtuelles ne deviennent omniprésentes dans les centres de données. Les conteneurs ont fourni une excellente solution pour la construction de clusters efficaces. L’efficacité de ces clusters basés sur la conteneurisation a été au cœur des défis de Google.

Ainsi depuis le début des années 2000 Google a déployé un orchestrateur propriétaire connu sous le nom de Borg. Kubernetes est considéré comme la version 2 de Borg : il bénéficie de toute l’expertise de Google sur le sujet et est mis à jour avec les technologies récentes.

La terminologie de Kubernetes

Rentrer dans le monde des orchestrateurs n’est pas simple. Il y a de nombreux concepts et termes nouveaux : Node, Pod, Conteneur, Service, Scheduler, Controleur,…

Knative, un composant de Kubernetes essentiel

Knative est une plate-forme basée sur Kubernetes qui fournit un ensemble de composants essentiels pour créer des applications natives et serverless. Une application Knative est centrée sur les sources et basée sur les conteneurs, qui peuvent fonctionner partout. Une application Knative peut s’exécuter on-premise ou sur le cloud. En bref, Knative peut gérer des applications modernes dans une architecture serverless.

Le Service Mesh est essentiel pour les applications micro-services sur Kubernetes

Un service mesh est conçu pour s’adapter aux architectures micro-services distribuées. Dans ce type d’architecture, il peut y avoir plusieurs instances d’un service donné, fonctionnant sur différents serveurs physiques. Pour pouvoir communiquer entre eux, les micro-services doivent trouver les autres services. Un service mesh prend automatiquement en charge la découverte et la connexion des services sans que le développeur n’ait à s’en soucier.

Quel est le prix de Kubernetes ?

Kubernetes est un projet open source. Il est entièrement gratuit et peut être téléchargé depuis GitHub.

Il existe également des distributions managées de Kubernetes : Google Kubernetes Engine (GKE), Azure Kubernetes Service (AKS), Amazon Elastic Kubernetes Service (Amazon EKS) ou OVH Managed Kubernetes Service. Certaines de ces distributions sont gratuites, d’autres ne le sont pas.

Comment avoir un cluster Kubernetes opérationnel

Deux solutions possibles et disponibles pour Kubernetes avec Google Cloud Platform :

Références