IBM Cloud Shell は Web ベースのシェル実行環境で IBM Cloud CLI や いくつかのツールが導入されている環境である。
この環境で IBM Cloud Kubernetes Service や Red Hat OpenShift on IBM Cloud などのマネージド Kubernetes 環境を管理する際に kubectl や oc といったツールを利用することになるが、これらはapiserver のバージョンと +1 から -1 までの間のバージョンを使用しないといけない制約がある。一方で IBM Cloud Shell には少し古いバージョンの kubectl しか導入されていないことがあり、そのような場合に新しいバージョンの kubectl を利用できる手順を整理します。
IBM Cloud Shell に導入済みの kubectl
IBM Cloud にログインして Cloud Shell にアクセスします。
早速導入されている kubectl について確認します。v1.22.3 が導入されていることが確認できます。ちょっと古めのバージョンですね。
user@cloudshell:~$ kubectl version --client=true --output=yaml
clientVersion:
buildDate: "2021-10-27T18:41:28Z"
compiler: gc
gitCommit: c92036820499fedefec0f847e2054d824aea6cd1
gitTreeState: clean
gitVersion: v1.22.3
goVersion: go1.16.9
major: "1"
minor: "22"
platform: linux/amd64
user@cloudshell:~$ which kubectl
/usr/local/bin/kubectl
新しいバージョンの kubectl を導入する
インストール済みの kubectl を上書きすることはできないので、別の場所に導入してパスを通して利用します。
新しいバージョンの kubectl のモジュールをダウンロードし、実行できるようにします。いくつかのやり方が考えられますが、kubectl コマンドの実行時に新しいバージョンが実行されるようにします。
新しいモジュールをダウンロードし、実行用のパーミッションを与え、環境変数にカレントディレクトリを追加します。
USER@cloudshell:~$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 138 100 138 0 0 2190 0 --:--:-- --:--:-- --:--:-- 2190
100 47.5M 100 47.5M 0 0 47.5M 0 0:00:01 0:00:01 --:--:-- 55.1M
USER@cloudshell:~$ ls -la
total 48740
drwxrwxrwx 4 root root 4096 Nov 7 16:53 .
drwxr-xr-x 1 root root 4096 Nov 7 16:52 ..
-rw-r--r-- 1 USER user 219 Nov 7 16:52 .bash_logout
-rw-r--r-- 1 USER user 4041 Nov 7 16:52 .bashrc
-rw-rw-r-- 1 USER user 49872896 Nov 7 16:53 kubectl
drwxr-xr-x 3 USER user 4096 Nov 7 16:52 .npm
-rw------- 1 USER user 14 Nov 7 16:52 .npmrc
-rw-r--r-- 1 USER user 998 Nov 7 16:52 .profile
drwxr-xr-x 14 USER user 4096 Nov 7 16:52 .pyenv
USER@cloudshell:~$ chmod 755 kubectl
USER@cloudshell:~$ ls -la
total 48740
drwxrwxrwx 4 root root 4096 Nov 7 16:53 .
drwxr-xr-x 1 root root 4096 Nov 7 16:52 ..
-rw-r--r-- 1 USER user 219 Nov 7 16:52 .bash_logout
-rw-r--r-- 1 USER user 4041 Nov 7 16:52 .bashrc
-rwxr-xr-x 1 USER user 49872896 Nov 7 16:53 kubectl
drwxr-xr-x 3 USER user 4096 Nov 7 16:52 .npm
-rw------- 1 USER user 14 Nov 7 16:52 .npmrc
-rw-r--r-- 1 USER user 998 Nov 7 16:52 .profile
drwxr-xr-x 14 USER user 4096 Nov 7 16:52 .pyenv
USER@cloudshell:~$ echo $PATH
/home/USER/.pyenv/shims:/home/USER/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/usr/local/istio/bin:/opt/gradle/gradle-6.0.1/bin:/opt/ant/bin:/opt/maven/bin
USER@cloudshell:~$ export PATH=~:$PATH
USER@cloudshell:~$ echo $PATH
/home/USER:/home/USER/.pyenv/shims:/home/USER/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/usr/local/istio/bin:/opt/gradle/gradle-6.0.1/bin:/opt/ant/bin:/opt/maven/bin
USER@cloudshell:~$ which kubectl
~/kubectl
新しい kubectl のバージョンを確認する
改めて kubectl のバージョンを確認すると、執筆時における最新の安定版である v1.28.3 が利用されていることがわかります。これで新しいバージョンのクラスターも管理できます。
USER@cloudshell:~$ kubectl version --client=true --output=yaml
clientVersion:
buildDate: "2023-10-18T11:42:52Z"
compiler: gc
gitCommit: a8a1abc25cad87333840cd7d54be2efaf31a3177
gitTreeState: clean
gitVersion: v1.28.3
goVersion: go1.20.10
major: "1"
minor: "28"
platform: linux/amd64
kustomizeVersion: v5.0.4-0.20230601165947-6ce0bf390ce3
まとめ
Cloud Shellはセッションが終了すると環境が維持されないので、起動のたびに新しいバージョンに置き換える必要があります。多少面倒ですが必要なバージョンのツールを都度用意しましょう。最新の安定版kubectlを導入するには以下のコマンドを実行します
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod 755 kubectl
export PATH=~:$PATH
特定のバージョンのkubectlを導入するには以下のコマンドを実行します。以下はv1.26.10の例です。バージョンの文字列を必要とするバージョンのものに置き換えれば所望のバージョンを導入できます。
curl -LO "https://dl.k8s.io/release/v1.26.10/bin/linux/amd64/kubectl"
chmod 755 kubectl
export PATH=~:$PATH