Comprendre les Pods

KubernetesBeginner
Pratiquer maintenant

Introduction

Dans ce lab, vous allez découvrir la plus petite unité déployable dans Kubernetes : le Pod.

Un Pod est l’objet que Kubernetes planifie sur un nœud. En général, vous n’exécutez pas directement un conteneur dans Kubernetes ; les conteneurs sont placés à l’intérieur de Pods.

Un Pod peut contenir un ou plusieurs conteneurs qui partagent le réseau et le contexte de stockage. La plupart des exemples destinés aux débutants utilisent un seul conteneur, mais cette conception basée sur un environnement partagé est le concept important à retenir.

Vous allez apprendre à :

  • définir un Pod à l’aide d’un fichier de configuration YAML (le modèle) ;
  • créer le Pod dans le cluster avec kubectl ;
  • vérifier l’état du Pod pour vous assurer qu’il est en cours d’exécution ;
  • examiner la configuration détaillée et l’historique du Pod.

À la fin de ce lab, un véritable serveur web exécuté dans un Pod fonctionnera dans votre cluster.

Définir le Pod

Dans cette étape, vous allez définir votre premier Pod. Kubernetes utilise le langage YAML. Un fichier YAML ressemble à un modèle ou à une recette : il décrit exactement l’apparence souhaitée de votre application.

Un Pod est le plus petit objet planifié par Kubernetes, mais ce n’est pas la même chose qu’un conteneur. Un conteneur correspond au processus d’application en cours d’exécution et à son image de système de fichiers. Un Pod est l’enveloppe Kubernetes qui contient un ou plusieurs conteneurs. Cette enveloppe leur fournit une identité réseau partagée, un cycle de vie commun et, éventuellement, un stockage partagé.

La définition d’un Pod nécessite quatre éléments principaux :

  • apiVersion : la version du langage Kubernetes utilisée ;
  • kind : le type d’objet que vous créez (dans ce cas, un Pod) ;
  • metadata : les informations qui identifient l’objet, comme son nom et ses labels ;
  • spec : la « spécification », c’est-à-dire le contenu principal de la recette. Elle décrit les conteneurs à exécuter.

Vous allez créer un fichier nommé nginx-pod.yaml. Ce fichier définira un Pod nommé nginx-pod, qui exécutera un seul conteneur utilisant l’image nginx (un serveur web très répandu).

Créez le fichier avec l’éditeur de texte nano :

nano nginx-pod.yaml

Copiez-collez le contenu suivant dans le fichier. Lisez-le attentivement pour repérer les quatre sections présentées :

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - containerPort: 80

Pour enregistrer le fichier et quitter nano : appuyez sur Ctrl+X, puis saisissez Y pour confirmer l’enregistrement et appuyez sur Enter pour écrire le contenu dans le fichier.

Vous venez d’écrire votre premier modèle Kubernetes ! Il indique à Kubernetes : « Je veux un Pod nommé nginx-pod. À l’intérieur, veuillez exécuter un conteneur utilisant l’image nginx. »

Créer le Pod

Maintenant que vous disposez de votre modèle (nginx-pod.yaml), vous allez le transmettre à Kubernetes.

Pour cela, utilisez la commande kubectl apply. Cette commande indique à Kubernetes : « Voici l’état souhaité. Veuillez le mettre en place. »

L’expression état souhaité désigne l’une des idées centrales de Kubernetes. Vous n’indiquez pas au système chaque étape technique à effectuer. Vous déclarez plutôt le résultat final souhaité, puis les contrôleurs Kubernetes continuent à agir jusqu’à ce que la réalité corresponde à cette déclaration.

Exécutez la commande suivante pour créer votre Pod :

kubectl apply -f nginx-pod.yaml

Vous devriez voir un message de confirmation :

pod/nginx-pod created

Lorsque vous avez exécuté cette commande, vous avez envoyé le modèle au serveur d’API Kubernetes (le Control Plane). Le Scheduler a ensuite trouvé un nœud adapté à votre Pod, puis le Kubelet de ce nœud a commencé à télécharger l’image Nginx pour l’exécuter.

Vérifier l’état

Dans cette étape, vous allez vérifier la progression de votre nouveau Pod. La création d’un Pod n’est pas instantanée : le téléchargement de l’image du conteneur et le démarrage de l’application prennent un certain temps.

Voici un point important à retenir : kubectl apply renvoie généralement rapidement, car la commande se contente de soumettre la demande. Le travail réel s’effectue de manière asynchrone dans le cluster. C’est pourquoi la vérification de l’état constitue une étape normale, et non le signe d’un problème.

Pour afficher l’état de vos Pods, utilisez la commande get :

kubectl get pods

Un tableau listant vos Pods s’affiche. Consultez la colonne STATUS :

NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          15s
  • STATUS : il s’agit du champ le plus important.

    • ContainerCreating : le système télécharge encore l’image ou démarre le conteneur.
    • Running : réussite ! Le Pod est actif et fonctionne correctement.
    • Pending : le cluster cherche encore où placer le Pod.
    • Error ou CrashLoopBackOff : un problème s’est produit (par exemple, l’application s’est arrêtée brutalement).
  • READY : la valeur 1/1 signifie que 1 conteneur sur 1 défini dans le Pod est prêt à recevoir du trafic.

Si vous voyez ContainerCreating, patientez quelques secondes, puis exécutez de nouveau kubectl get pods. Lorsque l’état passe à Running, votre serveur web Nginx est actif.

Examiner les détails

Dans cette étape, vous allez apprendre à « regarder sous le capot ». La commande get fournit un résumé, mais vous devez parfois savoir exactement ce qui se passe, notamment lorsqu’un problème survient.

La commande describe fournit un rapport détaillé sur votre ressource Kubernetes.

Pour les débutants, il est utile de considérer kubectl get et kubectl describe comme deux niveaux d’observation différents. get répond à la question « Quel est l’état général actuel ? », tandis que describe répond à la question « Que s’est-il passé pour en arriver là ? ». Cet historique des événements constitue souvent le moyen le plus rapide d’identifier la cause racine.

Exécutez la commande suivante pour examiner nginx-pod :

kubectl describe pod nginx-pod

Cette commande affiche une grande quantité d’informations. Faites défiler la sortie jusqu’en bas et recherchez la section Events. Elle présente dans l’ordre chronologique le démarrage de votre Pod :

Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  ...   default-scheduler  Successfully assigned default/nginx-pod...
  Normal  Pulling    ...   kubelet            Pulling image "nginx:latest"
  Normal  Pulled     ...   kubelet            Successfully pulled image "nginx:latest"...
  Normal  Created    ...   kubelet            Created container nginx
  Normal  Started    ...   kubelet            Started container nginx

Ce journal des événements est votre premier point de contrôle pour le débogage. Si un Pod reste bloqué dans l’état Pending ou Error, la section Events indique généralement pourquoi (par exemple, « Insuficient CPU » ou ImagePullBackOff).

Vous avez maintenant créé, vérifié et inspecté votre premier Pod Kubernetes !

Résumé

Dans ce lab, vous avez maîtrisé le concept de Pod, élément fondamental de Kubernetes.

Vous avez réussi à :

  1. rédiger un modèle YAML pour un Pod Nginx ;
  2. le déployer dans le cluster avec kubectl apply ;
  3. vérifier qu’il était dans l’état Running avec kubectl get ;
  4. examiner en détail son historique de démarrage avec kubectl describe.

La compréhension des Pods est essentielle, car tous les autres concepts Kubernetes — Deployments, Services et StatefulSets — concernent finalement la gestion de ces Pods. Vous êtes maintenant prêt à aborder des sujets plus avancés !