Kubernetes Fehlersuche
Die Fehlersuche in Kubernetes ist manchmal aufgrund der restriktiven Container Images nicht ganz trivial, da wichtige Tools für das Debugging fehlen.
Am einfachsten ist es einen weiteren POD zu Starten, um von dort die Fehlersuche durchzuführen.
Kubernetes “run” – to the Rescue!
Kubernetes besitzt mit run wie bei Docker auch einen Container zu starten. Dieses nutzen wir nun, um einen weiteren temporären Container zu starten. Sehr leichtgewichtige Images sind Busybox und Alpine, was ein schnelles hochfahren ermöglicht.
Bash Funktion
# open debug shell
k8sdebug() {
case "$#" in
"2")
kubectl run -i --tty --rm debug --image=$1 -n $2 --restart=Never -- sh
;;
"1")
kubectl run -i --tty --rm debug --image=busybox -n $1 --restart=Never -- sh
;;
"0")
echo "Synopsis: k8sdebug [imagename] namespace"
echo "if no image is specified busybox is used"
echo "e.g.: k8sdebug alpine liferay-dev to start an alpine linux in namespace liferay-dev"
esac
}
Beispiele
Hier noch ein paar Anregungen für den Einsatz der Debug-Shell.
Wget
Wer nur wget benötigt, der kann auf Busybox Image starten. Es muss nur der Namespace angegeben werden.
[sascha@vbox ~]$ k8sdebug liferay
If you don't see a command prompt, try pressing enter.
/ # wget
BusyBox v1.32.1 (2021-01-12 00:38:40 UTC) multi-call binary.
Usage: wget [-c|--continue] [--spider] [-q|--quiet] [-O|--output-document FILE]
[-o|--output-file FILE] [--header 'header: value'] [-Y|--proxy on/off]
[--no-check-certificate]
[-P DIR] [-S|--server-response] [-U|--user-agent AGENT] [-T SEC] URL...
Retrieve files via HTTP or FTP
--spider Only check URL existence: $? is 0 if exists
--no-check-certificate Don't validate the server's certificate
-c Continue retrieval of aborted transfer
-q Quiet
-P DIR Save to DIR (default .)
-S Show server response
-T SEC Network read timeout is SEC seconds
-O FILE Save to FILE ('-' for stdout)
-o FILE Log messages to FILE
-U STR Use STR for User-Agent header
-Y on/off Use proxy
/ #
Curl
Möchte man lieber ein echtes Curl verwenden, dann ist alpine linux die beste Wahl.
[sascha@vbox ~]$ k8sdebug alpine liferay
If you don't see a command prompt, try pressing enter.
/ # apk add curl
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
(1/5) Installing ca-certificates (20191127-r5)
(2/5) Installing brotli-libs (1.0.9-r3)
(3/5) Installing nghttp2-libs (1.42.0-r1)
(4/5) Installing libcurl (7.74.0-r0)
(5/5) Installing curl (7.74.0-r0)
Executing busybox-1.32.1-r0.trigger
Executing ca-certificates-20191127-r5.trigger
OK: 8 MiB in 19 packages
/ # curl svc-or-ip
NC – NetCat
NC ist bestandteil des busybox Images. Hier abruf einer Seite von Liferay auf dem Port 8080.
[sascha@vbox ~]$ k8sdebug liferay
If you don't see a command prompt, try pressing enter.
/ # nc liferay-cluster:8080
GET /index.html