troubleshooting8 min de lecture

Résoudre les erreurs de déploiement Kubernetes : guide de diagnostic

SFEIR Institute

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ômeStatus kubectlCause probableSection
Pod ne démarre pasPendingRessources insuffisantesScheduling
Conteneur redémarre en boucleCrashLoopBackOffErreur applicative ou configCrashLoop
Image non trouvéeImagePullBackOffRegistry ou credentialsImages
Pod créé mais inaccessibleRunningNetwork policies ou ServiceRéseau
Deployment bloquéProgressingRollout échouéRollout
Ressources non crééesErrorYAML invalide ou RBACConfiguration
À 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

CauseIndiceSolution
OOMKilledReason: OOMKilled dans describeAugmentez resources.limits.memory
Commande invalideexec format error ou not foundVérifiez le champ command: du spec
Config manquanteNo such file ou FileNotFoundErrorMontez le ConfigMap ou Secret requis
Dépendance indisponibleConnection refused dans les logsVérifiez les services dépendants
Liveness probe trop agressiveLiveness probe failedAjustez 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'erreurCauseSolution
manifest unknownTag inexistantVérifiez le tag sur le registry
unauthorizedCredentials invalidesCréez un ImagePullSecret
connection refusedRegistry inaccessibleVérifiez la connectivité réseau
x509: certificate signed by unknown authorityCertificat non reconnuAjoutez 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 messageCauseSolution
Insufficient cpuPas assez de CPU disponibleRéduisez les requests ou ajoutez des nodes
Insufficient memoryPas assez de mémoireAjustez les requests mémoire
node(s) didn't match node selectornodeSelector non satisfaitVérifiez les labels des nodes
0/3 nodes available: 3 node(s) had taintTaints bloquantesAjoutez les tolerations requises
persistentvolumeclaim not foundPVC inexistant ou pendingCré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

SituationCommande
Rollback vers version précédentekubectl rollout undo deployment/mon-deployment
Rollback vers révision spécifiquekubectl rollout undo deployment/mon-deployment --to-revision=2
Pause du rolloutkubectl rollout pause deployment/mon-deployment
Reprise du rolloutkubectl 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

ErreurCauseSolution
error validating dataChamp invalideVérifiez l'API reference Kubernetes
unknown fieldChamp non reconnuSupprimez ou corrigez le nom du champ
spec.containers: RequiredStructure incomplèteAjoutez les champs obligatoires
immutable fieldModification interditeSupprimez 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érificationCommandeRésultat attendu
Pod IP assignéekubectl get pod -o wideIP dans la plage du CNI
Service sélecteur correctkubectl describe svc mon-serviceSelector match les labels
Endpoints présentskubectl get endpointsIP des pods backend
Port correctkubectl get svc -o yamltargetPort = containerPort
NetworkPolicy bloquantekubectl get netpolAucune 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

  1. Validez le YAML avec kubectl apply --dry-run=server
  2. Testez l'image localement avec docker run
  3. Vérifiez les ressources requests/limits
  4. Confirmez l'existence des ConfigMaps et Secrets référencés
  5. 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.