ahmetb/kubectx

GitHub: ahmetb/kubectx

一款用于在 Kubernetes 多集群和多命名空间环境中快速切换上下文的命令行效率工具。

Stars: 19597 | Forks: 1363

# `kubectx` + `kubens`: kubectl 效率工具 ![Latest GitHub release](https://img.shields.io/github/release/ahmetb/kubectx.svg) ![GitHub stars](https://img.shields.io/github/stars/ahmetb/kubectx.svg?label=github%20stars) ![Homebrew downloads](https://img.shields.io/homebrew/installs/dy/kubectx?label=macOS%20installs) [![Go implementation (CI)](https://github.com/ahmetb/kubectx/workflows/Go%20implementation%20(CI)/badge.svg)](https://github.com/ahmetb/kubectx/actions?query=workflow%3A"Go+implementation+(CI)") 本代码仓库提供了 `kubectx` 和 `kubens` 两种工具。 [安装 →](#installation) ## 什么是 `kubectx` 和 `kubens`? **kubectx** 是一个用于在 kubectl 的 context(集群)之间进行快速切换的工具,并且可以为每个 context 启动只读 shell。
**kubens** 是一个用于在 Kubernetes namespace(并为 kubectl 配置它们)之间轻松切换的工具。 这是一个 **`kubectx`** 演示: ![kubectx demo GIF](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/82a9a4197a185426.gif) ...这是一个 **`kubens`** 演示: ![kubens demo GIF](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/fa0f815051185428.gif) ### 用法 #### kubctx 切换到 kubeconfig 中的另一个集群: ``` $ kubectx minikube Switched to context "minikube". ``` 切换回上一个集群: ``` $ kubectx - Switched to context "oregon". ``` 启动一个仅包含单个 context 的隔离 shell: ``` $ kubectx -s minikube ``` 启动一个禁止写操作的只读 shell: ``` $ kubectx -r minikube ``` 重命名 context: ``` $ kubectx dublin=gke_ahmetb_europe-west1-b_dublin Context "gke_ahmetb_europe-west1-b_dublin" renamed to "dublin". ``` #### kubens 更改 kubectl 上的活动 namespace: ``` $ kubens kube-system Context "test" set. Active namespace is "kube-system". ``` 返回上一个 namespace: ``` $ kubens - Context "test" set. Active namespace is "default". ``` 即使不存在,也更改活动 namespace: ``` $ kubens namespace-404 -f Context "test" set. Active namespace is "namespace-404". ``` 如果你安装了 [`fzf`](https://github.com/junegunn/fzf),你还可以**交互式**地选择 context 或集群,或者通过输入几个字符进行模糊搜索。想了解更多,请阅读 [交互模式 →](#interactive-mode) `kubectx` 和 `kubens` 都支持 bash/zsh/fish shell 上的 Tab 补全,以帮助处理长的 context 名称。你再也不必记住完整的 context 名称了。 ## 安装 | Package manager | Command | |---|---| | [Homebrew](https://brew.sh/) (macOS & Linux) | `brew install kubectx` | | [MacPorts](https://www.macports.org) (macOS) | `sudo port install kubectx` | | apt (Debian/Ubuntu) | `sudo apt install kubectx` | | pacman (Arch Linux) | `sudo pacman -S kubectx` | | [Chocolatey](https://chocolatey.org/) (Windows) | `choco install kubens kubectx` | | [Scoop](https://scoop.sh/) (Windows) | `scoop bucket add main && scoop install main/kubens main/kubectx` | | [winget](https://learn.microsoft.com/en-us/windows/package-manager/) (Windows) | `winget install --id ahmetb.kubectx && winget install --id ahmetb.kubens` | | [Krew](https://github.com/kubernetes-sigs/krew/) (kubectl plugin) | `kubectl krew install ctx && kubectl krew install ns` | 或者,从 [**Releases 页面 →**](https://github.com/ahmetb/kubectx/releases) 下载二进制文件并将它们添加到你的 `PATH` 中的某个位置。
Shell 补全脚本 #### zsh (使用 [antibody](https://getantibody.github.io)) 将此行添加到你的 [Plugins File](https://getantibody.github.io/usage/)(例如 `~/.zsh_plugins.txt`): ``` ahmetb/kubectx path:completion kind:fpath ``` 根据你的设置,在加载 Plugins 文件后,你可能需要在 `~/.zshrc` 中调用 `compinit` 或 `autoload -U compinit && compinit`,也可能不需要。如果你使用 [oh-my-zsh](https://github.com/ohmyzsh/ohmyzsh),请在加载 `oh-my-zsh` 之前加载补全,因为 `oh-my-zsh` 会调用 `compinit`。 #### zsh (原生) 补全脚本必须位于属于 `$fpath` 的路径中。将它们链接或复制到现有文件夹。 使用 [`oh-my-zsh`](https://github.com/ohmyzsh/ohmyzsh) 的示例: ``` 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 ``` 如果补全不起作用,请将 `autoload -U compinit && compinit` 添加到你的 `.zshrc` 中(类似于 [`zsh-completions`](https://github.com/zsh-users/zsh-completions/blob/master/README.md#oh-my-zsh))。 如果你没有使用 [`oh-my-zsh`](https://github.com/ohmyzsh/ohmyzsh),你可以链接到 `/usr/share/zsh/functions/Completion`(可能需要 sudo),具体取决于你的 zsh 安装的 `$fpath`。 如果出现错误,调用 `compaudit` 可能会有所帮助。 #### 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/ ```
### 交互模式 如果你希望 `kubectx` 和 `kubens` 命令为你提供带有模糊搜索的交互式菜单,你只需要在你的 `$PATH` 中 [安装 `fzf`](https://github.com/junegunn/fzf)。 ![kubectx interactive search with fzf](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/cc149afc6f185429.gif) 注意事项: - 如果你安装了 `fzf`,但想选择不使用此功能,请设置环境变量 `KUBECTX_IGNORE_FZF=1`。 - 如果你想保留 `fzf` 交互模式但需要命令的默认行为,可以通过将输出管道传输到另一个命令来实现(例如 `kubectx | cat `)。 ### 自定义颜色 如果你想自定义指示当前 namespace 或 context 的颜色,请设置环境变量 `KUBECTX_CURRENT_FGCOLOR` 和 `KUBECTX_CURRENT_BGCOLOR`(参考颜色代码 [这里](https://linux.101hacks.com/ps1-examples/prompt-color-using-tput/)): ``` export KUBECTX_CURRENT_FGCOLOR=$(tput setaf 6) # blue text export KUBECTX_CURRENT_BGCOLOR=$(tput setab 7) # white background ``` 可以通过设置 [`NO_COLOR`](https://no-color.org/) 环境变量来禁用输出中的颜色。 如果你喜欢 `kubectx`,你可能也会喜欢我的 [`kubectl-aliases`](https://github.com/ahmetb/kubectl-aliases) 项目。我建议将 kubectx 和 kubens 与 [fzf](#interactive-mode) 和 [kube-ps1](https://github.com/jonmosco/kube-ps1) 配对使用。 #### 随时间变化的 Stargazers [![Stargazers over time](https://starchart.cc/ahmetb/kubectx.svg)](https://starchart.cc/ahmetb/kubectx) ![Google Analytics](https://ga-beacon.appspot.com/UA-2609286-17/kubectx/README?pixel)
标签:Bash, EVTX分析, fzf, Go, kubectl, kubectx, kubens, Pandas, Ruby工具, Shell, Zsh, 上下文切换, 命名空间管理, 子域名突变, 提示注入, 效率工具, 日志审计, 运维工具, 集群管理