Menu Close

5.7.6. AWS EFSの動的プロビジョニング

AWS EFS CSI ドライバーは、他のCSIドライバーとは異なる形態の動的プロビジョニングをサポートしています。既存のEFSボリュームのサブディレクトリとして新しいPVをプロビジョニングします。PVはお互いに独立しています。しかし、これらはすべて同じEFSボリュームを共有しています。ボリュームが削除されると、そのボリュームからプロビジョニングされたすべてのPVも削除されます。EFS CSIドライバーは、そのようなサブディレクトリごとにAWSアクセスポイントを作成します。AWS アクセスポイントの制限により、1つのStorageClass/EFSボリュームから動的にプロビジョニングできるPVは120までとなります。

重要

なお、PVC.spec.resourcesはEFSでは強制されません。

以下の例では、5GiBの容量を要求しています。しかし、作成されたPVは無限であり、どんな量のデータ(ペタバイトのような)も保存することができます。ボリュームに大量のデータを保存してしまうと、壊れたアプリケーション、あるいは不正なアプリケーションにより、多額の費用が発生します。

AWSのEFSボリュームサイズのモニタリングを使用することを強く推奨します。

手順

動的プロビジョニングを有効にするには、以下の手順を実施します。

  1. 以下のようにStorageClassを作成します。

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: efs-sc
    provisioner: efs.csi.aws.com
    parameters:
      provisioningMode: efs-ap 1
      fileSystemId: fs-a5324911 2
      directoryPerms: "700" 3
      gidRangeStart: "1000" 4
      gidRangeEnd: "2000" 5
      basePath: "/dynamic_provisioning" 6
    1
    動的プロビジョニングを有効にするには、provisioningModeefs-apを指定する必要があります。
    2
    fileSystemIdには、上記で手動で作成したEFSボリュームのIDを指定してください。
    3
    directoryPermsは、ボリュームのルートディレクトリのデフォルトパーミッションです。この場合、ボリュームには所有者のみがアクセスできます。
    4 5
    gidRangeStartgidRangeEndは、AWSアクセスポイントのGIDを設定する際に使用するPOSIXグループID(GID)の範囲を設定します。指定しない場合、デフォルトの範囲は50000 - 7000000です。プロビジョニングされた各ボリューム、つまりAWSのアクセスポイントには、この範囲からの固有GIDが割り当てられます。
    6
    basePathは、動的にプロビジョニングされたボリュームを作成する際に使用されるEFSボリューム上のディレクトリです。この場合、EFSボリューム上に「/dynamic_provisioning/<random uuid>」としてPVがプロビジョニングされます。PVを使用するポッドには、そのサブディレクトリのみがマウントされます。
    注記

    クラスタ管理者は、それぞれが異なるEFSボリュームを使用する複数のStorageClassesを作成することができます。

  2. 上記で作成したStorageClassを参照して、通常通りPVC(またはStatefulSetやTemplate)を作成します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test
    spec:
      storageClassName: efs-sc
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi

動的プロビジョニングの設定に問題がある場合は、AWS EFS troubleshootingを参照してください。