MCPcopy
hub / github.com/ahmetb/kubectx

github.com/ahmetb/kubectx @v0.11.0 sqlite

repository ↗ · DeepWiki ↗ · release v0.11.0 ↗
275 symbols 1,370 edges 62 files 85 documented · 31%
README

kubectx + kubens: Power tools for kubectl

Latest GitHub release GitHub stars Homebrew downloads Go implementation (CI)

This repository provides both kubectx and kubens tools. Install →

What are kubectx and kubens?

kubectx is a tool to switch between contexts (clusters) on kubectl faster, and launch readonly shells for each context.

kubens is a tool to switch between Kubernetes namespaces (and configure them for kubectl) easily.

Here's a kubectx demo: kubectx demo GIF

...and here's a kubens demo: kubens demo GIF

Usage

kubectx

Switch to another cluster that's in kubeconfig:

$ kubectx minikube
Switched to context "minikube".

Switch back to previous cluster:

$ kubectx -
Switched to context "oregon".

Start an isolated shell that only has a single context:

$ kubectx -s minikube

Start a read-only shell where write operations are blocked:

$ kubectx -r minikube

Rename context:

$ kubectx dublin=gke_ahmetb_europe-west1-b_dublin
Context "gke_ahmetb_europe-west1-b_dublin" renamed to "dublin".

kubens

Change the active namespace on kubectl:

$ kubens kube-system
Context "test" set.
Active namespace is "kube-system".

Go back to the previous namespace:

$ kubens -
Context "test" set.
Active namespace is "default".

Change the active namespace even if it doesn't exist:

$ kubens namespace-404 -f
Context "test" set.
Active namespace is "namespace-404".

If you have fzf installed, you can also interactively select a context or cluster, or fuzzy-search by typing a few characters. To learn more, read interactive mode →

Both kubectx and kubens support Tab completion on bash/zsh/fish shells to help with long context names. You don't have to remember full context names anymore.


Installation

Package manager Command
Homebrew (macOS & Linux) brew install kubectx
MacPorts (macOS) sudo port install kubectx
apt (Debian/Ubuntu) sudo apt install kubectx
pacman (Arch Linux) sudo pacman -S kubectx
Chocolatey (Windows) choco install kubens kubectx
Scoop (Windows) scoop bucket add main && scoop install main/kubens main/kubectx
winget (Windows) winget install --id ahmetb.kubectx && winget install --id ahmetb.kubens
Krew (kubectl plugin) kubectl krew install ctx && kubectl krew install ns

Alternatively, download binaries from the Releases page → and add them to somewhere in your PATH.

Shell completion scripts

zsh (with antibody)

Add this line to your Plugins File (e.g. ~/.zsh_plugins.txt):

ahmetb/kubectx path:completion kind:fpath

Depending on your setup, you might or might not need to call compinit or autoload -U compinit && compinit in your ~/.zshrc after you load the Plugins file. If you use oh-my-zsh, load the completions before you load oh-my-zsh because oh-my-zsh will call compinit.

zsh (plain)

The completion scripts have to be in a path that belongs to $fpath. Either link or copy them to an existing folder.

Example with oh-my-zsh:

mkdir -p ~/.oh-my-zsh/custom/completions
chmod -R 755 ~/.oh-my-zsh/custom/completions
ln -s /opt/kubectx/completion/_kubectx.zsh ~/.oh-my-zsh/custom/completions/_kubectx.zsh
ln -s /opt/kubectx/completion/_kubens.zsh ~/.oh-my-zsh/custom/completions/_kubens.zsh
echo "fpath=($ZSH/custom/completions $fpath)" >> ~/.zshrc

If completion doesn't work, add autoload -U compinit && compinit to your .zshrc (similar to zsh-completions).

If you are not using oh-my-zsh, you could link to /usr/share/zsh/functions/Completion (might require sudo), depending on the $fpath of your zsh installation.

In case of errors, calling compaudit might help.

bash

git clone https://github.com/ahmetb/kubectx.git ~/.kubectx
COMPDIR=$(pkg-config --variable=completionsdir bash-completion)
ln -sf ~/.kubectx/completion/kubens.bash $COMPDIR/kubens
ln -sf ~/.kubectx/completion/kubectx.bash $COMPDIR/kubectx
cat << EOF >> ~/.bashrc


