Les différents objets et composants de Kubernetes

Dans cet article, nous allons découvrir de nouvelles terminologies Kubernetes notamment les différents objets et composants k8s, afin de partir sur des bases solides pour les futurs chapitres.

Introduction

Lorsque vous commencez à travailler avec Kubernetes (K8), de nombreuses nouvelles terminologies sont à apprendre, à comprendre et à mémoriser. Ne serait-il pas formidable qu'au lieu d'avoir à chercher une définition de chaque terminologie, que vous puissiez accéder à l'ensemble de la terminologie clé de Kubernetes dans une seule liste ?

Devinez quoi ? C'est exactement le but de cet article ! Ce chapitre contiendra des explications sur tous les objets et composants nécessaires à la compréhension de Kubernetes avant de s'attaquer plus tard, dans les chapitres postérieurs à la partie pratique.

Les objets Kubernetes

Kubernetes a pour objectif principal de dissimuler la complexité de la gestion d’un parc de conteneurs, et pour cela, différents objets existent pour vous faciliter la vie, dont notamment :

  • Node : Un node ("nœud" en fr) est une machine de travail du cluster Kubernetes. Ce sont des unités de travail qui peuvent être physiques, virtuelles mais aussi des instances cloud.
  • Pod : Il s'agit de l'unité la plus petite de K8s, un pod encapsule le ou les conteneur(s) formant votre application conteneurisée partageant ainsi la même stack réseau (chaque pod se voit attribuer une adresse IP unique) et le même stockage, plus précisément un volume partagé (tous les conteneurs du pod peuvent accéder aux volumes partagés, ce qui permet à ces conteneurs de partager plus facilement des données).
  • Replicas : c'est le nombre d'instances d'un Pod ("réplique" en fr)
  • ReplicaSet : s'assure que les réplicas spécifiés sont actifs
  • Deployment : défini l'état désiré et fournit des mises à jour déclaratives de vos Pods et ReplicaSets.
  • Service : Un service peut être défini comme un ensemble logique de pods exposés en tant que service réseau. C'est un niveau d'abstraction au-dessus du pod, qui fournit une adresse IP et un nom DNS unique pour un ensemble de pods. Avec les Services, il est très facile de gérer la configuration de Load Balancing (équilibreur de charge) permettant ainsi aux pods de scaler plus facilement.
  • Endpoint : Représente l'adresse IP et le port d'un service, il est automatiquement créé lors de la création d'un service avec les pods correspondants.

Les composants des nodes

Kubernetes suit l’architecture maître-esclave, le maître plus communément appelé master existe principalement pour gérer votre cluster Kubernetes. . Les esclaves sont quant à eux plus connus sous le nom de workers (on les appellent aussi minions ) et ne sont là que pour fournir de la capacité et n'ont pas le pouvoir d'ordonner à une autre node ce qu'il peut ou ne peut pas faire. Les composants clés du master et worker sont définis dans la section suivante.

Les composants du Master

Sur un node de type master, nous aurons les composants suivants :

  • kube-apiserver : point d'entrée exposant l'API HTTP Rest de k8s depuis le maître du cluster Kubernetes. Différents outils et bibliothèques peuvent facilement communiquer avec l'API.
  • kube-scheduler : Il est responsable de la répartition et l'utilisation de la charge de travail sur les nœuds du cluster selon les ressources nécessaires et celles disponibles.
  • kube-controller-manager : ce composant est responsable de la plupart des collecteurs qui récupèrent des informations du cluster tout en effectuant des actions de correctives en cas de besoin, en apportant des modifications pour amener l'état actuel du serveur à l'état souhaité. Il est composé de plusieurs contrôleurs, on peut par exemple retrouver un contrôleur de réplication qui va s'assurer que vous avez le nombre désiré de répliques sur vos pods, mais aussi d'autres contrôleurs clés comme , le contrôleur de Endpoints, le contrôleur d’espace de noms et le contrôleur de compte de service.
  • cloud-controller-manager : effectue les mêmes actions que le kube-controller-manager mais pour des fournisseurs de cloud sous-jacents (AWS, Azure, Google Cloud Platform, etc ...).
  • etcd : il stocke les informations de configuration pouvant être utilisées par chacun des nœuds du cluster. Ces informations sont conservées sous forme de clé et valeurs à haute disponibilité (le projet est téléchargeable ici)

Les composants du Workers

Sur chaque worker, nous aurons les composants suivants :

  • kubelet : Il s’agit d’un agent qui s'exécute dans chaque nœud chargé de relayer les informations au Master. Il interagit avec la base de données etcd du Master pour récupérer des informations afin de connaître les tâches à effectuer. Il assume la responsabilité de maintenir en bon état de fonctionnement les conteneurs d'un pod et s'assure qu'ils tournent conformément à la spécification. Il ne gère pas les conteneurs qui n'ont pas été créés par Kubernetes. Il communique avec le Master et redémarre le conteneur défaillant en cas de crash.
  • kube-proxy : il active l'abstraction réseau du Service Kubernetes en maintenant les règles du réseau et permet l'exposition des services vers l'extérieur.
  • Environnement d'exécution de conteneurs : Il faut vous aussi une solution d'exécution d'applications conteneurisées, vous pouvez utiliser soit le moteur Docker mais Kubernetes prend également en charge l'utilisation de rkt comme moteur d'exécution du conteneur (que nous verrons pas dans ce cours).

Si on reprend tous les composants vus précédemment, nous aurons alors un schéma d'architecture du cluster Kubernetes ressemblant à ceci :

Architecture d'un cluster Kubernetes avec ses différents composants

Détails des différents composants du nœud Master et worker

Information

Pour de la haute disponibilité, il faut au minimum deux répliques du Master dans des zones de disponibilités différentes.

Communication avec le cluster

Pour communiquer avec le cluster Kubernetes, on peut utiliser le binaire kubectl, ou une interface web de management nommé Dashboard.

kubeclt (ligne de commande)

L'outil en ligne de commande Kubernetes, kubectl, vous permet d'exécuter des commandes sur les clusters Kubernetes afin de créer et gérer des objets k8s et interagir avec l'API Kubernetes. Vous pouvez utiliser kubectl pour déployer des applications, inspecter et gérer les ressources du cluster et afficher les logs. Nous aurons l'occasion d'utiliser cet outil dans les chapitres suivants.

Dashboard (interface web)

Dashboard est l'interface utilisateur Web officielle de Kubernetes. Il fournit une vue d'ensemble des applications en cours d'exécution sur votre cluster Kubernetes. Il permet aux administrateurs de surveiller et gérer les opérations de leurs clusters Kubernetes, dépanner les applications conteneurisées et gérer les ressources du cluster.

Conclusion

J'espère que vous vous êtes bien familiarisé avec la terminologie Kubernetes, qu'il convient d'utiliser afin d'utiliser le même lexique que ça soit pour comprendre aisément les chapitres suivants ou pour une communication plus agréable avec votre équipe technique 😎. Dans le chapitre suivant, nous verrons comment mettre en place notre premier cluster kubernetes avec l'outil Minikube.

Espace commentaire

Écrire un commentaire

Rejoignez la discussion

Vous devez être connecté pour poster un message.

23 commentaires

ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

De rien. N'oublie pas que pour la haute disponibilité, il faut au moins 3 Masters dans des zones différentes, c'est la règle d'or.

04/08/2019 à 05:56
weber-patricia
Membre Actif
Avatar de weber-patricia
weber-patricia
Membre Actif

Merci pour l'article, c'est bien plus clair maintenant pour la partie Master/Worker.

04/08/2019 à 00:26
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Oui, ton node va passer en NotReady. Vérifie que le certificat client sur le node n'a pas expiré.

03/08/2019 à 16:30
pires-chantal
Membre Actif
Avatar de pires-chantal
pires-chantal
Membre Actif

Le kubelet a perdu le contact avec le master. C'est critique ?

03/08/2019 à 10:25
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Pour débuter, change le type de ton service en LoadBalancer ou utilise un Ingress. Voici un exemple pour un Service simple :

