Amazon EFS CSI ドライバー - Amazon EKS

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Amazon EFS CSI ドライバー

コンテナストレージインターフェイス (CSI) ドライバーは、Amazon EFS で実行されている Kubernetes クラスターが ファイルシステムのライフサイクルを管理できるようにする CSI インターフェイスを提供します。AWSAmazon EFS

このトピックでは、Amazon EFS CSI ドライバーを Amazon EKS クラスターにデプロイし、動作することを確認する方法を示します。

注記

Amazon EFS CSI ドライバーのアルファ機能は、Amazon EKS クラスターではサポートされていません。

使用可能なパラメータの詳細と、ドライバーの機能を示す完全な例については、GitHub の コンテナストレージインターフェイス (CSI) ドライバーAmazon EFSプロジェクトを参照してください。

Amazon EFS CSI ドライバーを Amazon EKS クラスターにデプロイするには

  • クラスターがあるリージョンに対応するコマンドを使用して、Amazon EFS CSI ドライバーをデプロイします。クラスターにノードが含まれている場合 (AWS Fargate ポッドを含めることもできます)、次のコマンドを使用してドライバーをデプロイします。

    • 中国リージョン以外のすべてのリージョン。

      kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=release-1.0"
    • 北京および寧夏 中国リージョン。

      kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.0"

    クラスターに Fargate ポッドのみが含まれている場合 (ノードがない場合)、次のコマンドを使用してドライバーをデプロイします。

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/deploy/kubernetes/base/csidriver.yaml
    注記
    • 1.0.0 リリース以降、TLS を使用した転送中のデータの暗号化はデフォルトで有効になっています。転送中の暗号化を使用して、データはネットワーク経由で サービスに移行するときに暗号化されます。Amazon EFSこれを無効にし、NFSv4 を使用してボリュームをマウントするには、永続ボリュームマニフェストで volumeAttributes フィールド encryptInTransit"false" に設定します。マニフェストの例については、GitHub の「転送中の暗号化の例」を参照してください。

    • 静的ボリュームのプロビジョニングのみがサポートされています。つまり、クラスターのポッドで使用する前に、Amazon EFS ファイルシステムを Amazon EKS の外部で作成する必要があります。

Amazon EFS アクセスポイント

CSI ドライバーは Amazon EFS アクセスポイントAmazon EFSをサポートします。これは、複数のポッド間でファイルシステムを簡単に共有できるようにする ファイルシステムへのアプリケーション固有のエントリポイントです。Amazon EFSアクセスポイントを使用すると、アクセスポイントを介したすべてのファイルシステム要求に対してユーザー ID を適用し、各ポッドのルートディレクトリを適用できます。詳細については、GitHub の「Amazon EFS アクセスポイント」を参照してください。

