zaki work log

作業ログやら生活ログやらなんやら

[kubectl] kubectxとfzfでコンテキスト切り替えをインタラクティブに行う

コンテキストなどの切り替えが楽になるやつ。
職場の環境は切り替えが大量に発生するので使ってるけど、個人環境では使ってなかったので入れておいた。

kubectx, kubens

引数にコンテキスト名・ネームスペース名を指定するだけで切り替わるコマンド。

github.com

インストール

$ curl -LO https://github.com/ahmetb/kubectx/releases/download/v0.9.1/kubectx_v0.9.1_linux_x86_64.tar.gz
$ curl -LO https://github.com/ahmetb/kubectx/releases/download/v0.9.1/kubens_v0.9.1_linux_x86_64.tar.gz

自分の環境では/usr/local/binへ配置。

$ sudo tar xf kubectx_v0.9.1_linux_x86_64.tar.gz -C /usr/local/bin/ kubectx
$ sudo tar xf kubens_v0.9.1_linux_x86_64.tar.gz -C /usr/local/bin/ kubens

確認

$ kubectx --version
error: unsupported option '--version'
$ kubectx --version
error: failed to switch context: no context exists with the name: "version"
$ kubectx --help
USAGE:
  kubectx                       : list the contexts
  kubectx <NAME>                : switch to context <NAME>
  kubectx -                     : switch to the previous context
  kubectx -c, --current         : show the current context name
  kubectx <NEW_NAME>=<NAME>     : rename context <NAME> to <NEW_NAME>
  kubectx <NEW_NAME>=.          : rename current-context to <NEW_NAME>
  kubectx -u, --unset           : unset the current context  
  kubectx -d <NAME> [<NAME...>] : delete context <NAME> ('.' for current-context)
                                  (this command won't delete the user/cluster entry
                                   referenced by the context entry)
  kubectx -h,--help             : show this message
[zaki@cloud-dev bin]$ kubens --help
USAGE:
  kubens                    : list the namespaces in the current context
  kubens <NAME>             : change the active namespace of current context
  kubens -                  : switch to the previous namespace in this context
  kubens -c, --current      : show the current namespace
  kubens -h,--help          : show this message

バージョン確認はなかった。

コンテキスト確認

f:id:zaki-hmkc:20200919111915p:plain

だいたいこれと一緒。

$ kubectl config get-contexts -o name
context-c2daobwhbsg
kind-multi-1.15
kind-multicluster
kubernetes-admin@kubernetes
$ kubectl config get-contexts
CURRENT   NAME                          CLUSTER               AUTHINFO            NAMESPACE
*         context-c2daobwhbsg           cluster-c2daobwhbsg   user-c2daobwhbsg    
          kind-multi-1.15               kind-multi-1.15       kind-multi-1.15     
          kind-multicluster             kind-multicluster     kind-multicluster   
          kubernetes-admin@kubernetes   kubernetes            kubernetes-admin    

コンテキスト切り替え

f:id:zaki-hmkc:20200919112004p:plain

before

$ kubectl config current-context
context-c2daobwhbsg

切り替え

$ kubectx kind-multicluster
✔ Switched to context "kind-multicluster".

after

$ kubectl config current-context
kind-multicluster

だいたいこれと一緒。

$ kc config use-context kind-multicluster 
Switched to context "kind-multicluster".

zaki-hmkc.hatenablog.com

fzf

これだけだとkubectl config use-context <context-name>と(タイプ数が違う程度で)さほど変わらないけれど、fzfを併用することで、インタラクティブにコンテキストやネームスペースを切り替えできるようになる。

github.com

CentOS(yum)用はリポジトリなさげ。「Using git」でインストールする。

$ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
$ ~/.fzf/install

実行例

[zaki@cloud-dev ~]$ ~/.fzf/install
Downloading bin/fzf ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   650  100   650    0     0   1275      0 --:--:-- --:--:-- --:--:--  1277
100 1133k  100 1133k    0     0   437k      0  0:00:02  0:00:02 --:--:--  580k
  - Checking fzf executable ... 0.22.0
Do you want to enable fuzzy auto-completion? ([y]/n) y
Do you want to enable key bindings? ([y]/n) y

Generate /home/zaki/.fzf.bash ... OK
Generate /home/zaki/.fzf.zsh ... OK

Do you want to update your shell configuration files? ([y]/n) y

Update /home/zaki/.bashrc:
  - [ -f ~/.fzf.bash ] && source ~/.fzf.bash
    + Added

Update /home/zaki/.zshrc:
  - [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
    + Added

Finished. Restart your shell or reload config file.
   source ~/.bashrc  # bash
   source ~/.zshrc   # zsh

Use uninstall script to remove fzf.

For more information, see: https://github.com/junegunn/fzf

これで~/.bashrcには

[ -f ~/.fzf.bash ] && source ~/.fzf.bash

が追記される。

これで新しいシェルを起動するか、sourceで内容を取り込めば、

$ kubectx

の実行が「現在値の出力」だったのが「リストから上下キーで選択・文字入力でインクリメンタルサーチ・Enterで変更」という動作に拡張される。

実行時のインタラクティブな画面など詳しくはこちら

alias例

kubectlkcで運用してるので、kubectxkxkubensknにしてる。

alias kc=kubectl
source <(kubectl completion bash)
complete -o default -F __start_kubectl kc

alias kx=kubectx
alias kn=kubens