https://github.com/mirceanton/kubectl-switch
A simple tool to help manage multiple kubeconfig files
https://github.com/mirceanton/kubectl-switch
cli cli-app kubectl kubectl-command kubectl-plugin kubectl-plugins kubernetes kubernetes-cluster kubernetes-context
Last synced: 19 days ago
JSON representation
A simple tool to help manage multiple kubeconfig files
- Host: GitHub
- URL: https://github.com/mirceanton/kubectl-switch
- Owner: mirceanton
- License: mit
- Created: 2023-06-17T12:49:40.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-05-01T17:05:49.000Z (24 days ago)
- Last Synced: 2025-05-01T18:23:00.399Z (24 days ago)
- Topics: cli, cli-app, kubectl, kubectl-command, kubectl-plugin, kubectl-plugins, kubernetes, kubernetes-cluster, kubernetes-context
- Language: Go
- Homepage:
- Size: 280 KB
- Stars: 15
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Funding: .github/funding.yml
- License: LICENSE
- Code of conduct: .github/Code_of_Conduct.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# kubectl-switch
`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!
## Features
- **Multiple kubeconfig files**: Manage multiple kubeconfig files with one or more contexts each, all present in a single directory. You don't have to generate a global kubeconfig to hold all of your contexts
- **Context Switching**: Easily switch between different Kubernetes contexts from multiple config files.
- **Namespace Switching**: Quickly change the current namespace in the active context.
- **Previous Config**: Switch back to the previous configuration with `kubectl switch -`.
- **Non-Interactive Mode**: Specify the desired context or namespace directly as an argument.
- **Interactive Mode**: Run the program with no arguments to get an interactive list of available namespaces or contexts to choose from.
- **Persistent Configuration**: Changes persist across different shell sessions.
- **Shell Completions**: Provides tab completion for available contexts and namespaces.
- **Non-destructive**: `kubectl-switch` will never edit those. It will only work with copies of them.## Why `kubectl-switch`?
`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:
- `kubectx` and `kubens` assume all your contexts are defined in a single config file. Yes, there is some hackery you can do to your `KUBECONFIG` environment variable to make it work with multiple files, but it is (in my opinion) a sub-par workflow and I never really liked it
- `kubie` spawns 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 problemWhat 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!
## Installation
### Download Precompiled Binaries
Precompiled binaries are available for various platforms. You can download the latest release from the [GitHub Releases page](https://github.com/mirceanton/kubectl-switch/releases/latest).
1. Download the appropriate binary for your system and extract the archive.
2. Make the extracted binary executable:```bash
chmod +x kubectl-switch
```3. Move the binary to a directory in your PATH:
```bash
mv kubectl-switch /usr/local/bin/kubectl-switch
```### Running via Docker
`kubectl-switch` is also available as a Docker container:
```bash
docker pull ghcr.io/mirceanton/kubectl-switch
```### Install via homebrew
1. Add the tap
```bash
brew tap mirceanton/taps
```2. Install `kubectl-switch`
```bash
brew install kubectl-switch
```### Build from Source
1. Clone the repository:
```bash
git clone https://github.com/mirceanton/kubectl-switch
cd kubectl-switch
```2. Build the tool:
```bash
mise run build
```## Usage
### Context Command
The `context` (or `ctx`) subcommand is used to switch between Kubernetes contexts (think of `kubectx`):
```bash
# Interactive mode - select context from a list
kubectl-switch context# Switch to a specific context
kubectl-switch ctx my-context
```### Namespace Command
The `namespace` (or `ns`) subcommand is used to switch the current namespace (think of `kubens`):
```bash
# Interactive mode - select namespace from a list
kubectl-switch namespace# Switch to a specific namespace
kubectl-switch ns kube-system
```### Quickly Switch to Previous Configuration
Switch back to the previous configuration:
```bash
kubectl-switch -
```### Usage with kubectl plugin
When installed as a kubectl plugin, you can use it directly with the `kubectl` command:
```sh
# These commands are equivalent
kubectl-switch ctx
kubectl switch ctx
```## Configuration
You can configure `kubectl-switch` using environment variables or CLI flags:
| Environment Variable | CLI Flag | Description | Default Value |
| :--------------------: | :---------------: | :----------------------------------------------: | :--------------------------: |
| `KUBECONFIG_DIR` | `--kubeconfig-dir` | Directory containing your kubeconfig files. | None |
| `KUBECONFIG` | N/A | Path where the active kubeconfig will be stored. | `~/.kube/config` |## Shell Completion
The `completion` subcommand generates shell completion scripts:
```bash
# 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.ps1
```## Contributing
Contributions are welcome! Please fork the repository, make your changes, and submit a pull request.
## License
This project is licensed under the MIT License. See the [`LICENSE`](./LICENSE) file for details.