Simuler et diagnostiquer les échecs de mise à jour
Dans cette étape, vous apprendrez à diagnostiquer les éventuels échecs de mise à jour de déploiement en simulant une mise à jour d'image problématique et en utilisant les outils de diagnostic de Kubernetes.
Tout d'abord, accédez au répertoire du projet :
cd ~/project/k8s-manifests
Créez un manifeste de déploiement avec une image invalide :
nano problematic-deployment.yaml
Ajoutez le contenu suivant :
apiVersion: apps/v1
kind: Deployment
metadata:
name: troubleshoot-app
labels:
app: troubleshoot
spec:
replicas: 3
selector:
matchLabels:
app: troubleshoot
template:
metadata:
labels:
app: troubleshoot
spec:
containers:
- name: nginx
image: nginx:non-existent-tag
ports:
- containerPort: 80
Appliquez le déploiement problématique :
kubectl apply -f problematic-deployment.yaml
Exemple de sortie :
deployment.apps/troubleshoot-app created
Vérifiez l'état du déploiement :
kubectl rollout status deployment troubleshoot-app
Exemple de sortie :
Waiting for deployment "troubleshoot-app" to roll out...
Appuyez sur Ctrl+C
pour quitter l'affichage de l'état du déploiement.
Vérifiez les événements et l'état des pods :
kubectl get pods -l app=troubleshoot
Exemple de sortie :
NAME READY STATUS RESTARTS AGE
troubleshoot-app-6b8986c555-gcjj9 0/1 ImagePullBackOff 0 2m56s
troubleshoot-app-6b8986c555-p29dp 0/1 ImagePullBackOff 0 2m56s
troubleshoot-app-6b8986c555-vpv5q 0/1 ImagePullBackOff 0 2m56s
Examinez les détails et les journaux des pods :
## Remplacez 'xxx-yyy' par le nom réel de votre pod
POD_NAME=$(kubectl get pods -l app=troubleshoot -o jsonpath='{.items[0].metadata.name}')
kubectl describe pod $POD_NAME
kubectl logs $POD_NAME
Vous verrez l'état du pod et les journaux indiquant l'échec du téléchargement de l'image.
Failed to pull image "nginx:non-existent-tag"
Résolvez le problème en corrigeant l'image :
nano problematic-deployment.yaml
Mettez à jour l'image avec une étiquette (tag) valide :
image: nginx:1.24.0-alpine
Réappliquez le déploiement corrigé :
kubectl apply -f problematic-deployment.yaml
Vérifiez à nouveau l'état des pods :
kubectl get pods -l app=troubleshoot
Exemple de sortie :
NAME READY STATUS RESTARTS AGE
troubleshoot-app-5dc9b58d57-bvqbr 1/1 Running 0 5s
troubleshoot-app-5dc9b58d57-tdksb 1/1 Running 0 8s
troubleshoot-app-5dc9b58d57-xdq5n 1/1 Running 0 6s
Points clés pour le diagnostic des échecs :
- Utilisez
kubectl describe
pour afficher les événements de déploiement et de pod.
- Vérifiez l'état des pods pour détecter un
ImagePullBackOff
ou d'autres états d'erreur.
- Examinez les journaux des pods pour obtenir des informations d'erreur détaillées.
- Vérifiez la disponibilité de l'image et la validité de l'étiquette (tag).