k9s is an awesome terminal UI and tool to work with Kubernetes clusters. I’m using it daily for basically all my Kubernetes related work tasks.
Recently I learned there’s a super straight forward way of adding “plugins” to k9s, which are basically shortcuts for calling (shell) commands.
Take the following example from my $XDG_CONFIG_HOME/k9s/plugins.yaml
file
grafana-pod:
shortCut: Ctrl-L
confirm: false
description: Grafana
scopes:
- pods
background: true
command: open
args:
- https://my-grafana.tld/d/abcdefghi/my-dashboard?orgId=1&var-Datasource=prometheus-$CLUSTER&var-Namespace=$NAMESPACE&var-app_kubernetes_io_name=All&var-Pod=$COL-NAME&from=now-6h&to=now
Let’s have a look at each line:
shortCut
defines the key combination which invokes the pluginconfirm
can be true or false and will show a confirmation dialog if set to true before invoking the plugindescription
is the name shown in the UIscopes
defines on what resources the plugin is available (will be hidden in the UI otherwise)background
defines if the plugin runs in the background or re-uses the same terminal (minimising k9s)command
is the command or tool to be invoked. It can be any command available in the shell, likeopen
(to open a URL),kubectl
, …args
is a list of arguments passed to thecommand
When I hit CTRL-L
, the open
command is invoked and open Grafana in my browser. It passes all relevant variables to the dashboard:
$CLUSTER
is the name of the current cluster$NAMESPACE
is the currently active namespace$COL-NAME
is the Name in the current column (the selected pod in the list of pods)
It’s a super powerful shortcut do view metrics about a pod in an instant, and made my life a lot easier!
More fields can be seen in the documentation at https://k9scli.io/topics/plugins/
k9s itself is already a powerful tool, but this extensibility just makes it so much more flexible!