kubectl是管理kubernetes集群的命令行工具,实际使用的频率非常之高,因此一个更方便的kubectl通常会带来很大的便利性。下面介绍几个很棒的工具。

zsh

其实我更喜欢用fish(传说中90后都在用),但是fish针对kubectl的生态还不够完善(主要是没有auto completion),因此还是先用zsh。

推荐用oh-my-zsh

kubectl auto completion

早期在敲kubectl命令行的时候,一个很头大的事情就是很多资源的名字需要鼠标复制粘贴。其实kubectl已经支持了自动补齐(auto completion),安装也很简单,参考官方文档就可以了。

为了方便我粘贴一下命令:

yum install bash-completion -y
echo "source <(kubectl completion bash)" >> ~/.bashrc

之后退出重新登录,或者source下~/.bashrc就可以了。

配置对多集群的访问

kubectl可以从个人pc上管理多个远端的kubernetes集群。

kubectl是通过.kube/config文件连接到集群,和在集群master上其实是类似的。config文件的结构如下。

apiVersion: v1
kind: Config
preferences: {}

clusters:
- cluster:
  name: development
- cluster:
  name: scratch

users:
- name: developer
- name: experimenter

contexts:
- context:
  name: dev-frontend
    cluster: development
    user: developer
- context:
  name: exp-scratch
    cluster: scratch
    user: experimenter

官方文档写的比较详细,实际有一个比较简单的做法,就是将两个集群的config文件做一下merge,创建2个context,关联到不同的cluster-user就可以了。

注意context不能以数字开头。配置好以后会有多个context。

 ~ kubectl config get-contexts
CURRENT   NAME      CLUSTER      AUTHINFO               NAMESPACE
*         c180      cluster180   kubernetes-admin-180   default
          c200      cluster200   kubernetes-admin-200   default

之后可以通过 kubectl config set-context xxx切换到不同的上下文来操作不同的集群。

kube-ctx/kubens

毕竟上面的命令还是太长了,社区还有kubectx项目来方便切换kubectx。

kubectx项目还提供了kubens命令,用来在同一个context下切换不同的namespace,切换后,输入kubectl命令就不需要总是-n {namespace},很方便。

kube-ps1

由于经常需要切换不同的集群,俗话说常在河边站哪有不湿鞋,很可能会误操作集群,这个时候有个提示就很帮了。

kube-ps1可以很方便的修改PS1。

不过由于用的是oh-my-zsh,其实可以不安装,直接在~/.zshrc开启plugin加上kube-ps1就可以了。

然后自定义一下。

PROMPT='$(kube_ps1)'$PROMPT
KUBE_PS1_PREFIX=""
KUBE_PS1_SYMBOL_DEFAULT=""
KUBE_PS1_DIVIDER="-"
KUBE_PS1_SUFFIX=" "

kube-ps1项目是给bash/zsh用的,fish的话可以用我的gist


到这里就可以了,我们有了自动完成、集群切换、namespace切换、命令行提示,很完美了。

其实fish除了kubectl自动补齐,其他的也都能完成。社区有一个插件号称可以达到自动补齐的功能,但是非常慢,基本不可用了(反应太慢)。有时间我看看能不能改进一下。

Ref: