I recently found myself typing a lot of keystrokes just to switch between the GKE clusters I’m currently using. The kubectl command line tool currently does not make it as easy as I would like, so I wrote my own tool.

The fact that GKE context names are long made me seek an alternative way. There has been discussions to support KUBE_CONTEXT or KUBE_NAMESPACE environment variables. However these proposals are not accepted yet.

Some people use multiple KUBE_CONFIG directories to switch between multiple configuration files, which sounds like a directory management overhead.

In my daily developer workflow, I switch back and forth between directories with cd - command. Similarly I switch between Git branches using the git checkout - command. So why don’t we have this pattern for kubectl?

Enter kubectx

So I implemented kubectx. It’s a simple bash script but it does what I need. Here is what kubectx has to offer:

kubectx remembers your context switches, you can switch to the previous contexts with:

kubectx -

kubectx can create aliases for your long context names:

kubectx eu=gke_ahmetb-samples-playground_europe-west1-b_dublin

and then switch to a context easily:

kubectx eu

Not to mention, there is bash/zsh completion out of the box. It can autocomplete the context name with the Tab key. See a demo below.

Demo

Your browser does not support the video tag.

Installation

I created a simple Homebrew tap to install on mac OS. This installs the symlink and the bash/zsh completion script automatically:

brew install kubectx

See the repository for up to date instructions as these instructions are subject to change and I probably won’t remember to update this article

Conclusion

Ideally, I want to see this functionality in kubectl command and make kubectx obsolete . I love switching back and forth between kubectx - everyday. I’m sure I’d love to have an KUBE_CONTEXT environment variable, too. If you like this idea, make sure you support the proposal.

I hope kubectx can help facilitate the conversation about this topic further. Until then, kubectx will stay as part of my daily Kubernetes workflow.

Don’t want to use kubectx? You can still create this alias in your .bashrc/.zshrc that gives you similar functionality:

alias kubectx="kubectl config use-context"

If you installed kubectl shell completion, this alias can make your day easier. (I have a ton of other kubectl aliases I should share some day.)