Kubernetesクラスタを触る際の踏み台環境を構築した際に、最初にやっておきたいことの備忘録的メモ。
なお、Linuxでの想定でやっているので、非Linux環境の場合はバイナリの取得部分は自環境に併せて修正すること。
インストール後、ダウンロードしたり解凍したファイルが色々散らかった状態になるので、適当にworking directoryを作って作業するのがオススメ。
また、ここにないものでオススメあれば是非コメントいただけるとありがたいです。
Helm CLIのインストール
Helmは何かと使うので入れておく。
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
completionとalias設定
kubectlにタブ補完が効くようにcompletionを入れるのと、kでkubectlが叩けるようにaliasを張る。
echo "source <(kubectl completion bash)" >> ~/.bashrc
echo "alias k=kubectl" >> ~/.bashrc
echo "complete -o default -F __start_kubectl k" >> ~/.bashrc
. ~/.bashrc
krewのインストール
kubectl pluginが使えるようにkrewをインストールしておく。
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"'>> ~/.bashrc
. ~/.bashrc
kubectx, kubensのインストール
kubectxはクラスタの切り替え、kubensはNamespaceの切り替えを1コマンドで実現するコマンドである。
クラスタやNamespaceの切り替えにkubectl config
を毎回叩くのは面倒なので、とりあえず入れる。ついでに対話型で切り替えるためのfzfもインストールする。
sudo git clone https://github.com/ahmetb/kubectx /opt/kubectx
sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens
wget https://github.com/junegunn/fzf/releases/download/v0.57.0/fzf-0.57.0-linux_amd64.tar.gz
tar xvzf ./fzf-*
sudo install ./fzf /usr/local/bin
よく使うのでkx, knで叩けるようにaliasも設定する。
echo "alias kx=kubectx" >> ~/.bashrc
echo "alias kn=kubens" >> ~/.bashrc
. ~/.bashrc
なお、knativeを使う人はknコマンドがバッティングするので注意。
sternのインストール
sternは複数のPodのログを色付けして見やすく出力してくれるツールである。
kubernetesで複数のPodのログを見る時、sternがないとかなり見づらいのでsternを入れておく。
wget https://github.com/stern/stern/releases/download/v1.31.0/stern_1.31.0_linux_amd64.tar.gz
tar xvzf ./stern_*
sudo install stern /usr/local/bin/stern
kubecolorのインストール
kubecolorはkubectlに色をつける。すごく見やすくなるので自分は入れている。
wget https://github.com/kubecolor/kubecolor/releases/download/v0.4.0/kubecolor_0.4.0_linux_amd64.tar.gz
tar xzf kubecolor_*
rm -f kubecolor_0.4.0_linux_amd64.tar.gz
sudo install kubecolor /usr/local/bin
これの注意点として、kubectl neat pluginを挟むと-oyaml
してリダイレクトでファイル出力すると文字化けみたいなのが起きるので、kubectlにaliasは張らないこと。自分は以下のようにしている。
echo "alias k='kubecolor'" >> ~/.bashrc
kubectl neatを使う際は以下のような感じで使う。
k get pod nginx -o yaml | kubectl neat -f - > ./nginx.yaml
PS1にクラスタ名、Namespaceの出力
PS1とは待受プロンプトみたいな奴。↓でいうubuntu@jumphost:~$
の部分。
ubuntu@jumphost:~$
クラスタ名やNamespaceを常時プロンプトに表示しないと、思ってるクラスタやNamespaceでないところでdeleteしてしまったりすることがあり得るので、これは必ずやった方がいいと思う。
簡単な方法としては、kubectl config current-context
をPS1に書いておけばよい。
あと、有名どころのツールとしてはkube-ps1なんかもあるが、自分はpowerline-goが好きなので、これを使う。
※'24/12/25追記
最近はStarshipに乗り換えてるので、末尾にStarshipの導入方法を追記。
wget https://github.com/justjanne/powerline-go/releases/download/v1.24/powerline-go-linux-amd64
sudo install powerline-go-linux-amd64 /usr/local/bin/powerline-go
.bashrcに設定を追記するために以下を実行する。
cat << 'EOF' >> ~/.bashrc
function _update_ps1() {
PS1="$(/usr/local/bin/powerline-go -newline -cwd-mode plain -modules "time,kube,venv,user,host,cwd,perms,hg,jobs,exit,root" -colorize-hostname -theme low-contrast -error $?)"
}
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
EOF
. ~/.bashrc
フォントが入っていなくて表示が変になった場合は自PC(not 踏み台)にフォントもあわせてインストールしておく。
git clone https://github.com/powerline/fonts.git --depth=1
cd fonts
./install.sh
フォントのインストール後、ターミナル側でのフォント変更もお忘れなく。
k9sのインストール
k9sはインタラクティブにk8sリソースが触れるツール。initコンテナがコケた時に中を見たい時などに使っているで、こちらもとりあえず入れておく。
wget https://github.com/derailed/k9s/releases/download/v0.32.7/k9s_Linux_amd64.tar.gz
tar xvzf k9s_Linux_amd64.tar.gz
sudo install k9s /usr/local/bin/
追記:starshipのインストール
powerline-goの利用を止めてStarshipを使ってるので、こちらの導入方法をメモがてら記載。
以下でインストール。
curl -sS https://starship.rs/install.sh | sh
bashrcに設定の読み込みを追記。
echo 'eval "$(starship init bash)"' >> ~/.bashrc
Starshipの設定ファイルを置くディレクトリを作成。
mkdir ~/.config/
Starshipの設定ファイルを記述。Qiitaで上手く書けなかったので、GitHubにuploadしたものをダウンロードして利用。
wget https://raw.githubusercontent.com/imurata/public_misc/refs/heads/main/starship.toml -O ~/.config/starship.toml
設定をロード。
. ~/.bashrc
問題なければ以下のような感じのターミナルになる。
表示内容はざっくり以下となっている。
- 現在時刻
- ユーザ名
- IP
- カレントディレクトリ
- クラスタ名 (*)
- Namespace名 (*)
*:Gitやコードがあるディレクトリだと表示が変化
ここは好みに応じてstarship.toml
を修正するとターミナルライフがより楽しくなるはずだ。