Bash
Zsh
kubernetes
kubectl
OriginalZ LabDay 19

kubectl completion: Bash/Zsh 向けの kubectl のシェル自動補完

はじめに

Kubernetes のコマンドラインツールである kubectl (cube control1) には Bash/Zsh 向けの shell autocompletion が実装されています。シェル自動補完を利用すればサブコマンドや Pod 名を途中まで入力すれば後は動的に値を候補から補完してくれます。もうリソース名をコピペする必要はありません。

kubectl completion

シェル補完を有効にする

Bash を使用していれば次のコマンドを実行して .bashrc に一行追記します。これで次からのシェルの実行で自動的にシェル補完が有効になります。

echo "source <(kubectl completion bash)" >> ~/.bashrc

macOS で Bash を使用しているなら、Homebrew で bash-completion を事前にインストールする必要があります。

## macOS 標準の Bash 3.2 を使用しているなら
brew install bash-completion
## Bash 4.1+ なら
brew install bash-completion@2

Zsh を使用しているなら、次のコマンドを実行して .zshrc に一行追記するだけです。

echo "source <(kubectl completion zsh)" >> ~/.zshrc

最近の kubectl completion トピックス

ショートフラグでのコンテキストのオーバーライドをサポート

kubectl のシェル補完はいくつかのフラグがコンテキストのオーバーライドに対応しており、例えば操作する対象のネームスペースを指定する --namespace フラグは Pod 名などのリソース名を入力する前に設定しておくことで、対象のネームスペースのリソースを補完候補として使用してくれるようになります。オーバーライドに対応しているオプションは次のとおりです。

  • --kubeconfig
  • --cluster
  • --user
  • --context
  • --namespace
  • --server

またこれまでショートフラグである -n (namespace) や -s (server) はオーバーライドに対応していませんでしたが、kubectl 1.9 からこれをサポートしました2。これによりタイプ数をより少なくすることができます。

ショートフラグでのコンテキストのオーバーライド

Zsh で --flag=value 形式でフラグを指定すると補完が壊れる問題を修正

--flag=value 形式でフラグを使うのが好きな方に朗報です。Zsh 向けの補完でこのイコールを使う形式でフラグを指定すると補完が壊れる問題がありましたが、これは kubectl 1.8 で修正しました3。kubeadm でも同様の問題がありましたが、これも修正されています。

`--flag=value` 形式でフラグを使うのが好きな方に

おわりに

kubectl completion は、現在のところ Bash/Zsh のみのサポートとなっています。Fish 向けには補完スクリプトがあるようです4。また kubectl のインタラクティブシェルである kube-prompt は、使用しているシェルに関係なく補完を利用することができるため、こちらもおすすめです。

より快適な Kubernetes ライフを目指して Kubernetes 1.6 から kubectl completion に継続的にコントリビュートしていきました。今後もよりよくなるように取り組んでいきます。


このエントリは、弊社 Z Lab のメンバーによる Z Lab Advent Calendar 2017 の19日目として当日業務時間中に書きました。