Kubernetes a ma façon
Introduction
J’espère que vous allez bien. Aujourd’hui, je me suis décidé à me lancer dans Kubernetes, au moins dans l’écriture de posts à ce sujet. Dans mon blog, je vais vous montrer mes avancées et ma compréhension au fur et à mesure des articles sur cette technologie que je trouve incroyable. Malgré les défis, j’ai réussi à avoir une vision plus claire de cette technologie.
J’espère que vous allez apprécier et si jamais vous souhaitez plus de contenu comme celui-ci, n’hésitez pas à me le faire savoir.
Qu’est-ce que Kubernetes ?
Déjà, quand vous entendez Kubernetes, à quoi pensez-vous ? Honnêtement, on ne peut pas imaginer grand-chose avec ce nom imposant. Cependant, ne vous y trompez pas, Kubernetes ou K8s (car il y a 8 lettres après le K :) ) a drastiquement changé la façon dont les systèmes et les applications sont gérés de nos jours.
Depuis longtemps, nous ne sommes plus dans l’optique d’un serveur = un service, et encore moins d’une VM = un service. Nous sommes plutôt dans l’esprit de 1 service = 1 conteneur. Bien que cela ne soit pas une norme absolue, c’est la recommandation des plus grandes entreprises qui utilisent ce genre de technologie.
Du coup, Kubernetes, c’est quoi exactement ? Tout simplement (enfin, pas trop), K8s permet de gérer plusieurs services répartis sur un grand nombre de travailleurs, c’est-à-dire des machines qui exécutent principalement ces services. Ces travailleurs sont contrôlés par un patron, qui, dans notre cas, est une tour de contrôle. Cette tour de contrôle s’assure que toutes les demandes sont satisfaites et, si ce n’est pas le cas, elle fera tout son possible pour équilibrer la demande et l’offre.
Peut-être que je vous ai un peu perdu avec cette explication, mais au fur et à mesure des posts, ce sera 1000 fois plus clair, car rien ne vaut la pratique.
Si on va dans les détails, ces fameux services sont hébergés dans ce que l’on appelle des conteneurs. Si vous ne savez pas ce qu’est un conteneur, je vous invite à aller regarder mes posts à propos de Docker (promis, je vais finir la série de tutoriels un jour). Mais un conteneur, vous pouvez le voir comme un carton : un carton où l’on met des choses dedans et que l’on jette lorsqu’on n’en a plus besoin.
Maintenant, pourquoi Kubernetes et non une autre technologie ?
Pourquoi Kubernetes ?
Kubernetes est devenu la norme de facto pour l’orchestration de conteneurs grâce à ses nombreux avantages :
-
Auto-scaling : Kubernetes permet de faire du scaling automatique, si votre application a besoin de plus de ressources, Kubernetes va ajouter des conteneurs pour satisfaire les besoins de votre application. Et si votre application n’a plus besoin de ces ressources ajoutées, Kubernetes va supprimer les conteneurs en trop.
-
Load Balancing : Kubernetes est parfait pour faire du load balancing, c’est-à-dire que si vous avez plusieurs conteneurs qui font la même chose, Kubernetes va s’assurer que les requêtes sont bien réparties sur les conteneurs.
-
Rolling Updates : Kubernetes permet de faire des mises à jour en douceur, c’est-à-dire que si vous avez une nouvelle version de votre service vous allez pouvoir petit à petit mettre à jour votre application sans que les utilisateurs ne s’en rendent compte. Ça permet de faire des mises à jour sans downtime.
-
Storage Orchestration : Kubernetes permet de gérer le stockage, si vous avez besoin de stockage pour votre application, Kubernetes va s’assurer que le stockage est bien géré. Et qu’il sera uniforme pour tous les conteneurs.
Ainsi, Kubernetes est devenu indispensable dans le domaine de l’IT. Par exemple, lorsqu’on recherche le mot “Kubernetes” sur Indeed, on trouve près de 3 000 offres d’emploi !
Si on met de côté l’argent, Kubernetes répond à une infinité de scénarios. Par exemple, si je veux lancer mon super site web de vente de cacahuètes, je souhaite qu’il me coûte le moins cher possible, tout en étant rapide et efficace : Kubernetes est la solution. Si j’ai une solution d’analyse de logs en temps réel, nécessitant un calcul rapide et une visualisation encore plus rapide, le tout de manière distribuée sur plusieurs datacenters et avec plus de 2000 nœuds : Kubernetes répond à cela et plus encore !
Comme vous pouvez le voir, Kubernetes peut répondre à toutes les exigences possibles et imaginables. Mais ne nous voilons pas la face, maîtriser cet outil demande du temps, beaucoup de temps. Cependant, avec constance et rigueur, vous pouvez atteindre de grandes choses avec cet outil.
Avant de commencer
Bien entendu, pour pouvoir utiliser Kubernetes, il faut avoir des connaissances en conteneurisation et en conteneurs. Si vous n’avez pas ces connaissances, je vous conseille de lire mon post sur Docker, qui est un outil qui permet de créer des conteneurs. Et qui est très utilisé dans le monde de Kubernetes.
Comment ça marche ?
Maintenant que vous savez ce que c’est et pourquoi c’est utile, on va voir comment ça marche. Pour cela je vais suivre une methode appele “top-down approach”, qui consiste a regarder les choses en plusieurs etapes, vue d’oiseux, vue de haut d’un immeuble, vu a pied, et ainsi de suite. Cela j’ai trouve c’est la meilleure façon d’apprendre car elle va donner l’eau a la bouche aux gens qui debutent pour aller encore plus en detail.
Kubernets c’est base sur un fonctionnement simple, on a un Patron et on a des Employes. Le patron s’appelle “Control-Plane” ce control-plane est ni plus ni moins qu’un serveur, virtualise ou non, qui va gerer tout ce qui se passe dans sa propriete (cluster), il va s’occuper de trois choses principalement, avant de parler de ça je vous laisse une petite image qui l’explique :
On constate qu’il y a trois elements ESSENTIELS :
-
API Server : C’est le composant qui expose l’API Kubernetes. C’est l’interface principale pour le cluster Kubernetes. Il implémente une interface RESTful, qui permet aux utilisateurs et aux composants internes de communiquer avec le cluster Kubernetes. C’est du coup la seule porte d’entrée pour le cluster Kubernetes. Et c’est avec cette API que l’on va pouvoir gérer notre cluster.
-
Scheduler : C’est le composant qui s’assure que les conteneurs sont bien répartis sur les nodes. A chaque nouveau pod lui il va s’occuper d’attribuer automatiquement ces pods vers un conteneur vide selon un algorithme interne a K8’s
-
Controller Manager : C’est l’outil qui s’assure que les nodes et les conteneurs sont en bon état, en surveillant l’état du cluster d’une manniere constant, et si jamai il constate quelque chose qu’il n’aime pas il va essayer de faire emmenner l’etat du cluster vers l’etat desire qu’on lui a dit.
-
etcd : C’est le composant qui stocke les données du cluster Kubernetes, comme les configurations des nodes et des conteneurs, c’est un genre de BDD ou tout ce qui se passe dans le cluster est renvoie vers cette BDD pour une future analyse des elements du cluster…
Les nodes sont également composés de quelques services qui permettent de gérer les conteneurs :
-
Kubelet : C’est le composant qui s’assure que les conteneurs sont en bon état, en surveillant l’état des conteneurs localement. Tout evenement qu’il aura il va renvoyer routes les informations au Control-Plane grace a l’API-Server
-
Kube-proxy : Il s’assure que les conteneurs sont accessibles, en configurant les règles de routage.
-
Container Runtime : C’est le composant qui s’assure que les conteneurs s’exécutent, on peut dire que c’est lui qui fait le travail, comme par exemple Docker et/ou ContainerD ou même Podman.
J’ai mis une grande quantite de details expres, pour vous montrer dans les posts suivants les details plus techniques pour vous montrer comment cela fonctionne d’une manniere plus precise.
Conclusion
Je sais je suis parti un peu vite dans le sujet, mais ne vous inquiétez pas, je vais dans les prochains posts, vous montrer comment faire pour déployer un cluster Kubernetes pour faire nos tests, mais avant ça, je vais vous presenter TOUTES les fonctions que le controller manager a pour bien gerer tout un cluster, et aussi comment déployer des applications sur ce cluster.
Je vous remercie d’avoir lu ce post, et j’espère que vous avez appris quelque chose. Si vous avez des questions, n’hésitez pas à me contacter, je serais ravi de vous aider.