Introduction
Un Pod est le plus petit objet de charge de travail que vous créez habituellement dans Kubernetes. Il enveloppe un ou plusieurs conteneurs, leur fournit une identité réseau partagée et permet à Kubernetes de les planifier sur un nœud.
Dans ce laboratoire, vous allez créer un Pod unique avec une petite image de conteneur préchargée, attendre que Kubernetes le déclare prêt (Ready), et inspecter l'objet sous plusieurs angles. Vous utiliserez kubectl get, kubectl describe et kubectl get -o yaml afin que les futurs laboratoires sur l'écriture de manifestes reposent sur une compréhension concrète de l'état des objets plutôt que sur du YAML appris par cœur.
Préparer un espace de travail pour le Pod
Dans cette étape, vous allez préparer un espace de noms (namespace) dédié pour votre premier Pod et définir cet espace de noms comme cible par défaut pour vos commandes.
Commencez dans /home/labex/project, l'espace de travail partagé utilisé tout au long de la préparation CKAD.
mkdir -p /home/labex/project
cd /home/labex/project
Le serveur d'API Kubernetes peut avoir besoin d'un court instant pour devenir accessible après le démarrage de la machine virtuelle. Exécutez d'abord cette commande. S'il indique que le serveur n'est pas encore prêt, attendez quelques secondes et réessayez jusqu'à ce que le nœud soit Ready.
kubectl get nodes --request-timeout=5s
La sortie attendue inclut un nœud control-plane prêt :
NAME STATUS ROLES AGE VERSION
labex-v135 Ready control-plane ... v1.35...
Créez un espace de noms nommé ckad-prep-pod. Un espace de noms donne à ce laboratoire sa propre portée d'objet, de sorte que le Pod que vous créez ne sera pas mélangé avec les objets d'autres laboratoires.
kubectl create namespace ckad-prep-pod
La commande doit confirmer la création de l'espace de noms :
namespace/ckad-prep-pod created
Définissez l'espace de noms du contexte actuel sur ckad-prep-pod. Après cela, les commandes liées aux espaces de noms, telles que kubectl get pods, liront par défaut à partir de cet espace de noms.
kubectl config set-context --current --namespace=ckad-prep-pod
La sortie doit confirmer que le contexte actuel a été modifié :
Context "labex-v135" modified.
Vérifiez que l'espace de noms actuel a bien été modifié :
kubectl config view --minify --output 'jsonpath={..namespace}'; echo
Sortie attendue :
ckad-prep-pod
Créer le Pod
Dans cette étape, vous allez créer un Pod unique avec kubectl run et attendre qu'il devienne prêt.
kubectl run peut créer un Pod de base directement depuis la ligne de commande. L'option --image choisit l'image du conteneur, et --restart=Never permet de le conserver en tant que Pod autonome plutôt que de créer un contrôleur de niveau supérieur.
Ce laboratoire utilise registry.k8s.io/pause:3.10.1, une image minuscule déjà présente dans l'environnement Kubernetes préparé. Elle reste en cours d'exécution sans nécessiter de configuration d'application, ce qui vous permet de vous concentrer sur le cycle de vie du Pod plutôt que sur le téléchargement d'images ou le comportement de l'application.
kubectl run sample-pod --image=registry.k8s.io/pause:3.10.1 --restart=Never
La commande doit signaler que Kubernetes a accepté l'objet Pod :
pod/sample-pod created
La création n'est pas synonyme de disponibilité. Kubernetes doit encore planifier le Pod, démarrer le conteneur et marquer le Pod comme prêt. Utilisez kubectl wait pour attendre la condition Ready du Pod.
kubectl wait --for=condition=Ready pod/sample-pod --timeout=60s
Sortie attendue :
pod/sample-pod condition met
Listez maintenant les Pods dans l'espace de noms actuel :
kubectl get pods
Vous devriez voir sample-pod avec 1/1 conteneurs prêts et un statut Running :
NAME READY STATUS RESTARTS AGE
sample-pod 1/1 Running 0 ...
Inspecter le placement du Pod et les événements
Dans cette étape, vous allez inspecter où le Pod est en cours d'exécution et lire la trace des événements que Kubernetes a enregistrée lors de son démarrage.
La vue classique kubectl get pods est compacte. Ajoutez -o wide pour voir les détails de planification tels que le nom du nœud et l'adresse IP du Pod.
kubectl get pod sample-pod -o wide
La sortie attendue inclut le nœud et une adresse IP interne du Pod :
NAME READY STATUS RESTARTS AGE IP NODE
sample-pod 1/1 Running 0 ... ... labex-v135
kubectl describe offre une vue lisible par l'homme de l'objet. Elle inclut les métadonnées, les détails du conteneur, les conditions et les événements récents. Pour les débutants, la section Events est particulièrement utile car elle montre ce que Kubernetes a fait après la création du Pod.
kubectl describe pod sample-pod
Recherchez ce type de lignes dans la sortie :
Name: sample-pod
Namespace: ckad-prep-pod
Status: Running
Containers:
sample-pod:
Image: registry.k8s.io/pause:3.10.1
Conditions:
Type Status
Ready True
Events:
Type Reason Age From Message
Normal Scheduled ... default-scheduler Successfully assigned ...
Normal Pulled ... kubelet Container image "registry.k8s.io/pause:3.10.1" already present ...
Normal Created ... kubelet Created container ...
Normal Started ... kubelet Started container ...
L'âge exact des événements et les messages peuvent varier, mais l'idée fondamentale reste stable : Kubernetes planifie le Pod, prépare l'image, crée le conteneur et le démarre.
Lire les champs de l'objet Pod
Dans cette étape, vous allez inspecter certains champs du Pod sous forme YAML et les relier aux concepts d'objets vus dans le laboratoire précédent.
kubectl get peut afficher un objet au format YAML avec -o yaml. Il s'agit de la représentation réelle de l'objet renvoyée par le serveur d'API, incluant les champs ajoutés par Kubernetes après la création. La commande ci-dessous utilise sed -n '1,80p' pour n'afficher que les 80 premières lignes, afin que la sortie reste lisible.
kubectl get pod sample-pod -o yaml | sed -n '1,80p'
Dans la sortie, recherchez les champs de haut niveau et l'image du conteneur :
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
namespace: ckad-prep-pod
spec:
containers:
- image: registry.k8s.io/pause:3.10.1
name: sample-pod
...
status:
...
Vous n'avez pas besoin de mémoriser tous les champs générés. Pour l'instant, concentrez-vous sur la structure de base : apiVersion, kind, metadata, spec et status. Vous écrirez vous-même les parties importantes dans le prochain laboratoire.
Utilisez une requête JSONPath ciblée pour n'afficher que le champ de l'image. Les expressions JSONPath sont utiles lorsque vous avez besoin d'une valeur précise à partir d'un objet volumineux.
kubectl get pod sample-pod -o jsonpath='{.spec.containers[0].image}'; echo
Sortie attendue :
registry.k8s.io/pause:3.10.1
Résumé
Vous avez créé un Pod autonome, attendu que Kubernetes le marque comme prêt, inspecté les détails de planification et les événements, et lu les champs clés de l'objet à partir de la sortie YAML et JSONPath. Cela vous donne un Pod concret pour faire le lien avec le prochain laboratoire, où vous rédigerez un manifeste de Pod au lieu de créer l'objet directement avec kubectl run.


