Container Linux で kubectl completion を有効にする方法

Written by @ryysud

Feb 25, 2019 22:01 · 419 words · 1 minute read #container-linux #kubernetes

TL;DR

$ toolbox dnf -y install bash-completion
$ mkdir -p /etc/bash/bashrc.d
$ cat << EOT > /etc/bash/bashrc.d/kubectl-completion
source /var/lib/toolbox/-fedora-latest/usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
EOT

動作確認で使う実行環境

Vagrant を使ってローカルに起動した Container Linux Stable v1967.3.0 の VM を使用します。

$ wget https://raw.githubusercontent.com/coreos/coreos-vagrant/master/Vagrantfile
$ vi Vagrantfile
$ vagrant up
$ vagrant ssh core-01

Vagrantfile で update_channel のみ変更しています。

- $update_channel = "alpha"
+ $update_channel = "stable"

予め kubectl のバイナリをダウンロードしておきます。

core@core-01 ~ $ sudo mkdir -p /opt/bin
core@core-01 ~ $ sudo wget -P /opt/bin https://storage.googleapis.com/kubernetes-release/release/v1.13.3/bin/linux/amd64/kubectl
core@core-01 ~ $ sudo chmod a+x /opt/bin/kubectl

kubectl completion を利用するのに必要なもの

kubectl completion bash –help の実行結果から、以下2つの処理を行う必要があることがわかります。

  • bash-completion パッケージのインストール
  • kubectl completion bash の実行結果をシェルが起動したタイミングで読み込む

Container Linux での bash-completion パッケージのインストール方法

toolbox というものを使って bash-completion パッケージをインストールする。

toolbox dnf -y install bash-completion

kubectl completion bash の実行結果をシェルが起動したタイミングで読み込む

全ユーザーに適用させるために /etc/bash/bashrc.d 直下に配置して作業完了です。

#!/usr/bin/env bash

set -e

BASHRC_DIR=/etc/bash/bashrc.d

toolbox dnf -y install bash-completion
mkdir -p ${BASHRC_DIR}
cat << EOT > ${BASHRC_DIR}/kubectl-completion
source /var/lib/toolbox/-fedora-latest/usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
EOT

以上で設定が完了となります。手元で試してもらうと kubectl completion が有効になっていることがわかると思います。おしまい。

参考資料