Passer au contenu principal

Kubernetes

Kubernetes (K8s) est un orchestrateur conçu pour la gestion des conteneurs. Il a été initialement développé par Google, puis transféré à la Cloud Native Computing Foundation, devenant ainsi un projet Open-Source.

Les avantages d’utiliser Kubernetes sont multiples :

  • Tout d’abord, la standardisation permet de déployer l’application sur n’importe quel fournisseur de cloud, évitant ainsi de dépendre d’un fournisseur spécifique.
  • Ensuite, l’utilisation de conteneurs permet une optimisation en temps réel du nombre de conteneurs en fonction de la charge réelle, ainsi qu’une optimisation de la consommation des ressources CPU et RAM, ce qui se traduit par une réduction des coûts.
  • Enfin, la scalabilité est améliorée grâce à la gestion efficace des ressources.

 

L’évolution du web et l’apparition de Kubernetes

Au fil des années, le fonctionnement du web a connu une évolution significative. Initialement, des serveurs physiques fonctionnaient en continu, et les développeurs mettaient à jour les fichiers directement sur ces serveurs pour faire évoluer les sites. Cependant, cette approche présentait des limitations. La base de données du site continuait de croître jusqu'à atteindre sa capacité maximale, entraînant l’arrêt du serveur et rendant le site inaccessible. De plus, les serveurs étaient parfois saturés lors de périodes de forte fréquentation, même avec l’utilisation de serveurs physiques plus puissants.

C’est à ce moment que les machines virtuelles sont apparues. L’idée était de regrouper plusieurs serveurs virtuels sur un même serveur physique. Les développeurs préparaient des machines virtuelles avec un système d’exploitation défini et y déployaient leur code. Cependant, cette approche nécessitait beaucoup de travail, car il fallait non seulement préparer les fichiers contenant le code, mais également créer et déployer des machines virtuelles, un processus long et lourd. De plus, la duplication de plusieurs machines virtuelles avec des systèmes d’exploitation complets augmentait la charge sur le serveur.

C’est là qu’intervient Docker. Cette technologie consiste à virtualiser uniquement la partie d’application nécessaire, sans inclure l’ensemble du système d’exploitation. Chaque partie de l’application est encapsulée dans un conteneur, permettant une mise à jour rapide de la partie nécessaire, généralement en quelques minutes.

Cependant, la question se pose : comment faire face à une demande élevée sur les conteneurs et les dupliquer dynamiquement pour faire évoluer le système ? C’est ici qu’intervient Kubernetes, un orchestrateur de conteneurs. Il est responsable du lancement, de l’arrêt et de la gestion du cycle de vie des conteneurs sur plusieurs machines. Kubernetes permet de scaler automatiquement en fonction de la demande des utilisateurs, créant ou supprimant des conteneurs pour garantir des temps de réponse satisfaisants.

 

Différence entre Docker et Kubernetes

Docker se concentre principalement sur la création et l’exécution de conteneurs.

Kubernetes se concentre sur l’orchestration des conteneurs à grande échelle. Il gère la distribution des conteneurs sur un cluster de machines, assure leur disponibilité, leur scalabilité, gère les mises à jour sans interruption de service et garantit une répartition équitable de la charge entre les différentes instances d’une application.

 

Les composants de Kubernetes

Master Le serveur principal qui contrôle les nœuds et coordonne le cluster. Il gère les opérations du cluster, telles que la planification des déploiements, la configuration des ressources, etc.
Nœud (ou Worker) Une machine de travail qui exécute les pods qui lui sont attribués.
Pod Un environnement d’exécution qui peut contenir un ou plusieurs conteneurs Docker. Les conteneurs à l’intérieur du même pod partagent la même adresse IP, les mêmes ports et les mêmes volumes.
Kubelet Un composant s’exécutant sur les nœuds qui s’assure que les conteneurs spécifiés dans les pods sont en cours d’exécution et fonctionnent correctement. Si un nœud tombe, c’est le kubelet qui remonte l’information au master.
Service Un point d’entrée abstrait qui permet l’accès load balancé à un groupe de conteneurs identiques dans différents pods. Autrement dit, c’est une adresse IP virtuelle pour acheminer le trafic vers différents pods. Ils assurent également un équilibrage de charge pour ces pods.

