05 Gerer Manipuler Pods Kubernetes
05 Gerer Manipuler Pods Kubernetes
05 Gerer Manipuler Pods Kubernetes
KUBERNETES
Introduction
Dans ce chapitre, nous allons commencer à réellement manipuler notre cluster k8s,
de façon précise, nous nous préoccuperons de la plus petite unité dans Kubernetes, à
Nous avons déjà défini les pods dans cet article, mais permettez-moi tout de même
de vous faire une petite piqûre de rappel. Promis elle ne vous fera pas mal ��.
Création du Pod
cluster Kubernetes avec un nœud master nommé master avec l'ip 192.168.50.10 et
un nœud worker worker-1 et 192.168.50.11 en adresse IP. Nous avons aussi en notre
Information
Si vous n'avez pas ces prérequis, merci de regarder mes articles précédents de
notre pod, puis on exécutera la commande kubectl create qui permet de créer un
Primo, il faut savoir que pour chaque objet Kubernetes que vous souhaiterez créer,
apiVersion : la version de l'API Kubernetes que vous utilisez pour créer cet
objet .
unique l’objet.
objet k8S. Le format est donc différent pour chaque objet Kubernetes.
l'image nginx.
apiVersion: v1
kind: Pod
metadata:
labels:
type: web
name: nginx
spec:
containers:
- image: nginx
name: nginx
apiVersion: v1
kind: Pod
Ici, nous utilisons l'api en version 1 et nous créons un objet Kubernetes de type Pod.
metadata:
labels:
type: web
name: nginx
Dans cette partie, nous désignons un label avec une clé nommée type et sa valeur
web (vous pouvez rajouter n'importe quelle clé et valeur), cette donnée n'est pas
obligatoire mais sachez juste qu'elle peut nous servir plus tard dans d'autres objets
Kubernetes afin de sélectionner et manipuler comme bon nous semble tous les
Dans cette phase, nous indiquons la configuration de notre Pod, plus précisément
Maintenant, nous allons créer notre pod Kubernetes avec la commande suivante :
Résultat :
pod/nginx created
Vérifions maintenant la liste des pods disponibles dans notre cluster Kubernetes :
Résultat :
Bon ok, nous voyons bien qu'il existe seulement un seul pod disponible dans notre
cluster k8s. Cela dit, il serait plus intéressant d'en plus, récupérer l'IP du pod mais
aussi le nœud qui héberge ce pod. Pour cela, nous rajouterons l'option -o wide :
Résultat :
D'après le résultat, notre Pod nginx est situé dans le nœud worker-1 et possède
l'ip 192.168.1.13 .
Il faut savoir que l'ip du Pod n'est accessible qu'à partir du notre nœud sur lequel il
est hébergé (dans notre cas c'est le nœud worker-1 ). Nous verrons dans la partie
dédiée aux Services , à comment rendre notre pod accessible depuis l'extérieur
de notre cluster.
Essayons alors d'accéder à la page web de notre pod nginx depuis notre nœud
Résultat :
<!DOCTYPE html>
<html>
...
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
Nous garderons le même squelette que le fichier yaml précédent, mais nous ferons
apiVersion: v1
kind: Pod
metadata:
name: multic
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
- name: alpine
image: alpine
volumeMounts:
- name: html
mountPath: /html
command: ["/bin/sh", "-c"]
args:
- date >> /html/index.html;
while true; do
sleep 1;
done
volumes:
- name: html
hostPath:
path: /data
type: DirectoryOrCreate
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumeMounts:
- name: html
mountPath: /html
Comme sur Docker les données dans un conteneur sont éphémères, c'est-à-dire
quand un conteneur est supprimé ses données sont détruites avec. Il faut donc
volumes.
Dans cet exemple, un volume nommé html est créé dont nous spécifions sa
configuration plus tard dans le fichier yaml. Ce volume sera monté sur le dossier
apline .
dans le fichier index.html , ce même fichier est utilisé aussi en tant que page web
d'accueil par le conteneur nginx . Ce partage est possible grâce au volume html .
Par la suite nous rajoutons une boucle infinie afin que le conteneur soit en
permanence active, puisqu'il faut toujours un processus qui tourne en premier plan
volumes:
- name: html
hostPath:
path: /data
type: DirectoryOrCreate
Déjà, notre volume est de type hostPath , ce type de volume monte un fichier ou
qui signale que si le chemin indiqué dans la valeur du champ path n'existe pas,
alors un répertoire vide y sera créé , avec le droit en 0755, ayant le même groupe et
Résultat :
pod/multic created
Résultat :
Information
Nous allons supprimer notre pod et le recréer avec la commande suivante, de façon à
Résultat :
On peut remarquer d'après le résultat, que les données du fichier index.html sont
Avertissement
nœuds .
de type hostPath .
Nous verrons dans un futur chapitre une meilleure méthode pour créer nos
volumes.
Gardez à l'esprit, bien que vous puissiez héberger une application mutli-conteneurs
distincts pour chaque application tier. La raison en est simple, vous pouvez scaler
vos conteneurs de manière indépendante et les répartir sur les nœuds du cluster.
Débogage
Voici d'autres commandes utiles, qui peuvent notamment vous aider à debuger vos
pods.
Nous avons premièrement, la commande qui permet de vérifier les logs des
Résultat :
Linux).
Ensuite vous avez la commande qui permet de décrire et de récupérer les informations
Soit :
Une des informations intéressantes que vous pouvez récupérer les différents
s'expose à des changements d'état. Voici par exemple les événements de notre pod
multic :
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 169m default-scheduler Successfully assigned default/multic to worker-1
Normal Pulling 169m kubelet, worker-1 Pulling image "nginx"
Normal Pulled 169m kubelet, worker-1 Successfully pulled image "nginx"
Normal Created 169m kubelet, worker-1 Created container nginx
Normal Started 169m kubelet, worker-1 Started container nginx
Normal Pulling 169m kubelet, worker-1 Pulling image "alpine"
Normal Pulled 169m kubelet, worker-1 Successfully pulled image "alpine"
Normal Created 169m kubelet, worker-1 Created container alpine
Normal Started 169m kubelet, worker-1 Started container alpine
On peut ainsi connaître toutes les étapes supervisées par notre nœud master, qui
ont mené à la création de notre pod. Par exemple on sait qu'il a d'abord décidé sur
la spécification dans le fichier yaml d'une image inexistante dans le Docker Hub,
Vous pouvez aussi exécuter une commande directement dans le conteneur de votre
Comme sur Docker vous pouvez utiliser les options -t et -i afin de vous connecter
Résultat :
/ #
Résultat :
Sans la nécessité de supprimer et recréer votre Pod, vous pouvez appliquer des
changements d'un Pod depuis votre template YAML avec la commande ci-dessous :
Résultat :
pod/multic configured
Résultat :
Conclusion
Dans ce chapitre, nous avons vu comment créer, gérer, supprimer, déboguer nos
Pods. Mais c'est encore insuffisant, car nous devons étudier dans les chapitres
Pods.
# Créer un Pod
kubectl create -f <filename.yaml>
# Supprimer un pod
kubectl delete pods <POD NAME>