kubectl-switch is a command-line tool for managing and switching between multiple Kubernetes configuration files located in the same directory. It simplifies the process of selecting a Kubernetes context from multiple kubeconfig files and updating the active configuration or namespace.
Just dump all your kubeconfigs into a single dir and let kubectl-switch manage them for you!
- Multiple kubeconfig files: Manage multiple kubeconfig files in a single directory without merging them
- Context & namespace switching: Switch between contexts and namespaces from multiple config files
- Interactive & non-interactive modes: Select from a list or specify directly as an argument (with tab completion support!)
kubectl-switch is an alternative to tools like kubectx, kubens and kubie. It has been created because I feel all of those fall short in certain regards:
- kubectxand- kubensassume all your contexts are defined in a single config file. Yes, there is some hackery you can do to your- KUBECONFIGenvironment variable to make it work with multiple files, but it is (in my opinion) a sub-par workflow and I never really liked it
- kubiespawns a new shell when you use it to change contexts, making it practically impossible to integrate into scripts or taskfile automation. Also I consider it to be too complicated of a solution for what is fundamentally a really simple problem
What I wanted was something very simple conceptually: I just want to dump all my kubeconfig files in a single directory and then have my tool parse them and "physically" move over the config file to .kube/config (or whatever is configured in my KUBECONFIG env var) such that it is also persistent between different shells. Here is where kubectl-switch comes in!
Install the latest stable version directly using Go:
# Install the latest version
go install github.com/mirceanton/kubectl-switch/v2@latest
# Or install a specific version
go install github.com/mirceanton/kubectl-switch/v2@v2.2.6Note: Versions prior to v2.2.6 cannot be installed via
go installdue to module path issues. If you need an older version, please use one of the alternative installation methods below.
Precompiled binaries are available for various platforms. You can download the latest release from the GitHub Releases page.
- 
Download the appropriate binary for your system and extract the archive. 
- 
Make the extracted binary executable: chmod +x kubectl-switch 
- 
Move the binary to a directory in your PATH: mv kubectl-switch /usr/local/bin/kubectl-switch 
- 
Add the tap brew tap mirceanton/taps 
- 
Install kubectl-switchbrew install kubectl-switch 
kubectl-switch is also available as a Docker container:
docker pull ghcr.io/mirceanton/kubectl-switchTo use it with your local kubeconfig files:
docker run -v ~/.kube:/root/.kube -v /path/to/kubeconfigs:/kubeconfigs \
    -e KUBECONFIG_DIR=/kubeconfigs \
    ghcr.io/mirceanton/kubectl-switch context- 
Clone the repository: git clone https://github.com/mirceanton/kubectl-switch cd kubectl-switch
- 
Build the tool: go build -o kubectl-switch 
- 
Move the binary to your PATH: mv kubectl-switch /usr/local/bin/kubectl-switch 
The context (or ctx) subcommand is used to switch between Kubernetes contexts (think of kubectx):
# Interactive mode - select context from a list
kubectl-switch context
# Switch to a specific context
kubectl-switch ctx my-contextThe namespace (or ns) subcommand is used to switch the current namespace (think of kubens):
# Interactive mode - select namespace from a list
kubectl-switch namespace
# Switch to a specific namespace
kubectl-switch ns kube-systemSwitch back to the previous configuration:
kubectl-switch -When installed as a kubectl plugin, you can use it directly with the kubectl command:
# These commands are equivalent
kubectl-switch ctx
kubectl switch ctxkubectl-switch uses Viper for configuration management, allowing you to configure the tool via command-line flags or environment variables, with flags taking precedence.
| Option | Flag | Environment Variable | Default | Description | 
|---|---|---|---|---|
| Kubeconfig Directory | --kubeconfig-dir | KUBECONFIG_DIR | ~/.kube/configs/ | Directory containing your kubeconfig files | 
| Kubeconfig | --kubeconfig | KUBECONFIG | ~/.kube/config | Path to the currently active kubeconfig file. | 
| Log Level | --log-level | LOG_LEVEL | info | Logging verbosity (trace, debug, info, warn, error, fatal, panic) | 
| Log Format | --log-format | LOG_FORMAT | text | Log output format (text, json) | 
The completion subcommand generates shell completion scripts:
# Generate completions for bash
kubectl-switch completion bash > /etc/bash_completion.d/kubectl-switch
# Generate completions for zsh
kubectl-switch completion zsh > ~/.zsh/completion/_kubectl-switch
# Generate completions for fish
kubectl-switch completion fish > ~/.config/fish/completions/kubectl-switch.fish
# Generate completions for powershell
kubectl-switch completion powershell > ~/kubectl-switch.ps1Contributions are welcome! Please fork the repository, make your changes, and submit a pull request.
This project is licensed under the MIT License. See the LICENSE file for details.