75
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-19

はじめに

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日目として当日業務時間中に書きました。

  1. The canonical pronunciation of kubectl is "cube control". https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md

  2. https://github.com/kubernetes/kubernetes/pull/54406

  3. https://github.com/kubernetes/kubernetes/pull/48553

  4. https://qiita.com/Ladicle/items/09c129d54a8bb3e13ebb

75
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
75
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?