Kubernetes.png

Comment fonctionne Kubernetes ?

1. L’équipe DevOps envoie des commandes de déploiement, scaling ou surveillance au serveur Master de Kubernetes.

2. Le serveur Master interprète ces commandes puis transmet les instructions aux noeuds concernés dans le cluster pour exécuter les tâches.

3. Les services Kubernetes acheminent le trafic vers les pods appropriés en fonction des règles de routage définies.

4. Le serveur Master alloue les ressources nécessaires au pod désigné pour qu’il puisse exécuter les tâches spécifiées.

5. Une fois que le serveur Master a planifié le pod sur un nœud, le Kubelet va ordonner à Docker de démarrer les conteneurs spécifiés dans le pod. Docker gère alors le cycle de vie de ses conteneurs, les démarrant ou les arrêtant selon les besoins.

6. Le Kubelet surveille en continu l’état des conteneurs via Docker sur le nœud où ils s’exécutent. Il rassemble ces informations, telles que l’état, les performances, les erreurs éventuelles, et les remonte au serveur Master pour une vue globale de l’état du cluster.

 

Comprendre Helm et les Charts : le gestionnaire de paquets de Kubernetes

Déployer une application sur Kubernetes n’est pas simple. Une simple application nécessite de nombreux fichiers de configuration distincts, chacun décrivant une ressource :

  • deployment.yaml → pour les Pods et leur gestion.
  • service.yaml → pour exposer l'application sur le réseau.
  • ingress.yaml → pour la gestion des routes HTTP.
  • et d'autres (configurations, secrets, volumes…)

Résultat : on se retrouve avec des dizaines de fichiers longs, répétitifs et complexes à maintenir. Et si l’on veut déployer la même application dans un autre environnement (dev, test, prod) ? Il faut tout adapter à la main, une source d’erreurs et de perte de temps.

La Solution : Helm 💡

Helm est un outil de gestion de paquets pour Kubernetes. Il permet d’installer, configurer, mettre à jour et désinstaller des applications complètes dans un cluster à l’aide de packages appelés charts.

Vous pouvez voir Helm comme le “npm” de Kubernetes : au lieu d’écrire manuellement des YAML, vous installez des applications préconfigurées, réutilisables et paramétrables.

Qu’est-ce qu’un Chart Helm ?

Un chart Helm est un package qui contient tout ce qu’il faut pour déployer une application :

  • des fichiers YAML qui décrivent comment Kubernetes doit créer les composants de l’application (pods, services, volumes…).
  • un fichier values.yaml contenant les variables de configuration : nombre de réplicas, l'image docker utilisée, le port exposé et même la possibilité de désactiver un service.
  • et un fichier Chart.yaml avec les métadonnées du package : son nom, sa version, une description et éventuellement ses dépendances.

Prenons l'exemple d'un déploiement d'une application WordPress avec sa base de données.

helm install mon-wordpress bitnami/wordpress

Helm va alors :
 1. Télécharger le chart bitnami/wordpress depuis un dépôt Helm.
 2. Remplacer les variables selon les valeurs par défaut du values.yaml du Chart (ou celles que vous avez fournies en surcharge).
 3. Générer tous les manifests Kubernetes (des fichiers YAML).
 4. Les envoyer au cluster via l’API Kubernetes pour créer les ressources nécessaires.

Résultat : votre WordPress est en ligne, avec sa base MariaDB, ses volumes persistants et son service réseau sans que vous ayez à écrire une seule ligne de YAML.

Helm apporte alors des avantages significatifs dans la gestion des déploiements cloud :

  • Gain de temps: Déploie une application complète en une seule commande.
  • Mise à jour facile: Utilise helm upgrade pour mettre à jour la configuration sans tout recréer.
  • Reproductibilité: Les charts garantissent des déploiements cohérents sur plusieurs environnements.
  • Réutilisabilité: Les charts sont versionnés, partageables et personnalisables.
  • Écosystème riche: Des milliers de charts open source existent pour NGINX, MySQL, Redis, etc.
  • Configuration simplifiée: Modifie le comportement de l’application via un seul fichier values.yaml.

Aucune page ou chapitre n'a été ajouté à cet article.