EKS Auto Mode で静的 EBS を扱う際の注意点

はじめに

EKS Auto Mode では Amazon EBS CSI driver が組み込まれており、デフォルトで EBS を扱えます。
で・す・が……、既存の EBS をアタッチしようとして躓いたのでメモ。

本題の前に、やり方

EKS ノードに既存の EBS をアタッチして利用できるようにするやり方は、公式 GitHub に例があるのでそこの説明を参照ください。
PersistentVolume のマニフェストを作って EBS のボリューム ID を記述してあげればよく、シンプルそうに見えます。

aws-ebs-csi-driver/examples/kubernetes/static-provisioning at master · kubernetes-sigs/aws-ebs-csi-driver
CSI driver for Amazon EBS - kubernetes-sigs/aws-ebs-csi-driver

つまづきポイントその 1

上記に従い Kubernetes マニフェストを用意して適用してみたところ、いつまでたっても Pod が起動しないという問題に遭遇しました。
Pod のイベントログを見に行くと、次のような Warning が…。

FailedAttachVolume    **前    attachdetach-controller    AttachVolume.Attach failed for volume "[PersistentVolume 名]" : timed out waiting for external-attacher of ebs.csi.aws.com CSI driver to attach volume [ボリューム ID]

ここで着目するべきは ebs.csi.aws.com のところです。
EKS Managed Node Group の場合はそれでよいのですが、EKS Auto Mode のときは ebs.csi.eks.amazonaws.com を使う必要があります。
ドキュメントでも言及されていました。

Amazon EBS で Kubernetes ボリュームストレージを使用する - アマゾン EKS
Amazon Elastic Block Store (Amazon EBS) コンテナストレージインターフェイス (CSI) ドライバーは、Amazon EBS ボリュームのライフサイクルを Kubernetes ボリュームのストレージと...

つまづきポイントその 2

マニフェストも書き換えてこれでよし!と再適用…。
ところが、まだ解決しません。

FailedAttachVolume    **前    attachdetach-controller    AttachVolume.Attach failed for volume "[PersistentVolume 名]" : timed out waiting for external-attacher of ebs.csi.eks.amazonaws.com CSI driver to attach volume [ボリューム ID]

色々調べてどうやら EBS に以下のタグが必要らしい、という情報を得ました。
Key: eks:eks-cluster-name
Value: [利用先の EKS クラスター名]

EKS AutoMode static PV can't be attached - volume attachment is being deleted
I'm trying to migrating PV which manually bind to EBS to EKS auto mode, however after following below step suggested in ...

これをやるには、コンソールで EBS 一覧 (EC2 の Elastic Block Store) からアタッチしようとしている EBS を選択し「タグ」のタブから以下のような感じで追加します。

Terraform の場合は以下のようなコードになりますね。

resource "aws_ebs_volume" "example" {
  availability_zone = "ap-northeast-1a"
  type              = "gp3"
  size              = 5

  tags = {
    Name = "example-volume"

    # EKS から静的ボリュームとして利用するために必要なタグ
    "eks:eks-cluster-name" = module.eks.cluster_name
  }
}

おわりに

ということで、上記の対処で解決しました。
特に 2 つ目は謎…。これどこかのドキュメントに書いてあるんですかね?ねえ Amazon さん???
同じ問題に遭遇した方の解決の一助になれば幸いです。

コメント

タイトルとURLをコピーしました