はじめに
業務でKubernetesに触れる機会が多くなってきたのですが、kubectlコマンドって地味に長くて打つのが少し面倒に感じていました。
例えば、kubectl get pods -n <namespace>やkubectl logs <pod-name> -n <namespace> --previousなど、名前空間指定が絡むと特に長くなりがちです。
解消できないか調べたところ、エイリアスやコマンド補完が出来るように設定できることを学んだので、共有したいと思い書き始めました。
CKAなどの資格を受験する際にも、最初に設定しておくと効率的に試験を進めることが出来るようなので、是非設定してみてください。
想定環境
- OS:Ubuntu24.04(WSL)
- シェル:zsh(今回はbashのパターンも書きます)
コマンド補完設定
bash
以下のコマンドを実行して、現在開いているターミナルにコマンド補完を設定します。
$ source <(kubectl completion bash)
次に、以下の内容を~/.bashrcに追記してbashシェルでのコマンド補完を永続化します。
source <(kubectl completion bash)
zsh
以下のコマンドを実行して、現在開いているターミナルにコマンド補完を設定します。
$ source <(kubectl completion zsh)
次に、以下の内容を~/.zshrcに追記してzshシェルでのコマンド補完を永続化します。
[[ $commands[kubectl] ]] && source <(kubectl completion zsh)
エイリアス設定
1. kubectlコマンドを「k」だけで実行できるようにする
~/.bashrcまたは~/.zshrcを開き、以下を追記します。
bash/zsh共通
alias k=kubectl
2. エイリアスを使用していてもコマンド補完が出来るようにする
同様に~/.bashrcまたは~/.zshrcに以下を追記します。
bash
complete -o default -F __start_kubectl k
complete:「補完ルールを定義する」ためのコマンド
-o default:後述する関数(__start_kubectl)が適切な補完候補を見つけられなかった場合に、Bash標準のファイル名補完などを実行するように指示するオプション。これを追加しておくことで、k apply -f [Tab]と打った際にカレントディレクトリのyamlファイルなどが候補に出てくるようになる
-F __start_kubectl k:kubectlのインストール時に生成される、補完専用のシェル関数をエイリアスに適用するオプション
zsh
zshでも同じ設定で対応できると思っていたのですが、command not found: completeのエラーが発生してしまいました。
completeコマンドはzshでは使えないようなので、代わりに以下の設定を使います。
compdef k=kubectl
注意
~/.zshrcに下記の記載がない場合は、ファイルの冒頭に追記しておく必要があります。
autoload -Uz compinit
compinit
まとめ
上記の設定はまとめて追記することもできます。以下はcatコマンドで一括追加する例です。
bash
$ cat <<EOF >> ~/.bashrc
source <(kubectl completion bash)
alias k=kubectl
complete -o default -F __start_kubectl k
EOF
$ source ~/.bashrc
zsh
~/.zshrcにautoload -Uz compinitおよびcompinitがまだ記載されていない場合は、以下のコードブロックの先頭に追加してください。
$ cat <<'EOF' >> ~/.zshrc
[[ $commands[kubectl] ]] && source <(kubectl completion zsh)
alias k=kubectl
compdef k=kubectl
EOF
$ source ~/.zshrc
少しでも役に立っていれば幸いです。見ていただきありがとうございました。