Points clés
- ✓CrashLoopBackOff applique un backoff exponentiel de 10s à 5 minutes entre redémarrages
- ✓kubectl logs et kubectl describe sont les commandes essentielles de diagnostic
- ✓Causes principales : erreur applicative, configuration manquante, ou OOMKilled
Le statut CrashLoopBackOff Kubernetes diagnostic solutions représente l'un des problèmes les plus fréquents en production. Ce message indique qu'un conteneur redémarre en boucle après des échecs successifs.
Chaque tentative de redémarrage est espacée exponentiellement (10s, 20s, 40s, jusqu'à 5 minutes), paralysant votre application. Ce guide détaille les causes racines, les commandes de diagnostic et les solutions pour les ingénieurs opérations Cloud Kubernetes, administrateurs système et développeurs Backend.
TL;DR : CrashLoopBackOff signifie que le conteneur crash et redémarre en boucle. Vérifiez les logs (kubectl logs), les événements (kubectl describe), et les ressources (mémoire, CPU). Les causes les plus fréquentes : erreur applicative, configuration manquante, ou OOMKilled.
Cette compétence est au cœur de la formation LFS458 Administration Kubernetes.
Qu'est-ce que CrashLoopBackOff et pourquoi il se produit ?
CrashLoopBackOff est un état de pod Kubernetes indiquant un cycle de crashes répétés. Le kubelet applique un backoff exponentiel entre chaque redémarrage pour éviter de surcharger le système.
Selon le Spectro Cloud State of Kubernetes 2025, les équipes IT passent 34 jours ouvrés par an à résoudre des problèmes Kubernetes. Le CrashLoopBackOff représente une part significative de ces incidents.
Cycle de vie d'un pod en CrashLoopBackOff
Running → Error/Completed → CrashLoopBackOff
↑___________________________|
(redémarrage avec backoff)
| État | Signification |
|---|---|
| Pending | Pod en attente de scheduling |
| Running | Conteneur en cours d'exécution |
| Error | Conteneur terminé avec code erreur |
| Completed | Conteneur terminé avec succès |
| CrashLoopBackOff | Crashes répétés, backoff en cours |
À retenir : CrashLoopBackOff n'est pas une erreur en soi, c'est la conséquence d'échecs répétés du conteneur.
Quelles commandes pour diagnostiquer CrashLoopBackOff Kubernetes ?
Étape 1 : identifier le pod problématique
# Lister les pods avec leur statut
kubectl get pods -A | grep CrashLoopBackOff
# Détail sur un pod spécifique
kubectl get pod my-app -o wide
Étape 2 : consulter les événements
# Événements du pod
kubectl describe pod my-app
# Rechercher les événements pertinents
kubectl get events --field-selector involvedObject.name=my-app
Exemple de sortie :
Events:
Type Reason Age Message
---- ------ ---- -------
Normal Scheduled 10m Successfully assigned default/my-app to node-1
Normal Pulled 9m Container image pulled successfully
Warning BackOff 8m Back-off restarting failed container
Étape 3 : analyser les logs
# Logs du conteneur actuel
kubectl logs my-app
# Logs du conteneur précédent (après crash)
kubectl logs my-app --previous
# Logs en temps réel
kubectl logs my-app -f
# Logs d'un conteneur spécifique (multi-container)
kubectl logs my-app -c sidecar
À retenir : --previous est crucial car il affiche les logs du conteneur crashé, pas du conteneur en cours de redémarrage.
Quelles sont les causes principales de CrashLoopBackOff ?
Cause 1 : erreur applicative
L'application elle-même crash au démarrage. Vérifiez le code de sortie :
kubectl describe pod my-app | grep "Exit Code"
| Exit Code | Signification |
|---|---|
| 0 | Succès (mais si le conteneur doit tourner, problème) |
| 1 | Erreur générale de l'application |
| 137 | SIGKILL (OOMKilled probable) |
| 139 | SIGSEGV (segmentation fault) |
| 143 | SIGTERM (arrêt demandé) |
Solution : corriger le code applicatif ou la configuration de démarrage.
Cause 2 : configuration manquante
ConfigMaps ou Secrets non montés correctement :
# Vérifier les montages
kubectl describe pod my-app | grep -A 10 "Mounts"
# Vérifier l'existence des ConfigMaps
kubectl get configmap my-config
# ❌ Référence à un ConfigMap inexistant
envFrom:
- configMapRef:
name: missing-config
# ✅ Vérifier que le ConfigMap existe
kubectl create configmap my-config --from-literal=KEY=value
Cause 3 : OOMKilled (mémoire insuffisante)
# Vérifier le motif du dernier arrêt
kubectl describe pod my-app | grep -A 5 "Last State"
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Solution : augmenter les limites mémoire ou optimiser l'application.
resources:
requests:
memory: "256Mi"
limits:
memory: "512Mi" # Augmenter si nécessaire
Cause 4 : commande de démarrage incorrecte
# ❌ Commande invalide
command: ["./start.sh"] # Fichier non exécutable ou absent
# ✅ Vérifier l'existence et les permissions
command: ["/bin/sh", "-c", "chmod +x /app/start.sh && /app/start.sh"]
Pour les erreurs de configuration YAML, consultez Résoudre les 10 erreurs de déploiement Kubernetes les plus fréquentes.
Comment debugger avec CrashLoopBackOff Kubernetes diagnostic solutions avancées ?
Méthode 1 : exécuter un shell dans le conteneur
Si le conteneur crash immédiatement, modifiez temporairement la commande :
# Remplacer la commande pour garder le conteneur actif
spec:
containers:
- name: my-app
command: ["/bin/sh", "-c", "sleep infinity"]
# Puis se connecter
kubectl exec -it my-app -- /bin/sh
# Tester manuellement le démarrage
./start.sh
Méthode 2 : conteneur ephemeral (debug)
Kubernetes 1.25+ supporte les conteneurs ephemeral :
kubectl debug my-app -it --image=busybox --target=my-app
Méthode 3 : copier les fichiers du conteneur
# Copier les logs internes
kubectl cp my-app:/var/log/app.log ./app.log
# Copier la configuration
kubectl cp my-app:/app/config.yaml ./config.yaml
Checklist de diagnostic CrashLoopBackOff
| Vérification | Commande | Action si problème |
|---|---|---|
| Logs conteneur | kubectl logs --previous | Corriger l'erreur applicative |
| Événements pod | kubectl describe pod | Identifier la cause |
| Code de sortie | grep "Exit Code" | Voir tableau des codes |
| Mémoire | grep "OOMKilled" | Augmenter limits.memory |
| ConfigMaps | kubectl get cm | Créer les ConfigMaps manquants |
| Secrets | kubectl get secret | Créer les Secrets manquants |
| Image | kubectl get pod -o yaml | Vérifier le tag d'image |
| Permissions | securityContext | Ajuster runAsUser |
À retenir : Commencez toujours par les logs (--previous), puis les événements, puis l'inspection du manifeste YAML.
Solutions par type de problème
Problème de dépendances
L'application dépend d'un service non disponible :
# ✅ Ajouter un initContainer pour attendre les dépendances
initContainers:
- name: wait-for-db
image: busybox:1.36
command: ['sh', '-c', 'until nc -z db-service 5432; do sleep 2; done']
Problème de liveness/readiness probes
Des probes trop agressives peuvent causer des redémarrages :
# ❌ Probe trop agressive
livenessProbe:
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 1
# ✅ Probe tolérante au démarrage lent
livenessProbe:
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 3
Problème de filesystem read-only
# Erreur : l'application écrit dans un filesystem read-only
securityContext:
readOnlyRootFilesystem: true
# ✅ Solution : monter un volume pour les écritures
volumes:
- name: tmp
emptyDir: {}
volumeMounts:
- name: tmp
mountPath: /tmp
Pour approfondir la sécurité, consultez Sécuriser vos workloads Kubernetes : guide des bonnes pratiques.
Automatiser la détection de CrashLoopBackOff
Alerting avec Prometheus
# Règle d'alerte Prometheus
groups:
- name: kubernetes-pods
rules:
- alert: PodCrashLoopBackOff
expr: |
increase(kube_pod_container_status_restarts_total[1h]) > 3
for: 5m
labels:
severity: warning
annotations:
summary: "Pod {{ $labels.pod }} en CrashLoopBackOff"
Selon Grafana Labs, Prometheus et Grafana sont utilisés par 75% des organisations pour le monitoring Kubernetes.
Migration et environnements de test
Avant de déployer en production, testez localement avec les outils décrits dans Installer Kubernetes en local : guide complet avec Minikube, Kind et K3d.
Pour les migrations depuis Docker Compose, consultez Migrer de Docker Compose à Kubernetes : guide de transition.
Ressources pour approfondir le diagnostic
Le CNCF Annual Survey 2025 montre que 82% des utilisateurs de conteneurs exécutent Kubernetes en production. Maîtriser le debugging est essentiel à cette échelle.
Pour une formation structurée sur l'administration de clusters, consultez la page formation Kubernetes administrateur système.
Passez à l'action : créez votre checklist de debugging
Le CrashLoopBackOff Kubernetes diagnostic solutions présenté dans ce guide couvre 90% des cas rencontrés en production. Bookmarkez cette page, créez un alias pour kubectl logs --previous, et intégrez les alertes Prometheus dans votre monitoring.
À retenir : Le debugging Kubernetes est une compétence qui se développe avec la pratique. Chaque incident résolu enrichit votre expertise.
Pour structurer votre montée en compétences :
- Découvrez Kubernetes : Kubernetes, les fondamentaux (1 jour)
- Administrez des clusters : LFS458 Administration Kubernetes (4 jours, prépare au CKA)
- Sécurisez vos workloads : LFS460 Principes Fondamentaux de la Sécurité Kubernetes (4 jours, prépare au CKS)
Explorez les Tutoriels et guides pratiques Kubernetes et le guide complet Déploiement et mise en production Kubernetes pour continuer votre apprentissage.