Voyons comment debugguer un pod/conteneur en cours d'exécution en utilisant les fonctions de debug de k8s ainsi que les images Nixery.dev
Dépot nixery.dev
Le dépot "nixery.dev" permet de générer des images docker personnalisées.
Ces images sont construites "à la volée" et contiennent les packages spécifiées dans l'url d'appel :
Exemple pour instancier une image contenant bash, openssl, tcpdump, ngrep:
k run -it debug01 --image=nixery.dev/shell/bash/openssl/tcpdump/ngrep – bash
... C'est parfait pour avoir rapidement la bonne image avec les bons outils.
nixery.dev semble basé sur NixOS, et la liste des paquets disponible peut être consultée ici: https://search.nixos.org/ (A vérifier)
Kubectl debug
Cette commande permet de démarrer un conteneur "debug-container" sur le pod <pod-to-debug> et le conteneur <container-to-debug> avec l'image 'nixery.fr'.
kubectl debug <pod-to-debug> -it \
--container=debug-container \
--target=<container-to-debug>
--profile=general \
--image=nixery.dev/shell/bash/openssl/tcpdump/ngrep -- bash
Et pour se rattacher au pod de debug s'il tourne encore:
$ k attach -it <pod-to-debug> -c debug-container
Exemple d'utilisation:
On identifie le pod et le conteneur:
$ k get pods
portal-nginx-6d59f55fb-xp8jn <<< Le pod cible
$ k describe pod portal-nginx-6d59f55fb-xp8jn | grep -A1 Containers:
Containers:
nginx: <<< Le container cible
On lance le conteneur éphémère de debug:
$ kubectl debug portal-nginx-6d59f55fb-hp27b -it --container=debug001 --target=nginx --profile=general --image=busybox -- sh
Targeting container "nginx". If you don't see processes from this container it may be because the container runtime doesn't support this feature.
If you don't see a command prompt, try pressing enter.
/ # ps aux
PID USER TIME COMMAND
1 root 0:00 nginx: master process nginx -g daemon off;
30 101 0:00 nginx: worker process
La commande ps retourne bien le process "nginx".
Si vous quittez votre conteneur ephemere, mais qu'il tourne encore, vous pouvez vous rattacher avec:
kubectl attach portal-nginx-6d59f55fb-hp27b -c debug001 -i -t
Tout en même temps
Il est fréquent d'avoir besoin d'outils spécifiques pour debugger votre conteneur.
C'est a ce moment que ca devient intéressant de mixer "kubectl debug" et une image nixery.dev spécifique à vos besoins:
Exemple pour avoir ngrep ou tcpdump :
$ kubectl debug portal-nginx-6d59f55fb-xp8jn -it --container=debug001 --target=nginx --profile=general --image=nixery.dev/shell/bash/openssl/tcpdump/ngrep/coreutils/ps -- bash