LoginSignup
0
0

More than 3 years have passed since last update.

kubectlやhelmコマンドのバージョンを切り替える

Posted at

helmコマンドはクライアント側とサーバー側のバージョンが異なると上手く動かないことがあります。特にIBM Cloud Privateはv3.1.2でもhelmのバージョンがv2.9.1と古いです。kubectlhelmに比べ寛容なのであまり困らないですが、サーバーとクライアントでバージョンが一致していた方が望ましいと思います。

kubectlhelmのバージョンを簡単に切り替えるよいツールがあったら教えて欲しいのですが、適当に探した限りみつからなかったので、適当なシェルスクリプトでシンボリックリンクで切り替えることにしました。環境はMacです。他によいやり方があったら教えて下さい。

使い方

各バージョンのバイナリをダウンロードして/usr/local/binに置いておきます。

$ ls -l /usr/local/bin/helm*
lrwxr-xr-x  1 sotoiwa  admin        39  5  8 13:32 /usr/local/bin/helm -> /usr/local/bin/helm-v2.9.1-darwin-amd64
-rwxr-xr-x@ 1 sotoiwa  staff  41593416  1 23 06:29 /usr/local/bin/helm-v2.12.3-darwin-amd64
-rwxr-xr-x  1 sotoiwa  admin  34396224  5 15  2018 /usr/local/bin/helm-v2.9.1-darwin-amd64
$

スクリプト(後述)を実行します。

$ switch-helm.sh
Current helm version:
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

Available helm version:
/usr/local/bin/helm-v2.12.3-darwin-amd64
/usr/local/bin/helm-v2.9.1-darwin-amd64

/usr/local/bin/helm-v2.12.3-darwin-amd64 <- use this version? (y/n/a):n
Skip!

/usr/local/bin/helm-v2.9.1-darwin-amd64 <- use this version? (y/n/a):y
helm version changed!

Current helm version:
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

Done!
$

スクリプト

シンボリックリンクを張り替えるだけのスクリプトです。COMMAND変数を変えればkubectlでも同じことができると思います。

swicth-helm.sh
#/bin/bash

set -eu

COMMAND=helm

# コマンドがシンボリックリンクではない場合は終了
if [ ! -L /usr/local/bin/${COMMAND} ]; then
  echo ${COMMAND} is not symbolic link
  exit 1
fi

# 現在のバージョンを表示
echo "Current ${COMMAND} version:"
/usr/local/bin/${COMMAND} version --client
echo ""

# 利用可能なバージョンを表示
echo "Available ${COMMAND} version:"
find -f /usr/local/bin/${COMMAND}* -type f
echo ""

# シンボリックリンクではないファイルについて繰り返し
for v_command in $(find -f /usr/local/bin/${COMMAND}* -type f)
do
  while true
  do
    read -p "${v_command} <- use this version? (y/n/a):" yn
    case $yn in
      [yY]*)
        rm -f /usr/local/bin/${COMMAND}
        ln -s ${v_command} /usr/local/bin/${COMMAND}
        echo "${COMMAND} version changed!"
        echo ""
        echo "Current ${COMMAND} version:"
        /usr/local/bin/${COMMAND} version --client
        echo ""; echo "Done!"; exit ;;
      [nN]*)
        echo "Skip!"; echo ""; break ;;
      [aA]*)
        echo "Abort!"; echo ""; exit ;;
    esac
  done
done
echo "Done!"

本当は最初に一覧を表示して数字とかで選ぶようにしたかったのですが、そのように作るやり方がすぐにわからなかったのでぐるぐる回すようにしました。

0
0
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
0
0