apiVersion: v1
kind: Service
metadata:
  name: my-app
spec:
  type: ClusterIP
  selector:
    app: web
  ports:
    - port: 80
03/08/2019 à 04:12
alain-laurent
Membre Actif
Avatar de alain-laurent
alain-laurent
Membre Actif

Comment on fait pour exposer un service vers l'extérieur proprement ?

02/08/2019 à 21:56
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Oui, regarde du côté des nodeSelector ou des nodeAffinity dans ton manifeste YAML.

02/08/2019 à 17:01
leclercq-alice
Membre Actif
Avatar de leclercq-alice
leclercq-alice
Membre Actif

Le kube-scheduler peut-il forcer le placement sur un node spécifique ?

02/08/2019 à 11:50
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Utilise kubectl describe pod <nom-du-pod>. Regarde la section Events en bas pour les détails de l'erreur.

02/08/2019 à 04:47
arnaude13
Membre Actif
Avatar de arnaude13
arnaude13
Membre Actif

J'ai un pod qui reste en CrashLoopBackOff. Comment savoir pourquoi il redémarre en boucle ?

01/08/2019 à 21:43
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Non, c'est inutile en local. Il ne sert que si tu as besoin d'interagir avec les API de ton fournisseur cloud pour créer des LoadBalancers par exemple.

01/08/2019 à 16:36
augustin85
Membre Actif
Avatar de augustin85
augustin85
Membre Actif

Est-ce que le cloud-controller-manager est obligatoire si je suis en local avec VirtualBox ?

01/08/2019 à 11:23
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Exactement. Vérifie aussi tes logs avec journalctl -u kube-proxy. Souvent c'est un problème de droits sur le fichier de config.

01/08/2019 à 07:06
sabine13
Membre Actif
Avatar de sabine13
sabine13
Membre Actif

Même problème ici, vérifie si ton cni est bien installé. Sans ça, le proxy ne peut pas monter les règles iptables.

01/08/2019 à 00:39
andree09
Membre Actif
Avatar de andree09
andree09
Membre Actif

J'ai installé mon cluster sur une VM mais le kube-proxy ne se lance pas. Des pistes ?

31/07/2019 à 20:05
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Attention, à ne jamais faire en prod sans sauvegarde. Mais pour purger les vieux snapshots, utilise etcdctl :

etcdctl snapshot restore /var/lib/etcd/member/snap/db
etcdctl compact <revision>
31/07/2019 à 13:13
ecarlier
Membre Actif
Avatar de ecarlier
ecarlier
Membre Actif

Mon etcd est en PLS. Il me dit que le disque est plein. Je fais quoi pour nettoyer ?

31/07/2019 à 08:28
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Le ReplicaSet gère juste le nombre de répliques. Le Deployment, lui, gère les mises à jour déclaratives (rolling update). Utilise toujours un Deployment.

31/07/2019 à 01:32
andre-alphonse
Membre Actif
Avatar de andre-alphonse
andre-alphonse
Membre Actif

C'est quoi la différence concrète entre un Deployment et un ReplicaSet ? J'ai l'impression que ça fait la même chose.

30/07/2019 à 20:44
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Fais un kubectl get endpoints. Si la liste est vide, ton sélecteur de service ne pointe vers aucun pod. Vérifie bien tes labels.

30/07/2019 à 14:55
julien01
Membre Actif
Avatar de julien01
julien01
Membre Actif

J'ai un souci avec mon Service, les pods ne sont pas accessibles. Comment vérifier les Endpoint associés ?

30/07/2019 à 10:05
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Carrément. Kubernetes s'en fout de la couche de virtualisation. Tant que le kubelet communique bien avec le master, tu peux hybrider ton cluster sans souci.

30/07/2019 à 05:52
gilles-descamps
Membre Actif Secouriste
Avatar de gilles-descamps
gilles-descamps
Membre Actif Secouriste

Super article pour débuter. J'ai une question sur les Node. Est-ce qu'on peut mélanger des instances physiques et virtuelles dans un même cluster ?

29/07/2019 à 23:43

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire