00-kubectl 命令之自动补全和快速切换 namespace

自动补全

kubectl安装后,默认是没有比如自动补全等功能的,频繁使用比较不方便。目前已经有各类kubectl 小工具可以提高效率,还有 kubectl 专用的 shell 了。

官方推荐

需要安装 bash_completion,添加自动补全脚本。

CentOS

1
2
3
4
5
# 安装bash-completion
yum install -y epel-release.noarch
yum install -y bash_completion
# 添加补全脚本
kubectl completion bash >/etc/bash_completion.d/kubectl

重新登录shell,可以发现kubectl的子命令,包括资源名称都可以用Tab键自动补全了:

在这里插入图片描述

BASH

1
2
source <(kubectl completion bash) # 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包。
echo "source <(kubectl completion bash)" >> ~/.bashrc # 在你的 bash shell 中永久地添加自动补全

你还可以在补全时为 kubectl 使用一个速记别名:

1
2
alias k=kubectl
complete -o default -F __start_kubectl k

ZSH

1
2
source <(kubectl completion zsh)  # 在 zsh 中设置当前 shell 的自动补全
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # 在你的 zsh shell 中永久地添加自动补全

kubectl shell

kubectl 已经有比较成熟的专用shell了,优化了自动补全,模糊匹配等功能:

在这里插入图片描述

kube-shell

开源项目kube-shell可以为kubectl提供自动的命令提示和补全,使用起来特别方便,推荐给大家。

Kube-shell有以下特性:

  • 命令提示,给出命令的使用说明
  • 自动补全,列出可选命令并可以通过tab键自动补全,支持模糊搜索
  • 高亮
  • 使用tab键可以列出可选的对象
  • vim模式

Mac下安装

1
pip install kube-shell --user -U

kube-prompt

kube-prompt

快速切换集群和 Namespace

生产环境一般是多集群,至少也是多 NS 的环境,免不了经常在不同集群和不同 NS 间切换。切换集群要修改环境变量、切换 NS 要在命令跟上 -n namespace,都不是太方便。而用kubectx 和 kubens 两个小工具可以实现快速切换。这俩在同一项目里:ahmetb/kubectx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 安装
sudo git clone https://github.com/ahmetb/kubectx /opt/kubectx
sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens

# 使用kubectx
# kubectx : 列出所有上下文
# kubectx <NAME> : 切换到某个上下文
$ kubectx minikube
Switched to context "minikube".
# kubectx - : 切换回上一个上下文
$ kubectx -
Switched to context "oregon".
# kubectx <NEW_NAME>=<NAME> : 重命名一个集群上下文
$ kubectx dublin=gke_ahmetb_europe-west1-b_dublin
Context "dublin" set.
Aliased "gke_ahmetb_europe-west1-b_dublin" as "dublin".
# kubectx <NEW_NAME>=. : 重命名当前上下文
# kubectx -d <NAME> : 删除上下文

# 使用kubens
# kubens : 列出所有的NS
# kubens <NS-NAME> : 切换当前NS
$ kubens kube-system
Context "test" set.
Active namespace is "kube-system".
# kubens - : 切换回上一个NS
$ kubens -
Context "test" set.
Active namespace is "default".

关于多集群切换的配置和上下文的概念可以参看官方文档,有中文。


00-kubectl 命令之自动补全和快速切换 namespace
https://flepeng.github.io/042-云原生-02-kubernetes-13-命令-kubectl-00-kubectl-命令之自动补全和快速切换-namespace/
作者
Lepeng
发布于
2023年3月1日
许可协议