01La méthode en trois commandes
kubectl get pods # 1. quel pod va mal, dans quel état ? kubectl describe pod <pod> # 2. pourquoi ? lire la section Events, en bas kubectl logs <pod> --previous # 3. qu'a dit l'application avant de tomber ?
Dans neuf cas sur dix, la réponse est dans les dernières lignes de
describe. Prenez le temps de les lire en entier avant de chercher ailleurs : le
message est souvent plus précis qu'on ne le croit.
02Pod en Pending
Le pod attend une place qu'il ne trouve pas. Les Events disent pourquoi :
exceeded quota: le quota du projet est atteint. Réduisez lesrequests, supprimez un ancien déploiement, ou demandez une extension.Insufficient memory: aucun serveur n'a assez de mémoire libre pour la demande. Une demande de 8 Gi pour un site vitrine mérite d'être revue.unbound PersistentVolumeClaim: le volume n'existe pas encore, ou son nom est mal écrit dans le Deployment.
03ImagePullBackOff
Le serveur n'arrive pas à télécharger l'image. Trois causes, dans l'ordre de probabilité :
une faute de frappe dans le nom ou le tag, une image privée sans imagePullSecrets
(chapitre 04), ou un tag qui n'a jamais été poussé. Le message des Events cite l'erreur exacte
du registre : not found, unauthorized ou
manifest unknown.
04CrashLoopBackOff
Le jour sans fin des pods : l'application démarre, plante, redémarre, plante, avec un délai
qui s'allonge à chaque tour. Les journaux du conteneur précédent (--previous)
donnent la raison. Les grands classiques sur notre plateforme :
- Un port inférieur à 1024 avec un utilisateur non root :
bind: permission denied. Faites écouter l'application sur 8080 et laissez le Service traduire vers 80. Le refus est poli, mais ferme. - Une écriture dans le système de fichiers de l'image refusée :
read-only file systemoupermission denied. Montez un volumeemptyDirsur le dossier concerné (/tmp, cache). - Une variable manquante : l'application s'arrête faute de configuration. Vérifiez la ConfigMap et le Secret.
OOMKilleddansdescribe: la limite de mémoire est trop basse.
05404, 502, 503 et certificat
dig +short boutique-mon-equipe.demo.k8s.exemple.fr # 203.0.113.47 attendu kubectl get ingress # le bon nom, la classe traefik ? kubectl get endpoints boutique # des adresses de pods ? kubectl get certificate # READY=True ?
| Symptôme | Cause probable |
|---|---|
| Le nom ne répond pas du tout | DNS pas encore créé : patientez deux minutes, ou nom déjà pris par une autre application |
| Erreur 404 de Traefik | host de l'Ingress différent du nom appelé, ou ingressClassName absent |
| Erreur 502 | Mauvais targetPort : le Service envoie vers un port où rien n'écoute |
| Erreur 503 | Aucun pod prêt : la readinessProbe échoue, ou le sélecteur du Service ne correspond à aucun pod |
| Certificat invalide ou autosigné | Certificat en cours d'émission : kubectl describe certificate |
06Refus de sécurité
Deux messages se ressemblent et n'ont pas la même gravité :
Warning: would violate PodSecurity "restricted": un avertissement. Le pod est créé, mais il pourrait être mieux protégé. Le manifeste du chapitre 02 n'en produit aucun ; inspirez-vous de ses blocssecurityContext.Error from server (Forbidden): un vrai refus. Soit le pod demande un privilège interdit (privileged,hostPath,hostNetwork), et le message nomme le champ en cause ; soit l'action sort de vos droits, par exemple dans le namespace d'un autre.
07Le tableau récapitulatif
| État ou erreur | Première commande | Cause la plus fréquente |
|---|---|---|
Pending | kubectl describe pod | Quota atteint |
ImagePullBackOff | kubectl describe pod | Nom d'image ou accès au registre |
CrashLoopBackOff | kubectl logs --previous | Port privilégié ou variable manquante |
OOMKilled | kubectl describe pod | limits.memory trop basse |
Running mais 0/1 prêt | kubectl describe pod | readinessProbe sur le mauvais chemin ou port |
| 404, 502, 503 | kubectl get ingress,endpoints | Nom, port ou sélecteur |
Forbidden | Lire le message | Privilège interdit ou hors de vos droits |
Toujours bloqué ? Envoyez à l'administrateur la sortie de kubectl describe et
les journaux, plutôt qu'un « ça marche pas » : vous gagnerez tous les deux une demi-heure.
Vous codez, nous veillons sur le cluster
Cette plateforme existe pour que vos développeurs déploient sans attendre personne et sans ticket. Nous l'hébergeons et l'exploitons pour vous : réseau, certificats, sauvegardes, mises à jour et surveillance des attaques. Il vous reste le plus intéressant.