#kubectx and kubens
export PATH=~/.kubectx:\$PATH
EOF

fish

mkdir -p ~/.config/fish/completions
ln -s /opt/kubectx/completion/kubectx.fish ~/.config/fish/completions/
ln -s /opt/kubectx/completion/kubens.fish ~/.config/fish/completions/

[!NOTE] Tip: Show context/namespace in your shell prompt with oh-my-posh or simply with kube-ps1.


Interactive mode

If you want kubectx and kubens commands to present you an interactive menu with fuzzy searching, you just need to install fzf in your $PATH.

kubectx interactive search with fzf

Caveats: - If you have fzf installed, but want to opt out of using this feature, set the environment variable KUBECTX_IGNORE_FZF=1. - If you want to keep fzf interactive mode but need the default behavior of the command, you can do it by piping the output to another command (e.g. kubectx | cat).


Customizing colors

If you like to customize the colors indicating the current namespace or context, set the environment variables KUBECTX_CURRENT_FGCOLOR and KUBECTX_CURRENT_BGCOLOR (refer color codes here):

export KUBECTX_CURRENT_FGCOLOR=$(tput setaf 6) # blue text
export KUBECTX_CURRENT_BGCOLOR=$(tput setab 7) # white background

Colors in the output can be disabled by setting the NO_COLOR environment variable.


If you liked kubectx, you may like my kubectl-aliases project, too. I recommend pairing kubectx and kubens with fzf and kube-ps1.

Stargazers over time

Stargazers over time Google Analytics

Extension points exported contracts — how you extend this code

Op (Interface)
(no doc) [23 implementers]
cmd/kubens/main.go
Op (Interface)
(no doc) [23 implementers]
cmd/kubectx/main.go
Loader (Interface)
(no doc) [4 implementers]
internal/kubeconfig/kubeconfig.go
ReadWriteResetCloser (Interface)
(no doc) [3 implementers]
internal/kubeconfig/kubeconfig.go
PathHinter (Interface)
PathHinter is optionally implemented by ReadWriteResetCloser to indicate the file path of the underlying kubeconfig file [1 …
internal/kubeconfig/kubeconfig.go

Core symbols most depended-on inside this repo

Ctx
called by 71
internal/testutil/kubeconfigbuilder.go
Parse
called by 59
internal/kubeconfig/kubeconfig.go
WithLoader
called by 55
internal/kubeconfig/kubeconfig.go
KC
called by 54
internal/testutil/kubeconfigbuilder.go
ToYAML
called by 54
internal/testutil/kubeconfigbuilder.go
WithCtxs
called by 50
internal/testutil/kubeconfigbuilder.go
Run
called by 34
cmd/kubectx/main.go
Set
called by 21
internal/testutil/kubeconfigbuilder.go

Shape

Function 159
Method 72
Struct 38
Interface 5
TypeAlias 1

Languages

Go100%

Modules by API surface

internal/proxy/readonly_security_test.go18 symbols
internal/kubeconfig/helper_test.go17 symbols
internal/kubeconfig/kubeconfig.go15 symbols
internal/proxy/readonly.go14 symbols
internal/proxy/readonly_test.go13 symbols
internal/kubeconfig/contextmodify_test.go11 symbols
internal/testutil/kubeconfigbuilder.go9 symbols
internal/kubeconfig/kubeconfigloader_test.go8 symbols
internal/kubeconfig/contexts_test.go7 symbols
cmd/kubectx/state_test.go7 symbols
cmd/kubectx/shell.go7 symbols
internal/kubeconfig/kubeconfigloader.go6 symbols

Dependencies from manifests, versioned

facette.io/natsortv0.0.0-2018121007275 · 1×
github.com/davecgh/go-spewv1.1.1 · 1×
github.com/fxamacker/cbor/v2v2.9.0 · 1×
github.com/go-errors/errorsv1.4.2 · 1×
github.com/go-logr/logrv1.4.3 · 1×
github.com/go-openapi/jsonpointerv0.21.0 · 1×
github.com/go-openapi/jsonreferencev0.20.2 · 1×
github.com/go-openapi/swagv0.23.0 · 1×
github.com/google/gnostic-modelsv0.7.0 · 1×

For agents

$ claude mcp add kubectx \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact