Introduction à Kubernetes
Dec 08, 2022Salut,
Aujourd'hui on va parler de Kubernetes, ou K8S pour les intimes
C'est un sujet qui fait peur à tout le monde, même aux plus expérimentés
En fait, c'est pas l'outil qui fait peur, mais son implémentation
Mais on va voir tout ça pour que tu puisses augmenter ta culture générale informatique sans avoir besoin de devenir expert.
K8S
K8S est un Open Source Container Orchestration Tool
À la base, développé par Google
Il aide à gérer des App composées de dizaines voir de centaines de conteneurs.
Ces conteneurs peuvent être dans plusieurs environnements de déploiement différents en même temps (serveur physique, virtuel, cloud)
C'est la raison pour laquelle ça fait peur : K8S gèrent des centaines de docker dans des infras totalement mixtes.
C'est assez vertigineux
À quoi sert K8S ?
Et qu'est ce que fait un outil d'orchestration ?
L'essor des micro services a multiplié le nombre de conteneurs à déployer.
On veut souvent avoir la possibilité de lancer plusieurs fois la même image pour avoir plus de perf, puis de les éteindre en période creuse par exemple
Tout ça fait que l'on doit gérer des centaines de conteneurs.
Certaines app et archi gèrent plusieurs milliers de conteneurs.
À la main à gérer, même pour les OPS, c'est impossible (même avec des scripts et tout)
En plus quand tu commences à mettre ces conteneurs un peu partout sur la planète, c'est l'enfer pour tout faire communiquer
D'où la nécessité d'avoir un outil pour orchestrer tout ça
Quelles sont les fonctionnalités d'un orchestrateur ?
- Il doit permettre d'avoir de la Haute Disponibilité : c'est à dire garantir que ton APP ne soit jamais arrêtée
- Il doit permettre de la Scalabilité : c'est à dire maintenir les performances les plus hautes en permanence
- Il doit permettre le Disaster recovery : c'est-à-dire qu'en cas de sinistre important, tu peux faire repartir ton APP rapidement et dans le dernier état stable
Quelle est l'architecture K8S ?
Il y a un Master node
Puis des Worker : ce sont des serveurs avec le process Kubelet qui tourne dessus
Les kubelet permettent la communication entre les noeuds et c'est eux qui vont déclencher des actions
Sur chaque worker, il y a aussi Docker d'installé et des conteneurs tournent dessus
Donc c'est sur les workers que ton app tourne réellement
Sur le master, il n'y a que les process Kubenetes importants qui servent à piloter l'ensemble des workers (qui forment un cluster) :
- Api Server
C'est le point d'entrer pour piloter le cluster dans son ensemble
K8S Dashboard l'utilise
Tu peux faire appel à l'API pour déclencher des actions automatiques (CICD par exemple )
La ligne de commande permet aussi de configurer le cluster et utilise l'API.
- Controler Manager
Il garde les traces de tout ce qu'il se passe sur le cluster
- Scheduler
Il se charge de répartir la charge des workers
- ETCD
C'est la base de données qui contient la conf et l'état complet du cluster
- Virtual Network
Sa mission est de faire en sorte que l'on voit l'ensemble des worker comme une seule et grosse machine
Dont on a additionné toutes les ressources
Généralement le master est une petite machine et les worker des bêtes de courses pour gérer toute la charge
Mais le master est plus important : sans lui, tu perds la main sur ton cluster
En production, tu peux mettre 2 masters qui se redondent mutuellement
Pods et Services
Le Pod est l'élément unitaire que tu manipules dans K8S
En simplifiant, un Pod est un emplacement pour un conteneur
Donc 1 pod = 1 app
Ex : Ta bdd est une app dans un conteneur donc ça utilise un pod
Chaque pod, grâce au virtual network possède sa propre IP sur le réseau
Un pod est donc un peu comme un serveur auto suffisant
Dans K8S, tu ne configures pas de conteneur.
Tu utilises les pods qui abstraient donc la technologie de conteneur dessous
Les pods sont par nature éphémères. Ils vivent et meurent et sont recréés dynamiquement.
Ce qui fait que leurs IPs changent toujours
Dans une APP, si l'ip de ta bdd change sans que tu saches, y'a plus rien qui marche.
Il y a un composant K8S qui s'appelle Services qui s'occupe de ça pour toi.
Au lieu d'utiliser des IPs il utilise un nom de service pour faire communiquer les pods entre eux
Quand le Pod meurt, le Service reste. Le nouveau Pod est rattaché au Service et tout continue de fonctionner.
Un mot sur la conf
La conf se fait sur le master via l'UI, l'API ou la ligne de commande
On utilise YAML ou JSON
C'est du déclaratif : je dis le résultat que je veux et K8S se débrouille pour l'atteindre
Voilà. Tu as la base pour comprendre K8S et peut-être commencer à te faire un cluster avec 3 Pods.
La newsletter pour ne rien louper
Rejoins les 2500 lecteurs de la newsletter pour obtenir des conseils, des stratégies et des ressources pour développer et monétiser tes compétences Tech.