Amazon EFS CSI ドライバー - Amazon EKS

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

Amazon EFS CSI ドライバー

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

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

注記

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

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

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

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

    注記

    このコマンドには kubectl バージョン 1.14 以降が必要です。kubectl のバージョンは、以下のコマンドを使用して確認できます。kubectl バージョンをインストールまたはアップグレードするには、「のインストールkubectl」を参照してください。

    kubectl version --client --short
    kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?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アクセスポイント

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

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

  1. Amazon EKS クラスターの VPC ID を見つけます。この ID は Amazon EKS コンソールで確認するか、次の AWS CLI コマンドを使用できます。

    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. のナビゲーションパネルでセキュリティグループを選択し、[Create security group (セキュリティグループの作成)] を選択します

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

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

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

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

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

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

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

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

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

      重要

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

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

この手順では、https://github.com/kubernetes-sigs/aws-efs-csi-driver/tree/master/examples/kubernetes/multiple_podsコンテナストレージインターフェイス (CSI) ドライバーAmazon EFSリポジトリから複数のポッドが読み書きを多く使用するGitHub例を使用して、静的にプロビジョニングされたAmazon EFS永続的ボリュームを消費し、ReadWriteManyアクセスモードで複数のポッドからアクセスします。

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

    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. specs ディレクトリから、efs-sc ストレージクラス、efs-claim 永続ボリュームクレーム、efs-pv 永続ボリューム、app1 および app2 サンプルアプリケーションをデプロイします。

    kubectl apply -f specs/
  6. デフォルトの名前空間のポッドを監視し、 app1およびapp2ポッドSTATUSが になるまで待ちますRunning

    kubectl get pods --watch
    注記

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

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

    kubectl get pv

    出力:

    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE efs-pv 5Gi RWX Retain Bound default/efs-claim efs-sc 2m50s
  8. 永続的ボリュームの詳細を表示します。

    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 として表示されます。

  9. 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
  10. app2 ポッドがボリューム内に同じデータを表示していることを確認します。

    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
  11. 実験が終了したら、このサンプルアプリケーションのリソースを削除してクリーンアップします。

    kubectl delete -f specs/