Mac の OS アップデート(Monterey)に伴い、kubectl コマンド実行時に下記の警告が出るようになりました。
Kubeconfig user entry is using deprecated API version client.authentication.k8s.io/v1alpha1. Run ‘aws eks update-kubeconfig’ to update.
AWS の EKS クラスタとの兼ね合いでしょうが、kubectl や aws cli のバージョンなどを確認しておきましょうか。
今回は、EKS を操作するための各種ツールの確認と kube-config の調整をしてみましたので紹介します。
kubectlのバージョン
kubectl のバージョンは以下の通り 1.22。
JSON っぽい感じで出力されますが、JSON ではないので jq コマンドでも整形できないのか・・・。
1 2 3 | $ kubectl version Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.10", GitCommit:"eae22ba6238096f5dec1ceb62766e97783f0ba2f", GitTreeState:"clean", BuildDate:"2022-05-24T12:49:54Z", GoVersion:"go1.16.15", Compiler:"gc", Platform:"darwin/amd64"} |
EKS クラスタは 1.20 なので、バージョン差の警告が出てる・・・。
まあ、ここは EKS クラスタのバージョンアップをするまで放置しておこう。
WARNING: version difference between client (1.22) and server (1.20) exceeds the supported minor version skew of +/-1
aws-cliのバージョン
AWS CLI も古いバージョンを放置しておくとハマることがあるので要注意。
1 2 3 | $ aws --version aws-cli/2.7.16 Python/3.10.5 Darwin/21.5.0 source/x86_64 prompt/off |
eksctlのバージョン
eksctl も定期的にアップデートしておくと、EKS 触る時に安心感があります。
1 2 3 | $ eksctl version 0.100.0 |
せっかくなので最新にしておきますか。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ brew upgrade eksctl weaveworks/tap/eksctl 0.100.0 -> 0.106.0 Error: Your Command Line Tools are too outdated. Update them from Software Update in System Preferences or run: softwareupdate --all --install --force If that doesn't show you any updates, run: sudo rm -rf /Library/Developer/CommandLineTools sudo xcode-select --install Alternatively, manually download them from: https://developer.apple.com/download/all/. You should download the Command Line Tools for Xcode 13.4. |
おやっ、バージョンアップには成功したっぽいけど別のエラーが・・・。
eksctl のコマンドも実行できなくなっています。
1 2 3 | $ eksctl version -bash: /usr/local/bin/eksctl: No such file or directory |
softwareupdate をしろってことなのかな?
あー、余計なことするんじゃなかったなぁ。
1 2 3 4 5 6 7 | $ softwareupdate --all --install --force Software Update Tool Finding available software Downloading macOS Monterey 12.5 Downloading: 51.25% |
そして、OS 再起動するという罠・・・。
softwareupdate ってそういうことだったのか。
developer tool みたいな、シェルのツールキットか何かかと思ってた。
これだけで eksctl が解決するわけではなかったので、出力された内容の通り以下を実行。
1 2 3 4 5 | $ sudo rm -rf /Library/Developer/CommandLineTools $ sudo xcode-select --install xcode-select: note: install requested for command line developer tools |
そして、地獄のコマンドラインツールのダウンロードが始まります。
最初、残り 300 時間とか表示されたので焦った・・・。
ただ、25 分以上のダウンロード待ちも長い。
そして、インストールもどれだけ時間掛かるんだよ・・・。
今度は xcode ですか。
これ、仕事始めにやってしまったら地獄ですね。
インストールが残り約 1 分から全然終わらないのですけど・・・。
そして eksctl コマンドが復活しないままなので、brew で install することに。
1 2 3 4 5 | $ brew install eksctl $ eksctl version 0.106.0-dev+f8c07980.2022-07-22T12:54:11Z |
あれっ、バージョンの後ろに dev とか日時とかが付いてますね。
なんだこれは。
アップデートしてみても、これが最新のようなのでこのままにしておきますか。
1 2 3 | $ brew upgrade eksctl Warning: eksctl 0.106.0 already installed |
update-kubeconfig
かなり道草を食いましたが、とっとと update-kubeconfig しちゃいましょう。
ちなみに、コンテキストにエイリアスを設定している場合、そのまま update-kubeconfig すると別の設定が追記されてしまいます。
そこで、~/.kube/config を vi で直接編集してもいいかなって思ったのですが、どうやらエイリアスのオプションがあるようです。
1 2 3 | $ aws eks update-kubeconfig --region ap-northeast-1 --name [クラスタ名] --alias [エイリアス名] Updated context arn:aws:eks:ap-northeast-1:999999999999:cluster/[クラスタ名] in /hoge/.kube/config |
これで v1beta1 に書き換わりました。
直接 config ファイルを編集する場合は、下記の apiVersion の部分が該当箇所になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | users: - name: [ユーザ名]@[クラスタ名].ap-northeast-1.eksctl.io user: exec: apiVersion: client.authentication.k8s.io/v1beta1 args: - token - -i - [クラスタ名] command: aws-iam-authenticator env: - name: AWS_STS_REGIONAL_ENDPOINTS value: regional - name: AWS_DEFAULT_REGION value: ap-northeast-1 |
まとめ
kubectl のコマンド実行時に client.authentication.k8s.io/v1alpha1 についての警告が表示される問題を解決しました。
v1alpha1 から v1beta1 に変わったということは、今後も v1 への移行が発生しそうですね。
kubernetes のプラグインはこの手の API バージョンが多いので、バージョンの追従が大変な部分もあります。
今回はバージョンの書き換えだけで済んだのでラッキーでしたが、定義などにも変更が入る場合は厄介。
ただ、update-kubeconfig が使えるケースなら自動で全部やってくれそうですね。