Kubernetes
Pense-bête Kubernetes
Section titled “Pense-bête Kubernetes”Audit : Trouver les déploiements forçant le pull d’image
Section titled “Audit : Trouver les déploiements forçant le pull d’image”Le contexte : La politique imagePullPolicy: Always force K8s à re-télécharger l’image à chaque démarrage de pod, même si elle est déjà présente sur le noeud. C’est pratique en dev, mais en production, cela ralentit les démarrages, surcharge votre registry, et crée un point of failure (si la registry est injoignable, l’app ne redémarre pas).
Voici une commande avancée qui utilise kubectl et jq (qui doit être installé) pour lister tous les déploiements actifs qui utilisent cette politique, afin de pouvoir les corriger.
kubectl get deploy -A -o json | jq -r ' .items[] | select((.spec.replicas // 1) > 0) | select(.spec.template.spec.containers[].imagePullPolicy=="Always") | [.metadata.namespace, .metadata.name] | @tsv'Note : Cette commande filtre pour ne remonter que les déploiements qui ont au moins 1 réplica configuré.
Troubleshooting réseau & noeuds
Section titled “Troubleshooting réseau & noeuds”Quand on investigue un problème réseau, on doit souvent faire le lien entre une adresse IP et l’endroit physique/virtuel où tourne la charge.
Identifier un noeud à partir de son IP
Section titled “Identifier un noeud à partir de son IP”Simple et efficace. Le flag -o wide ajoute des colonnes essentielles comme l’IP interne, l’IP externe, l’OS et le runtime.
kubectl get nodes -o wideVoir tous les pods qui tournent sur un noeud spécifique
Section titled “Voir tous les pods qui tournent sur un noeud spécifique”Si vous savez qu’un noeud pose problème (CPU à 100%, perte réseau), vous pouvez lister tout ce qui tourne dessus grâce au field-selector.
kubectl get pods -A -o wide --field-selector spec.nodeName=<NODE_NAME>Filtrer les logs de l’Ingress Controller pour une app spécifique
Section titled “Filtrer les logs de l’Ingress Controller pour une app spécifique”L’Ingress Controller est le point d’entrée de votre cluster. Il gère le trafic pour des dizaines d’applications. Pour isoler les erreurs (comme un 502 Bad Gateway) concernant votre application spécifique, il faut filtrer les logs de ce contrôleur.
kubectl logs -n <NAMESPACE_INGRESS> deployment/<NOM_DEPLOIEMENT_INGRESS> | grep <NOM_DE_VOTRE_APP>Performances : Isoler les consommateurs de mémoire
Section titled “Performances : Isoler les consommateurs de mémoire”Un grand classique. Si votre cluster est en tension mémoire (OOMKilled en vue), cette commande liste les 30 pods les plus gourmands sur tout le cluster.
Prérequis : Le Metrics Server doit être installé sur votre cluster pour que la commande
topfonctionne.
kubectl top pods -A --sort-by=memory | head -30