kubectl-oomd
kubectl-oomd copied to clipboard
Show pods/containers which have recently been 'OOMKilled', as a kubectl plugin.
oomd
A kubectl plugin to display the pods and containers which have recently been OOMKilled.
Installation
Via krew
kubectl krew install oomd
kubectl oomd
Or manually from the releases page, for example with linux_amd64
# Download the release for your OS
wget https://github.com/jdockerty/kubectl-oomd/releases/download/v0.0.7/oomd_linux_amd64.tar.gz
# Extract files from the archive
tar -xvf oomd_linux_amd64.tar.gz
# Move the binary into your PATH, renaming the application to 'kubectl-oomd' to
# satisfy the plugin convention
mv oomd "${HOME}"/.local/bin/kubectl-oomd
# Run the plugin
kubectl oomd
Usage
Running the command will display the pods that have recently been OOMKilled in your current namespace.
This also shows the specific container which was killed too, helpful in the case of multi-container pods.
kubectl oomd
POD CONTAINER REQUEST LIMIT TERMINATION TIME
my-app-5bcbcdf97-722jp infoapp 1G 8G 2022-11-07 13:03:49 +0000 GMT
my-app-5bcbcdf97-7j5rd infoapp 1G 8G 2022-11-07 14:35:34 +0000 GMT
my-app-5bcbcdf97-k8g8g infoapp 1G 8G 2022-11-07 14:35:02 +0000 GMT
my-app-5bcbcdf97-mf65j infoapp 1G 8G 2022-11-07 14:34:57 +0000 GMT
You can specify another namespace, as you would with other kubectl commands or use --all-namespaces/-A to check against them all.
kubectl oomd -n oomkilled
POD CONTAINER REQUEST LIMIT TERMINATION TIME
my-app-5bcbcdf97-722jp infoapp 1G 8G 2022-11-07 13:03:49 +0000 GMT
my-app-5bcbcdf97-7j5rd infoapp 1G 8G 2022-11-07 14:35:34 +0000 GMT
my-app-5bcbcdf97-k8g8g infoapp 1G 8G 2022-11-07 14:35:02 +0000 GMT
my-app-5bcbcdf97-mf65j infoapp 1G 8G 2022-11-07 14:34:57 +0000 GMT
kubectl oomd --no-headers
my-app-5bcbcdf97-722jp infoapp 1G 8G 2022-11-07 13:03:49 +0000 GMT
my-app-5bcbcdf97-7j5rd infoapp 1G 8G 2022-11-07 14:35:34 +0000 GMT
my-app-5bcbcdf97-k8g8g infoapp 1G 8G 2022-11-07 14:35:02 +0000 GMT
my-app-5bcbcdf97-mf65j infoapp 1G 8G 2022-11-07 14:34:57 +0000 GMT
Experimental sorting is enabled through the --sort-field flag. By default, this is none.
At the moment, only time is supported which sorts by termination time of containers, this is mainly
useful in larger outputs across all namespaces (-A), used in conjunction with a pipe to tail.
A simple example of this in action is shown below.
# The default with no sorting.
kubectl oomd -n tracing
POD CONTAINER REQUEST LIMIT TERMINATION TIME
jaeger-agent-4k845 jaeger-agent 100Mi 100Mi 2022-11-11 21:06:31 +0000 GMT
jaeger-agent-j5vb8 jaeger-agent 100Mi 100Mi 2022-11-09 23:20:38 +0000 GMT
# Most recently OOMKilled pods are shown first
kubectl oomd -n tracing --sort-field time
POD CONTAINER REQUEST LIMIT TERMINATION TIME
jaeger-agent-j5vb8 jaeger-agent 100Mi 100Mi 2022-11-09 23:20:38 +0000 GMT
jaeger-agent-4k845 jaeger-agent 100Mi 100Mi 2022-11-11 21:06:31 +0000 GMT
Development
If you wish to force some OOMKilled pods for testing purposes, you can use oomer
or simply run
kubectl apply -f https://raw.githubusercontent.com/jdockerty/oomer/main/oomer.yaml
This will create the oomkilled namespace and a Deployment with pods that continually exit with code 137,
in order to be picked up by oomd.