Amazon EFS クラスターの Amazon EKS ファイルシステムを作成するには

  1. Amazon EKS クラスターの VPC ID を見つけます。この ID は Amazon EKS コンソールで確認するか、次の AWS CLI コマンドを使用できます。を独自の値 (<cluster_name> を含む) に置き換えます。<>

    aws eks describe-cluster --name <cluster_name> --query "cluster.resourcesVpcConfig.vpcId" --output text

    出力:

    vpc-<exampledb76d3e813>
  2. クラスターの VPC の CIDR 範囲を見つけます。これは Amazon VPC コンソールで確認するか、次の AWS CLI コマンドを使用できます。

    aws ec2 describe-vpcs --vpc-ids vpc-<exampledb76d3e813> --query "Vpcs[].CidrBlock" --output text

    出力:

    192.168.0.0/16
  3. Amazon EFS マウントポイントのインバウンド NFS トラフィックを許可するセキュリティグループを作成します。

    1. Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。

    2. 左のナビゲーションパネルで [セキュリティグループ] を選択し、[セキュリティグループの作成] を選択します。

    3. セキュリティグループの名前と説明を入力し、Amazon EKS クラスターが使用している VPC を選択します。

    4. [インバウンドルール] で、[ルールの追加] を選択します。

    5. [タイプ] で [NFS] を選択します。

    6. [ソース] で [カスタム] を選択し、前のステップで取得した VPC CIDR 範囲を貼り付けます。

    7. セキュリティグループの作成.] を選択します。

  4. Amazon EFS クラスターに Amazon EKS ファイルシステムを作成します。

    1. Amazon Elastic File System コンソール (https://console.aws.amazon.com/efs/) を開きます。

    2. 左のナビゲーションペインで [File systems (ファイルシステム)] を選択し、[Create file system (ファイルシステムの作成)] を選択します。

    3. [Create file system] ページで、[Customize] を選択します。

    4. [File system settings (ファイルシステムの設定)] ページで、情報を入力または選択する必要はありませんが、必要に応じて [Next (次へ)] を選択します。

    5. [Network access (ネットワークアクセス)] ページの [Virtual Private Cloud (VPC)] で、VPC を選択します。

      注記

      VPC が表示されない場合は、コンソールの右上で、VPC があるリージョンが選択されていることを確認してください。

    6. [Mount targets (マウントターゲット)] で、デフォルトのセキュリティグループがリストに表示されている場合は、デフォルトのセキュリティグループ名のボックスの右上隅にある [X] を選択して各マウントポイントから削除し、前のステップで作成したセキュリティグループを選択して各マウントターゲットに対して [Next (次へ)] を選択します。

    7. [File system policy (ファイルシステムポリシー)] ページで、[Next (次へ)] を選択します。

    8. [Review and create (確認と作成)] ページで、[Create (作成)] を選択します。

      重要

      デフォルトでは、新しい Amazon EFS ファイルシステムは root:root によって所有され、root ユーザー (UID 0) のみが読み取り/書き込み/実行のアクセス許可があります。コンテナが root として実行されていない場合は、Amazon EFS ファイルシステムのアクセス許可を変更して、他のユーザーがファイルシステムを変更できるようにする必要があります。詳細については、https://docs.aws.amazon.com/efs/latest/ug/accessing-fs-nfs-permissions.html の「ネットワークファイルシステム (NFS) レベルでのユーザー、グループ、アクセス許可の操作Amazon Elastic File System ユーザーガイド」を参照してください。

サンプルアプリケーションをデプロイし、CSI ドライバーが動作していることを確認するには

この手順では、 コンテナストレージインターフェイス (CSI) ドライバー GitHub リポジトリの Multiple Pods Read Write ManyAmazon EFS の例を使用して、静的にプロビジョニングされた 永続ボリュームを使用し、Amazon EFS アクセスモードで複数のポッドからアクセスします。ReadWriteMany

  1. コンテナストレージインターフェイス (CSI) ドライバー GitHub リポジトリをローカルシステムにクローンします。Amazon EFS

    git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git
  2. multiple_pods サンプルディレクトリに移動します。

    cd aws-efs-csi-driver/examples/kubernetes/multiple_pods/
  3. Amazon EFS ファイルシステム ID を取得します。これは Amazon EFS コンソールで確認するか、次の AWS CLI コマンドを使用します。

    aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text

    出力:

    fs-<582a03f3>
  4. specs/pv.yaml ファイルを編集し、volumeHandle 値を Amazon EFS ファイルシステム ID に置き換えます。

    apiVersion: v1 kind: PersistentVolume metadata: name: efs-pv spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: efs-sc csi: driver: efs.csi.aws.com volumeHandle: fs-<582a03f3>
    注記

    Amazon EFS は伸縮自在なファイルシステムであるため、ファイルシステムの容量制限は強制されません。永続ボリュームと永続ボリュームクレームの実際のストレージ容量の値は、ファイルシステムを作成するときには使用されません。ただし、ストレージ容量は Kubernetes の必須フィールドであるため、この例では 5Gi などの有効な値を指定する必要があります。この値は、Amazon EFS ファイルシステムのサイズを制限しません。

  5. ディレクトリから、efs-sc ストレージクラス、efs-claim 永続ボリュームクレーム、および efs-pv 永続ボリュームをデプロイします。specs

    kubectl apply -f specs/pv.yaml kubectl apply -f specs/claim.yaml kubectl apply -f specs/storageclass.yaml
  6. デフォルトの名前空間の永続的ボリュームを一覧表示します。default/efs-claim クレームがある永続的なボリュームを探します。

    kubectl get pv -w

    出力:

    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE efs-pv 5Gi RWX Retain Bound default/efs-claim efs-sc 2m50s

    STATUS になるまで次のステップに進まないでください。Bound

  7. ディレクトリから、app1 および app2 サンプルアプリケーションをデプロイします。specs

    kubectl apply -f specs/pod1.yaml kubectl apply -f specs/pod2.yaml
  8. デフォルトの名前空間のポッドを監視し、app1 および app2 ポッドの STATUSRunning になるまで待ちます。

    kubectl get pods --watch
    注記

    ポッドが Running ステータスになるまでに数分かかることがあります。

  9. 永続的ボリュームの詳細を表示します。

    kubectl describe pv efs-pv

    出力:

    Name: efs-pv Labels: none Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"name":"efs-pv"},"spec":{"accessModes":["ReadWriteMany"],"capaci... pv.kubernetes.io/bound-by-controller: yes Finalizers: [kubernetes.io/pv-protection] StorageClass: efs-sc Status: Bound Claim: default/efs-claim Reclaim Policy: Retain Access Modes: RWX VolumeMode: Filesystem Capacity: 5Gi Node Affinity: none Message: Source: Type: CSI (a Container Storage Interface (CSI) volume source) Driver: efs.csi.aws.com VolumeHandle: fs-582a03f3 ReadOnly: false VolumeAttributes: none Events: none

    Amazon EFS ファイルシステム ID は VolumeHandle. として表示されます。

  10. app1 ポッドがボリュームにデータを正常に書き込んでいることを確認します。

    kubectl exec -ti app1 -- tail /data/out1.txt

    出力:

    Thu Jul 23 21:44:02 UTC 2020 Thu Jul 23 21:44:07 UTC 2020 Thu Jul 23 21:44:12 UTC 2020 Thu Jul 23 21:44:17 UTC 2020 Thu Jul 23 21:44:22 UTC 2020 Thu Jul 23 21:44:27 UTC 2020
  11. ポッドに、app2 がボリュームに書き込んだのと同じデータがボリュームに表示されることを確認します。app1

    kubectl exec -ti app2 -- tail /data/out1.txt

    出力:

    Thu Jul 23 21:44:47 UTC 2020 Thu Jul 23 21:44:52 UTC 2020 Thu Jul 23 21:44:57 UTC 2020 Thu Jul 23 21:45:02 UTC 2020 Thu Jul 23 21:45:07 UTC 2020 Thu Jul 23 21:45:12 UTC 2020
  12. 実験が終了したら、このサンプルアプリケーションのリソースを削除してクリーンアップします。

    kubectl delete -f specs/

    作成したファイルシステムとセキュリティグループを手動で削除することもできます。