Guide de Debug des Objets Kubernetes : Type par Type
Kubernetes utilise divers types d'objets pour orchestrer les applications et les infrastructures. Chaque type d'objet a ses propres caractéristiques et ses propres méthodes pour diagnostiquer les problèmes. Voici une série de lignes directrices pour déboguer les types d'objets Kubernetes les plus courants :
Pods
Les pods sont les unités de base de déploiement dans Kubernetes. Chaque pod contient un ou plusieurs conteneurs.
Étapes de debug
Vérifier l'état du pod :
shkubectl get podsSi un pod est en échec (Failed, CrashLoopBackOff, etc.), examiner les logs et événements.
Vérifier les logs :
shkubectl logs <pod_name>- Pour plusieurs conteneurs dans un pod :
shkubectl logs <pod_name> -c <container_name>Inspecter la description détaillée :
shkubectl describe pod <pod_name>Rechercher des événements inhabituels, des erreurs d'ordonnancement, ou des raisons de redémarrage.
Accéder au pod : Pour des tests internes, ouvrir une session shell dans le conteneur :
shkubectl exec -it <pod_name> -- /bin/sh
Services
Les services Kubernetes exposent un groupe de pods via une adresse IP stable.
Étapes de debug
- Vérifier l'état du service :
kubectl get svc- Décrire le service pour inspecter les sélections de pod :
kubectl describe svc <service_name>Vérifier l'exposition et les ports : Assurez-vous que les ports et les sélecteurs correspondent correctement aux pods.
Vérifier les endpoints : S'assurer que les pods corrects sont attachés au service :
kubectl get endpoints <service_name>- Tester la connectivité :
Utiliser curl ou telnet pour tester les connexions réseau à partir d'un autre pod ou nœud.
Deployments
Les deployments assurent la gestion de la mise à jour et du déploiement des pods.
Étapes de debug
- Vérifier l'état du déploiement :
kubectl get deployment- Obtenir les détails :
kubectl describe deployment <deployment_name>- Vérifier l'historique des révisions : Si des mises à jour ont échoué :
kubectl rollout history deployment/<deployment_name>- Vérifier la progression du déploiement :
kubectl rollout status deployment/<deployment_name>- Réinitialiser un déploiement : Si une mise à jour échoue, restaurer une version précédente :
kubectl rollout undo deployment/<deployment_name>ReplicaSets
Un ReplicaSet garantit qu'un nombre spécifique de répliques de pods est exécuté à tout moment.
Étapes de debug
- Vérifier l'état des ReplicaSets :
kubectl get replicaset- Décrire le ReplicaSet :
kubectl describe replicaset <replicaset_name>- Vérifier l'échelle des répliques : S'assurer que le nombre attendu de pods correspond à la spécification :
kubectl scale replicaset <replicaset_name> --replicas=<number_of_replicas>StatefulSets
Un StatefulSet gère les applications stateful, c'est-à-dire les applications nécessitant une persistance et un ordonnancement précis des pods.
Étapes de debug
- Vérifier l'état des StatefulSets :
kubectl get statefulset- Vérifier les volumes persistants : Assurez-vous que les PersistentVolumeClaims (PVC) sont bien liés :
kubectl get pvc- Décrire le StatefulSet :
kubectl describe statefulset <statefulset_name>- Vérifier les pods gérés par StatefulSet :
kubectl get pods -l app=<statefulset_app_label>ConfigMaps
Les ConfigMaps sont utilisés pour injecter des fichiers de configuration dans les conteneurs.
Étapes de debug
- Lister les ConfigMaps :
kubectl get configmap- Décrire une ConfigMap :
kubectl describe configmap <configmap_name>- Vérifier les fichiers injectés dans les pods : Se connecter au pod et vérifier le contenu des fichiers de configuration :
kubectl exec -it <pod_name> -- cat /path/to/config/fileSecrets
Les Secrets sont utilisés pour stocker des informations sensibles comme des mots de passe, des tokens, etc.
Étapes de debug
- Lister les Secrets :
kubectl get secret- Décrire un Secret : (Note : le contenu est encodé en base64)
kubectl describe secret <secret_name>- Décoder les secrets : Pour déboguer, décoder un secret encodé en base64 :
echo "<encoded_secret>" | base64 --decodePersistentVolumeClaims (PVC) et PersistentVolumes (PV)
Les PVC et PV sont utilisés pour gérer le stockage persistant.
Étapes de debug
- Vérifier l'état des PVC et PV :
kubectl get pvc
kubectl get pvDécrire un PVC ou un PV :
shkubectl describe pvc <pvc_name> kubectl describe pv <pv_name>Vérifier la liaison entre PVC et PV : Assurez-vous que le PVC est bien lié à un PV disponible.
Tester l'accès au volume : Utiliser un pod pour monter le volume et vérifier si le stockage est accessible.
Ingress
L'Ingress est utilisé pour exposer des services HTTP/HTTPS à l'extérieur du cluster Kubernetes.
Étapes de debug
Lister les Ingress :
shkubectl get ingressDécrire l'Ingress :
shkubectl describe ingress <ingress_name>Vérifier les événements : Inspecter les événements et erreurs liés à l'Ingress Controller.
Tester l'accès HTTP/HTTPS : Utiliser
curlpour vérifier si le trafic HTTP/HTTPS est correctement redirigé.
DaemonSets
Les DaemonSets assurent que chaque nœud exécute une copie d'un pod spécifique.
Étapes de debug
Vérifier l'état des DaemonSets :
shkubectl get daemonsetDécrire un DaemonSet :
shkubectl describe daemonset <daemonset_name>Vérifier l'ordonnancement des pods : Assurez-vous que les pods sont déployés sur chaque nœud :
shkubectl get pods -o wide
Conclusion
La clé du debug dans Kubernetes est de s'appuyer sur les commandes kubectl describe et kubectl logs pour comprendre ce qui ne va pas avec les objets concernés. En suivant ces lignes directrices spécifiques à chaque type d'objet, vous devriez être en mesure de diagnostiquer la plupart des problèmes courants.