はじめに
Azure Kubernetes Service の利用を開始する際、公式ドキュメントのチュートリアルに従えば、kubectl のインストールは az aks install-cli
で行う。しかし、バージョンを指定せずにこのコマンドを実行すると、サポートされない kubectl のバージョンを使うことになる可能性がある。AKSのサポートポリシーは、以下となっている。
kube-apiserver バージョンに対して 1 つ新しいまたは古い kubectl のマイナー バージョンを使用します。これは、kubectl の Kubernetes サポート ポリシーに一致しています。
https://docs.microsoft.com/ja-jp/azure/aks/supported-kubernetes-versions#supported-kubectl-versions
本記事では、AKSでの kubectl バージョン更新方法を紹介する。
手順
まずは、kubectl と Kube-apiserver のバージョンを確認する。
kubectl version
以下に上記コマンドの出力例を示す。
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.1", GitCommit:"c4d752765b3bbac2237bf87cf0b1c2e307844666", GitTreeState:"clean", BuildDate:"2020-12-18T12:09:25Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.10", GitCommit:"62876fc6d93e891aa7fbe19771e6a6c03773b0f7", GitTreeState:"clean", BuildDate:"2020-10-16T20:43:34Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
Client Version が kubectl のバージョン、 Server Version が Kube-apiserver のバージョンである。この例では、kubectl のマイナーバージョンが kube-apiserver のマイナーバージョンと 2 以上乖離しているため、サポート対象外の組み合わせとなっている。 az aks install-cli
をバージョン指定せずに実行すると、最新の kubectl バージョンがインストールされるため、このようなことが起こりがちである。
以下のコマンドで、クライアント端末の kubectl バージョンを更新する。
az aks install-cli --client-version 1.18.10
既存の kubectl を削除しておくなどの事前作業は不要である。
権限が足りないというエラーが出る場合は、sudo
を付けて実行する。
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.10", GitCommit:"62876fc6d93e891aa7fbe19771e6a6c03773b0f7", GitTreeState:"clean", BuildDate:"2020-10-15T01:52:24Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.10", GitCommit:"62876fc6d93e891aa7fbe19771e6a6c03773b0f7", GitTreeState:"clean", BuildDate:"2020-10-16T20:43:34Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
基本的には上記コマンドだけで kubectl のバージョンを更新することができる。しかし sudo
をつけた場合の kubectl バージョンが更新されていない場合がある。その場合は、/bin/kubectl を確認する。 /bin/kubectl が存在し、更新日時が古い場合は、/usr/local/bin/kubectl を /bin/kubectl にコピーする
ls -l /usr/local/bin
ls -l /bin/ | grep kube
# /bin/kubectl が存在し、更新日時が古い場合は、/usr/local/bin からコピーする
sudo cp /usr/local/bin/kubectl /bin/kubectl
sudo kubectl version