EBS CSI Driver EKS Add-onをアップグレードしたらPodがエラーを吐き続けるようになった
状況
- EKSクラスターの 1.29 → 1.30のアップグレードに取り組んでいました。
- アップグレードの一環で、インストール済 EKS Add-onのアップグレードも行ないます。
- 1.30に対応している、最新版のversionまでアップグレードします。
- EBS CSI Driver EKS Add-onを利用していたので、こちらを
v1.31.0-eksbuild.1
から、当時1.30対応の最新版だったv1.38.1-eksbuild.2
にアップグレードしました。
エラー発生
クラスター & EKS add-on のアップグレードを適用後、kube-system namespaceのebs-csi-controller podが以下のエラーを吐き続ける(毎分数回程度)ようになりました。
E0205 08:34:45.179352 1 reflector.go:158] "Unhandled Error" err="k8s.io/client-go@v0.31.0/tools/cache/reflector.go:243: Failed to watch *v1.VolumeSnapshotContent: failed to list *v1.VolumeSnapshotContent: the server could not find the requested resource (get volumesnapshotcontents.snapshot.storage.k8s.io)" logger="UnhandledError"
エラー原因特定調査
エラーメッセージによると、volumesnapshotcontents.snapshot.storage.k8s.io
CRDがクラスターに無いためにエラーになっています。 kubectl get crd
で確認したところ確かにこのCRDはありませんでした。
エラー発生 EKS add-on versionの特定
EBS CSI Driver EKS Add-onのマイナーversionをひとつずつ下げ、どのマイナーversionから本エラーが発生するのか確かめました。
v1.38.1-eksbuild.2
から以下のようにマイナーversionを下げていきました。
v1.37.0-eksbuild.2
にダウングレード → エラー出続けるv1.36.0-eksbuild.2
にダウングレード → エラー出続けるv1.35.0-eksbuild.2
にダウングレード → エラー止まった
上記より、 1.36からエラーが発生し始めたことが推測できます。
※ 1.36 には パッチversionのeksbuild
以降の値が一つ小さい v1.36.0-eksbuild.1
も存在します。そのため厳密には v1.36.0-eksbuild.1
→ v1.36.0-eksbuild.2
間でエラーが発生し始めている可能性もあります。ここまで細かく調査はできておりません。
v1.36の変更点確認
CHANGELOGは以下です。
記載内容の「[ACTION REQUIRED] Update to the EBS CSI Driver IAM Policy」が怪しいかと思いましたが、調査の結果無関係なことがわかりました。
VolumeSnapshotContent CRDについて調べる
v1.36を深堀るのは諦めて、VolumeSnapshotContent CRDについて調べていると以下のAWSブログを発見しました。
この中に以下記述がありました。
Amazon EKS CSI ドライバーのスナップショット機能を使用するには、EKS アドオンをインストールする前に、external-snapshotter をインストールする必要があります。external-snapshotter は以下のコンポーネントを順にインストールする必要があります。
- VolumeSnapshotClass、VolumeSnapshot および VolumeSnapshotContent の CustomResourceDefinition (CRD)
- RBAC (ClusterRole、ClusterRoleBinding など)
- コントローラーの Deployment
上記の記述によると external-snapshotter なるものを事前にインストールする必要があります。
external-snapshotter について調べると、EKS add-onとして提供されている事がわかりました。
CSI スナップショットコントローラーは Amazon EKS マネージドアドオンを使用してインストールすることをお勧めします。このアドオンには、Amazon EKS でスナップショットを作成および管理するために必要なカスタムリソース定義 (CRD) が含まれています。
エラー解消
aws-ebs-csi-driver(Amazon EBS CSI Driver) EKS add-on をクラスターにインストールした後、EBS CSI Driver EKS Add-onを再度v1.38.1-eksbuild.2
にアップグレードしました。先程までのエラーは発生しなくなりました🙌
volumesnapshotcontents.snapshot.storage.k8s.io CRDが追加されたことも確認できました。
kubectl get crd --no-headers | grep '^volume'
volumegroupsnapshotclasses.groupsnapshot.storage.k8s.io 2025-02-05T09:39:10Z
volumegroupsnapshotcontents.groupsnapshot.storage.k8s.io 2025-02-05T09:39:10Z
volumegroupsnapshots.groupsnapshot.storage.k8s.io 2025-02-05T09:39:10Z
volumesnapshotclasses.snapshot.storage.k8s.io 2025-02-05T09:39:10Z
volumesnapshotcontents.snapshot.storage.k8s.io 2025-02-05T09:39:10Z
volumesnapshots.snapshot.storage.k8s.io 2025-02-05T09:39:10Z
まとめ
- aws-ebs-csi-driver(Amazon EBS CSI Driver) EKS add-onは v1.36から VolumeSnapshotContent CRDに依存するようになっている
- 今回 v1.36以上にアップグレードし、かつ上記CRDが存在していなかったためエラーが発生した
- snapshot-controller (CSI Snapshot Controller) EKS add-onのインストールで上記CRDをインストールでき、エラー解消
「VolumeSnapshotContent CRDに依存するようになっている」についてのドキュメントを見つけることができなかったのがやや気がかりですが、ひとまず上記方法でエラーを解消できました。