• 多套Kubernetes集群,如何快速切换?
  • 有多个Namespace需要来回切换,除了每次跟上-n参数外有没有更快捷的方法?
  • ……

为了解决上束问题,Kubernetes从1.12开始推出了Krew,来管理各种kubectl插件,扩展kubectl的功能,在这之前只能自己写实现。

krew是用来管理kubectl插件的工具,类似于yum、apt、dnf,使用它可以很方便获取我们想要的插件来扩展kubectl的功能。

安装Krew

Mac 或者 Linux:

  1. 在终端中执行下边命令安装krew,依赖git

    1
    2
    3
    4
    5
    6
    7
    8
    
    (
      set -x; cd "$(mktemp -d)" &&
      curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/download/v0.3.3/krew.{tar.gz,yaml}" &&
      tar zxvf krew.tar.gz &&
      KREW=./krew-"$(uname | tr '[:upper:]' '[:lower:]')_amd64" &&
      "$KREW" install --manifest=krew.yaml --archive=krew.tar.gz &&
      "$KREW" update
    )
    
  2. 添加环境变量。

    1
    
    export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
    

    将上边命令追加到 .bashrc 或者 .zshrc,然后source生效

  3. 验证。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    ➜  ~ kubectl krew version
    OPTION        VALUE
    GitTag        v0.3.2
    GitCommit     bd754e1
    IndexURI      https://github.com/kubernetes-sigs/krew-index.git
    BasePath      /Users/xnile/.krew
    IndexPath     /Users/xnile/.krew/index
    InstallPath   /Users/xnile/.krew/store
    DownloadPath  /var/folders/jd/tl7sc7d15qb41s5jm1hwtwtr0000gn/T/krew-downloads
    BinPath       /Users/xnile/.krew/bin
    

安装插件

  • 查看所有可用的插件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    ➜  ~ kubectl krew search
    NAME                            DESCRIPTION                                         INSTALLED
    access-matrix                   Show an RBAC access matrix for server resources     no
    auth-proxy                      Authentication proxy to a pod or service            no
    bulk-action                     Do bulk actions on Kubernetes resources.            no
    ca-cert                         Print the PEM CA certificate of the current clu...  no
    change-ns                       View or change the current namespace via kubectl.   no
    config-cleanup                  Automatically clean up your kubeconfig              no
    cssh                            SSH into Kubernetes nodes                           no
    ctx                             Switch between contexts in your kubeconfig          yes
    custom-cols                     A "kubectl get" replacement with customizable c...  no
    debug                           Attach ephemeral debug container to running pod     no
    ...
    
  • 安装插件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    ➜  ~ kubectl krew install ns
    Updated the local copy of plugin index.
    Installing plugin: ns
    CAVEATS:
    \
     |  If fzf is installed on your machine, you can interactively choose
     |  between the entries using the arrow keys, or by fuzzy searching
     |  as you type.
     |
     |  See https://github.com/ahmetb/kubectx for customization and details.
    /
    Installed plugin: ns
    WARNING: You installed a plugin from the krew-index plugin repository.
       These plugins are not audited for security by the Krew maintainers.
       Run them at your own risk.
    

常用的插件

我常用的插件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
➜  kubectl krew list
PLUGIN             VERSION
access-matrix      v0.4.2
cssh               v1.0.1
ctx                v0.7.1
custom-cols        v0.0.3
df-pv              v0.1.0
fleet              v0.1.3
iexec              v1.2.0
ingress-nginx      v0.25.0
krew               v0.3.2
neat               v1.0.0
node-shell         v1.0.0
ns                 v0.7.1
open-svc           v2.2.0
outdated           v0.3.2
prune-unused       v0.5.1
rbac-lookup        v0.3.0
rbac-view          v0.1.0
resource-capacity  v0.3.2
tail               v0.10.1

插件开发

kubectl插件开发不限制开发语言,可以使用任意语言,即可以是高级语言编译出来的二进制文件,也可以是shell等脚本文件,只要最终将文件以kubectl-的方式命名并放到PATH能找到路径中即可。

如果你会Go语言,官方提供了一个cli-runtime 项目来方便你编写插件。

另外官方还提供了一个Go编写kubectl插件的例子https://github.com/kubernetes/sample-cli-plugin。

参考

https://github.com/kubernetes-sigs/krew/blob/v0.1.0-alpha.1/docs/KREW_ARCHITECTURE.md