This should be simple. It’s an environment variable.
But, as with all things, it depends! What if you’re working with multiple clusters, or you setup and tear-down clusters often, or work with different tools that have certain expectations?
I’ve set it a few different ways:
Save cluster config file as $HOME/.kube/config
This works. But it feels messy!
I don’t like having to constantly overwrite the configuration file for my cluster’s source-of-truth.
Plus, kubectl (and maybe other programs?) overwrite this file when connections are made to clusters.
Set $KUBECONFIG path in ~/.profile
This works, too. It doesn’t scale well when you change clusters often or use a variety of tooling (due to tooling behaviors and expectations).
# Get the config file from the current folder or from home
export KUBECONFIG=kubeconfig:$HOME/.kube/config
If kubeconfig doesn’t exist in the current folder (maybe because the tool you’re using changed folders), $KUBECONFIG will resolve to to $HOME/.kube/config.
The problem is that $HOME/.kube/config isn’t necessarily my desired config…it represents what was last used.
Set $KUBECONFIG path in this session
I was using a script like this to initialize my k8s connection in a terminal. It helped ensure predictability (my machine’s state isn’t mutated), as I had to explicitly set the context given a script in that project folder.
#!/bin/sh
# call like this: source ./start.sh
#
# Do stuff we need done before beginning a development session
# Doesn't modfy the machine long-term
#
# read in the absolute path of the kubeconfig in my current directory
export KUBECONFIG=$(readlink kubeconfig -f)
Keep is simple, use kubectx
Now, I just use kubectx. Get it using arkade, and other handy tools and k8s applications.