Kubernetes Logs and Console Simplified Command
When working on a Kubernetes application, I constantly have to
kubectl get pod then I copy the pod name and run something
like:
$ kubectl logs -f pod_nameTo automate this, we can use $() which evaluates a
command and concatenates the result onto current command.
First we need to adapt kubectl get pod to get the pod we
want:
$ kubectl get pod -l "app=pod_name" -o name | sed "s/pod\///" | head -n 1Change pod_name for your desired pod.
Then we can use this inside $() to concatenate the log
command:
$ kubectl logs -f $(kubectl get pod -l "app=pod_name" -o name | sed "s/pod\///" | head -n 1)Finally, we can create a function. Think about this shell function as an alias with a param:
klog() {
if [ "$#" -eq "0" ]
then
kubectl logs -f $(kubectl get pod -l "app=default_pod_name" -o name | sed "s/pod\///" | head -n 1)
else
kubectl logs -f $(kubectl get pod -l "app=$1" -o name | sed "s/pod\///" | head -n 1)
fi
}Place it on your bash initialization script (usually
.bash_profile or .bashrc) and change
default_pod_name accordingly.
Now you can access your default pod logs with klog and
specific pods with klog pod_name.
And it’s trivial to adapt to run a remote console, or anything else.
Have fun!