Points clés
- ✓Les équipes IT consacrent 34 jours/an au troubleshooting Kubernetes
- ✓'5 catégories d''erreurs: images, crashs, scheduling, config, réseau'
- ✓Chaque catégorie possède des commandes de diagnostic spécifiques
Les équipes IT consacrent en moyenne 34 jours de travail par an à résoudre des problèmes Kubernetes, selon Cloud Native Now.
Pour un administrateur système préparant la formation LFS458 Administration Kubernetes, maîtriser le diagnostic des erreurs de déploiement représente une compétence fondamentale. Ce guide fournit une méthodologie structurée pour identifier et corriger les problèmes les plus fréquents : CrashLoopBackOff, ImagePullBackOff, problèmes de scheduling et erreurs de rollout.
TL;DR : Les erreurs de déploiement Kubernetes se classent en 5 catégories principales : problèmes d'images, crashs de pods, échecs de scheduling, erreurs de configuration et problèmes réseau. Chaque catégorie possède des commandes de diagnostic spécifiques et des solutions reproductibles.
Cette compétence est au cœur de la formation LFS458 Administration Kubernetes.
Index des symptômes : identifier rapidement votre problème
| Symptôme | Status kubectl | Cause probable | Section |
|---|---|---|---|
| Pod ne démarre pas | Pending | Ressources insuffisantes | Scheduling |
| Conteneur redémarre en boucle | CrashLoopBackOff | Erreur applicative ou config | CrashLoop |
| Image non trouvée | ImagePullBackOff | Registry ou credentials | Images |
| Pod créé mais inaccessible | Running | Network policies ou Service | Réseau |
| Deployment bloqué | Progressing | Rollout échoué | Rollout |
| Ressources non créées | Error | YAML invalide ou RBAC | Configuration |
À retenir : 60% du temps de gestion des clusters est consacré au troubleshooting selon Spectro Cloud. Une méthodologie structurée réduit ce temps de moitié.
Comment diagnostiquer un pod en CrashLoopBackOff ?
Le status CrashLoopBackOff indique qu'un conteneur démarre, échoue, puis Kubernetes tente de le redémarrer avec un délai croissant (backoff exponentiel).
Symptôme
kubectl get pods
NAME READY STATUS RESTARTS AGE
api-backend-xyz 0/1 CrashLoopBackOff 7 (2m ago) 15m
Étape 1 : Récupérer les logs
# Logs du conteneur actuel (si disponibles)
kubectl logs api-backend-xyz
# Logs du conteneur précédent (après crash)
kubectl logs api-backend-xyz --previous
# Pour un pod multi-conteneurs
kubectl logs api-backend-xyz -c nom-conteneur --previous
Étape 2 : Analyser les events
kubectl describe pod api-backend-xyz | grep -A20 "Events:"
Causes et solutions
| Cause | Indice | Solution |
|---|---|---|
| OOMKilled | Reason: OOMKilled dans describe | Augmentez resources.limits.memory |
| Commande invalide | exec format error ou not found | Vérifiez le champ command: du spec |
| Config manquante | No such file ou FileNotFoundError | Montez le ConfigMap ou Secret requis |
| Dépendance indisponible | Connection refused dans les logs | Vérifiez les services dépendants |
| Liveness probe trop agressive | Liveness probe failed | Ajustez initialDelaySeconds et periodSeconds |
# Exemple : ajuster les limites mémoire
resources:
requests:
memory: "256Mi"
limits:
memory: "512Mi" # Augmenté depuis 256Mi
Pour approfondir ce type de problème, consultez le guide Problèmes de scaling Kubernetes : diagnostic et solutions.
Comment résoudre ImagePullBackOff et ErrImagePull ?
Ces erreurs surviennent quand Kubernetes ne parvient pas à télécharger l'image conteneur spécifiée. Avec 70% des organisations utilisant Kubernetes en environnement cloud et majoritairement Helm pour les déploiements (Orca Security 2025), ce problème reste fréquent.
Diagnostic
# Voir le message d'erreur exact
kubectl describe pod mon-pod | grep -A5 "Warning"
# Vérifier la spécification de l'image
kubectl get pod mon-pod -o jsonpath='{.spec.containers[*].image}'
Causes et solutions
| Message d'erreur | Cause | Solution |
|---|---|---|
manifest unknown | Tag inexistant | Vérifiez le tag sur le registry |
unauthorized | Credentials invalides | Créez un ImagePullSecret |
connection refused | Registry inaccessible | Vérifiez la connectivité réseau |
x509: certificate signed by unknown authority | Certificat non reconnu | Ajoutez le CA au node |
Créer un ImagePullSecret
# Pour un registry privé
kubectl create secret docker-registry mon-registry-secret \
--docker-server=registry.example.com \
--docker-username=user \
--docker-password=password \
--docker-email=user@example.com
# Référencer dans le pod
kubectl patch serviceaccount default \
-p '{"imagePullSecrets": [{"name": "mon-registry-secret"}]}'
À retenir : 82% des utilisateurs de conteneurs exécutent Kubernetes en production (CNCF Annual Survey 2025). Les erreurs d'images représentent la première source de blocage au déploiement initial.
Comment débloquer un pod en status Pending ?
Un pod Pending indique que le scheduler Kubernetes n'a pas trouvé de node approprié pour l'exécuter.
Diagnostic initial
# Identifier la raison du pending
kubectl describe pod mon-pod | grep -A10 "Events:"
# Vérifier les ressources disponibles sur les nodes
kubectl describe nodes | grep -A5 "Allocated resources"
Causes fréquentes
| Event message | Cause | Solution |
|---|---|---|
Insufficient cpu | Pas assez de CPU disponible | Réduisez les requests ou ajoutez des nodes |
Insufficient memory | Pas assez de mémoire | Ajustez les requests mémoire |
node(s) didn't match node selector | nodeSelector non satisfait | Vérifiez les labels des nodes |
0/3 nodes available: 3 node(s) had taint | Taints bloquantes | Ajoutez les tolerations requises |
persistentvolumeclaim not found | PVC inexistant ou pending | Créez le PVC ou vérifiez le StorageClass |
Exemple : ajouter une toleration
spec:
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule"
La maîtrise du scheduling est essentielle pour tout administrateur système préparant la certification Kubernetes CKA. Ces concepts sont couverts dans la formation LFS458 Administration Kubernetes.
Comment diagnostiquer un rollout qui ne progresse pas ?
Quand un Deployment reste bloqué sur Progressing, plusieurs causes sont possibles.
Vérifier l'état du rollout
# Status du rollout
kubectl rollout status deployment/mon-deployment
# Historique des révisions
kubectl rollout history deployment/mon-deployment
# Détail d'une révision spécifique
kubectl rollout history deployment/mon-deployment --revision=2
Identifier les pods problématiques
# Voir tous les ReplicaSets
kubectl get rs -l app=mon-app
# Identifier le RS bloqué
kubectl describe rs mon-deployment-xxxxxxxxx
Actions correctives
| Situation | Commande |
|---|---|
| Rollback vers version précédente | kubectl rollout undo deployment/mon-deployment |
| Rollback vers révision spécifique | kubectl rollout undo deployment/mon-deployment --to-revision=2 |
| Pause du rollout | kubectl rollout pause deployment/mon-deployment |
| Reprise du rollout | kubectl rollout resume deployment/mon-deployment |
# Configurer la stratégie de rollout
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # Pods supplémentaires pendant update
maxUnavailable: 0 # Aucun pod indisponible
progressDeadlineSeconds: 600 # Timeout de 10 minutes
Pour une méthodologie complète de déploiement, suivez le guide Premier déploiement sur Kubernetes en 30 minutes.
Comment résoudre les erreurs de configuration YAML ?
Les erreurs de syntaxe YAML et de schéma Kubernetes bloquent le déploiement avant même la création des ressources.
Valider avant d'appliquer
# Validation syntaxique côté client
kubectl apply -f deployment.yaml --dry-run=client
# Validation côté serveur (vérifie aussi les webhooks)
kubectl apply -f deployment.yaml --dry-run=server
# Voir le YAML généré sans appliquer
kubectl diff -f deployment.yaml
Erreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
error validating data | Champ invalide | Vérifiez l'API reference Kubernetes |
unknown field | Champ non reconnu | Supprimez ou corrigez le nom du champ |
spec.containers: Required | Structure incomplète | Ajoutez les champs obligatoires |
immutable field | Modification interdite | Supprimez et recréez la ressource |
Outils de validation
# kubeval : validation offline
kubeval deployment.yaml
# kubeconform : plus rapide et à jour
kubeconform -strict deployment.yaml
# kube-linter : bonnes pratiques
kube-linter lint deployment.yaml
À retenir : Intégrez la validation YAML dans votre pipeline CI/CD. L'outillage autour de Kubernetes est essentiel pour éviter les erreurs de configuration.
Pour structurer vos fichiers de configuration, consultez la Checklist de mise en production Kubernetes : 15 bonnes pratiques.
Comment debugger les problèmes réseau post-déploiement ?
Un pod Running mais inaccessible indique généralement un problème de configuration réseau.
Diagnostic réseau
# Vérifier que le pod a une IP
kubectl get pod mon-pod -o wide
# Tester la connectivité depuis un pod debug
kubectl run debug --rm -it --image=busybox -- sh
# puis: wget -qO- http://service-name:port
# Vérifier les endpoints du service
kubectl get endpoints mon-service
# Voir les network policies appliquées
kubectl get networkpolicies -A
Checklist de diagnostic
| Vérification | Commande | Résultat attendu |
|---|---|---|
| Pod IP assignée | kubectl get pod -o wide | IP dans la plage du CNI |
| Service sélecteur correct | kubectl describe svc mon-service | Selector match les labels |
| Endpoints présents | kubectl get endpoints | IP des pods backend |
| Port correct | kubectl get svc -o yaml | targetPort = containerPort |
| NetworkPolicy bloquante | kubectl get netpol | Aucune ou règles appropriées |
Exemple de debug avec ephemeral container
# Kubernetes 1.25+
kubectl debug mon-pod -it --image=nicolaka/netshoot -- bash
# Dans le conteneur
curl -v http://localhost:8080/health
netstat -tlnp
nslookup mon-service.namespace.svc.cluster.local
Pour une approche GitOps du troubleshooting, consultez Migrer vers une architecture GitOps pour Kubernetes.
Commandes essentielles pour le diagnostic rapide
Ces commandes constituent la boîte à outils de base pour tout administrateur système Kubernetes.
# Vue d'ensemble rapide
kubectl get all -n namespace
kubectl get events --sort-by='.lastTimestamp' -n namespace
# Diagnostic pod
kubectl logs pod-name --tail=100
kubectl describe pod pod-name
kubectl exec -it pod-name -- /bin/sh
# Diagnostic node
kubectl describe node node-name
kubectl top nodes
kubectl get nodes -o wide
# Diagnostic deployment
kubectl rollout status deployment/name
kubectl get rs -l app=name
Alias recommandés
# Ajouter à ~/.bashrc ou ~/.zshrc
alias k='kubectl'
alias kgp='kubectl get pods'
alias kdp='kubectl describe pod'
alias kl='kubectl logs'
alias kex='kubectl exec -it'
alias kgn='kubectl get nodes'
alias kge='kubectl get events --sort-by=.lastTimestamp'
L'examen CKA évalue directement ces compétences de diagnostic. Comme le confirme un témoignage sur TechiesCamp : "The CKA exam tested practical, useful skills. It wasn't just theory."
Pour une vision complète des pratiques d'administration, explorez la section Tutoriels et guides pratiques Kubernetes.
Prévention : éviter les erreurs récurrentes
La prévention reste plus efficace que le diagnostic. 104 000 personnes ont passé l'examen CKA avec une croissance de 49% par an (CNCF), démontrant l'importance croissante de ces compétences.
Checklist pré-déploiement
- Validez le YAML avec
kubectl apply --dry-run=server - Testez l'image localement avec
docker run - Vérifiez les ressources requests/limits
- Confirmez l'existence des ConfigMaps et Secrets référencés
- Documentez les dépendances inter-services
Bonnes pratiques de monitoring
# Liveness et readiness probes
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
À retenir : La certification CKA valide ces compétences de diagnostic. L'examen dure 2 heures avec un score de passage de 66% (Linux Foundation).
Pour plus de contexte sur la gestion multi-environnements, consultez Gestion multi-environnements Kubernetes : stratégies et bonnes pratiques.
Passez à l'action : formez-vous au diagnostic Kubernetes
La maîtrise du troubleshooting Kubernetes distingue les administrateurs certifiés des utilisateurs occasionnels. Les certifications sont valides 2 ans (Linux Foundation).
Pour les administrateurs système préparant le CKA, la formation LFS458 Administration Kubernetes couvre en 4 jours l'ensemble des compétences de diagnostic évaluées à l'examen.
Pour les développeurs souhaitant comprendre le déploiement de leurs applications, la formation LFD459 Kubernetes pour les développeurs prépare au CKAD en 3 jours.
Pour débuter, la formation Kubernetes les fondamentaux permet de découvrir les concepts essentiels en une journée. Pour approfondir, consultez notre formation Kubernetes administrateur système.
Contactez nos conseillers pour construire votre parcours de certification.