はじめに
Kubernetes のコマンドラインツールである kubectl (cube control1) には Bash/Zsh 向けの shell autocompletion が実装されています。シェル自動補完を利用すればサブコマンドや Pod 名を途中まで入力すれば後は動的に値を候補から補完してくれます。もうリソース名をコピペする必要はありません。
シェル補完を有効にする
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 でも同様の問題がありましたが、これも修正されています。
おわりに
kubectl completion は、現在のところ Bash/Zsh のみのサポートとなっています。Fish 向けには補完スクリプトがあるようです4。また kubectl のインタラクティブシェルである kube-prompt は、使用しているシェルに関係なく補完を利用することができるため、こちらもおすすめです。
より快適な Kubernetes ライフを目指して Kubernetes 1.6 から kubectl completion に継続的にコントリビュートしていきました。今後もよりよくなるように取り組んでいきます。
このエントリは、弊社 Z Lab のメンバーによる Z Lab Advent Calendar 2017 の19日目として当日業務時間中に書きました。
-
The canonical pronunciation of kubectl is "cube control". https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md ↩