-
Pl
chevron_right
Thibault Martin: TIL that Kubernetes can give you a shell into a crashing container
news.movim.eu / PlanetGnome • 8:00 • 1 minute
When a container crashes, it can be for several reasons. Sometimes the log won't tell you much about why the container crashed, and you can't get a shell into that container because... it has already crashed. It turns out that
kubectl debug
can let you do exactly that.
I was trying to ship
Helfertool
on our Kubernetes cluster. The firs step was to get it to work locally in my Minikube. The container I was deploying kept crashing, with an error message that put me on the right track:
Cannot write to log directory. Exiting.
The container expected me to mount a volume on
/log
so it could write logs, which I did. I wanted to run a quick test from within the container to see if I could create a file in that directory. But when your container has already crashed you can't get a shell into it.
My better informed colleague
Quentin
told me about
kubectl debug
, a command that lets me create a copy of the crashing container but with a different
COMMAND
.
So instead of running its normal program, I can ask the container to run
sh
with the following command
$ kubectl debug mypod -it \
--copy-to=mypod-debug \
--container=my-pods-image \
-- sh
And just like that I have shell inside a similar container. Using this trick I could confirm that I can't
touch
a file in that
/log
directory because it belongs to
root
while my container is running unprivileged.
That's a great trick to troubleshoot from within a crashing container!