At work, I somewhat recently transitioned from using the Kubernetes Dashboard to using k9s
as DigitalOcean deprecated their hosted Dashboard for DOKS. Today, I found that I needed to modify
a Secret
and that k9s
and kubectl
have no native tools to do this. I also found that I didn’t have bash
completion set up since upgrading to a new dev machine, so I took the opportunity to set things up better by using my
Shell Customizations. Now I won’t need to configure
bash completion for helm/kubectl every time I set up a new computer.
Shell Customizations
Rather than adding shell completion to the system config as is often suggested in documentation, I chose to keep
everything in my .bashrc
so its portable between environments.
I already had some k8s-related content:
export EDITOR=nano
alias k9=k9s
I added:
which kubectl 1> /dev/null && source <(kubectl completion bash)
which helm 1> /dev/null && source <(helm completion bash)
[ -d "${KREW_ROOT:-$HOME/.krew}/bin" ] && export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
This adds kubectl
and helm
completion iff (not a typo)
those commands are available. It also appends the krew
binary path to $PATH
if its defined (more on krew
later).
k9s
and helm
Installation
k9s
has a few installation methods, but I chose to grab the latest release from GitHub
since I don’t have snap
installed and usually run Linux Mint. I ended up updating k9s
because the configuration file specs have
changed some since I originally got k9s, and updating means the example configurations in docs and other resources should all work.
The currently installed version can be determined with k9s info
.
helm
installation is documented on their website. I prefer to install
via apt
to simplify updates since (as noted earlier) I don’t usually have snap
installed.
krew and the kubectl-modify-secret plugin
krew
is a plugin for kubectl
that makes it easy to install more plugins. They have an
installation guide that is very
straight-forward. Note that the change in my .bashrc
earlier adds the same KREW_ROOT
to my PATH
as they specify in the installation guide.
With krew
installed, I’m finally back to what I started this all for: installing a plugin to
modify a secret in k9s
. The kubectl-modify-secret plugin
can be installed via:
kubectl krew update
kubectl krew install modify-secret
Now, kubectl modify-secret <secret_name>
should open an editor where a secret can be modified in plaintext.
k9s Plugin Configuration
With the plugin installed, I next configured k9s
so I can use the plugin to edit secrets the same way I edit configurations and
other specs. The k9s
plugin configuration is documented here.
My config at ~/.config/k9s/plugins.yaml
looks like:
plugins:
edit-secret:
shortCut: Ctrl-X
confirm: false
description: "Edit Secret"
scopes:
- secrets
command: kubectl
background: false
args:
- modify-secret
- --namespace
- $NAMESPACE
- --context
- $CONTEXT
- $NAME
This adds a ctrl
+x
shortcut to edit a Secret
, similar to how e
would edit a ConfigMap
; ctrl
+e
is already used to
show/hide the information at the top of k9s
, otherwise I’d have used that.
Future Plans
I’m satisfied now with my tools and workflow for interacting with Kubernetes. Ideally, I would like to come up with a method
for synchronizing configuration between my devices automatically; for now, I manually copy my .bashrc
, .ssh
, and .config
file/directories around. A better solution I think could be a git repository + update script, Nextcloud sync, or something else.
I still have some research to do, but for now the changes are infrequent enough I’m satisfied with manual processes.