kubectl や helm のサブコマンド候補を自動補完する方法
kubectl や helm コマンドはサブコマンドがたくさんあり、全てを正確に覚えておくのは大変です。サブコマンドを含めると入力内容も長くなるので、タイプミスも起こりがちです。そこで、コマンド入力中にサブコマンドの候補を表示したり、自動補完する autocompletion という機能の導入解説をします。
目次
前提
- 本記事で使用している OS は CentOS 8
 - helm は v3 を使用
 
bash-completion のインストール
はじめに bash-completion パッケージが OS に入っていない場合は、インストールします。
sudo dnf -y install bash-completionkubectl コマンドのインストール
最新の kubectl バイナリファイルをダウンロードします。既に kubectl を導入済みの場合はこの手順をスキップしてください。
コマンドを実行するとカレントディレクトリに kubectl バイナリファイルがダウンロードされます。
sudo curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"ダウンロードしたファイルに実行権限を付与します。
sudo chmod +x ./kubectlkubectl バイナリを PATH のいずれかに移動します。ここでは、/usr/local/bin の下に移動しています。
$ echo $PATH
/home/admin/.local/bin:/home/admin/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
$ sudo mv ./kubectl /usr/local/bin/kubectl コマンドが使えるようになったか確認します。
kubectl version --clientkubectl の autocompletion を有効にする
以下のコマンドを実行して .bashrc に “kubectl completion bash” の行を追記します。
echo 'source <(kubectl completion bash)' >>~/.bashrc上記を実行すると以下のように .bashrc ファイルに行が追加されます。
$ cat .bashrc | tail -n 3
# User specific aliases and functions
source <(kubectl completion bash)
$.bashrc ファイルを再読み込みして設定を反映させます。
source ~/.bashrckubectl autocompletion の動作確認
kubectl コマンドの冒頭 “ku” を入力して [tab] ボタンを押します。そうすると、”kubectl” と入力されます。そこからさらに [tab] ボタンを 2回ほど押すと、kubectl コマンドのサブコマンド候補が以下のように表示されます。なお、各環境によって OS にインストールされているコマンド状況は異なるため、多少 autocompletion(自動補完)される条件が異なる可能があります。
$ kubectl 
alpha          auth           cordon         diff           get            patch          run            version
annotate       autoscale      cp             drain          help           plugin         scale          wait
api-resources  certificate    create         edit           kustomize      port-forward   set            
api-versions   cluster-info   debug          exec           label          proxy          taint          
apply          completion     delete         explain        logs           replace        top            
attach         config         describe       expose         options        rollout        uncordon       
$
helm コマンドのインストール
次に helm コマンドも自動補完を有効にします。helm コマンドを導入していない場合は、下記コマンドでインストールします。コマンドを実行するとカレントディレクトリに get_helm.sh というファイル名でスクリプトファイルがダウンロードされます。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3次の手順で helm をインストールします。
$ chmod 700 get_helm.sh
$ ./get_helm.sh 
Downloading <https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz>
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
$もしこの時に以下のようなエラーが出る場合は、メッセージ出力にあるとおり「$ sudo dnf install openssl」で openssl パッケージを入れるか、「VERIFY_CHECKSUM=false」を実行して回避してください。
$ ./get_helm.sh 
In order to verify checksum, openssl must first be installed.
Please install openssl or set VERIFY_CHECKSUM=false in your environment.
Failed to install helm
        For support, go to <https://github.com/helm/helm>.
$helm autocompletion の有効化
helm コマンドをインストールしたら、下記コマンドで現在操作しているシェルに helm の自動補完機能を有効にすることができます。
source <(helm completion bash)シェルを起動した時に毎回有効にするには、以下のコマンドを root ユーザーで実行します。
helm completion bash > /etc/bash_completion.d/helmなお、手元の環境では sudo コマンドを付けても以下のように Permission denied となりました。関連フォルダやファイルをチェックしてパーミッションには問題がなく、原因が分かりませんでした。そのため、素直に root ユーザーになって上記コマンドを実行して回避しました。”helm completion bash” コマンドは、autocompletion 機能を提供するシェルの内容を出力するのみの動作になります。ここの手順では、その出力を /etc/bash_completion.d/helm というファイルに書き込むという内容になります。
$ sudo helm completion bash > /etc/bash_completion.d/helm 
-bash: /etc/bash_completion.d/helm: Permission deniedhelm autocompletion の動作確認
helm と入力してから [tab] ボタンを 2回ほど押してみます。そうすると、helm コマンドのサブコマンド候補が以下のように出力されます。
helm 
completion  (generate autocompletion scripts for the specified shell)
create      (create a new chart with the given name)
dependency  (manage a chart's dependencies)
env         (helm client environment information)
get         (download extended information of a named release)
help        (Help about any command)
history     (fetch release history)
install     (install a chart)
lint        (examine a chart for possible issues)
list        (list releases)
package     (package a chart directory into a chart archive)
plugin      (install, list, or uninstall Helm plugins)
pull        (download a chart from a repository and (optionally) unpack it in local directory)
push        (push a chart to remote)
registry    (login to or logout from a registry)
repo        (add, list, remove, update, and index chart repositories)
rollback    (roll back a release to a previous revision)
search      (search for a keyword in charts)
show        (show information of a chart)
status      (display the status of the named release)
template    (locally render templates)
test        (run tests for a release)
uninstall   (uninstall a release)
upgrade     (upgrade a release)
verify      (verify that a chart at the given path has been signed and is valid)
version     (print the client version information)
#