我可以在 zsh 中为 kubectl 使用自动补全吗?

Can I use autocompletion for kubectl in zsh?

我每天都发现自己在做...

$ kubectl --context=foo get pods
  < copy text manually >
$ kubectl --context=foo logs dep1-12345678-10101

我想循环浏览与

匹配的资源
$ kubectl --context=foo logs dep1<TAB>

但这似乎对我的库存设置没有任何作用。有什么想法吗?

osx 10.12.3 kubectl v1.4.5 zsh zsh 5.2 (x86_64-apple-darwin16.0)

bashzsh 都支持当您按下 <TAB> 时完成打印命令的脚本。该功能称为可编程完成,您可以在此处找到更多详细信息:zsh completion

幸运的是,您不需要编写自己的脚本 - kubectl 为 zsh > 5.2 提供了它。试试 运行 这个命令:source <(kubectl completion zsh).

另一种选择是使用此工具:https://github.com/mkokho/kubemrr (免责声明:我是作者)。它存在的原因是因为标准完成脚本太慢了——Kubernetes 集群回复所有 pod 名称可能需要几秒钟。但是 kubemrr 将名称保留在本地,因此响应几乎立即返回。

我将此功能添加到我的 $HOME/.zshrc.

它将延迟加载 kubectl

的完整功能
kubectl () {
    command kubectl $*
    if [[ -z $KUBECTL_COMPLETE ]]
    then
        source <(command kubectl completion zsh)
        KUBECTL_COMPLETE=1 
    fi
}

在线版本:

(( ${+commands[kubectl]} )) && alias kubectl='test -z $C_KUBE && C_KUBE=1 && source <(command kubectl completion zsh); command kubectl'

对于oh-my-zsh,启用kubectl auto-completion最简单的方法是在~/.zshrc中添加kubectl插件:

# somewhere in your .zshrc
# kubectl: The kubectl completion script for Zsh can be generated with the command kubectl completion zsh. Sourcing the completion script in your shell enables kubectl autocompletion.
# kube-ps1: A script that lets you add the current Kubernetes context and namespace configured on kubectl to your Bash/Zsh prompt strings
plugins=(git kubectl Kube-ps1)

尝试在.zshrc 文件的开头添加一行

autoload -U +X compinit && compinit

然后在下面再添加一行

source <(kubectl completion zsh)