Amazon FSx for Lustre CSI ドライバー - Amazon EKS

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

Amazon FSx for Lustre CSI ドライバー

重要

この機能は、中国リージョンでは使用できません。

Amazon FSx for Lustre コンテナストレージインターフェイス (CSI) ドライバーは、Amazon EKS クラスターがファイルシステムの Amazon FSx for Lustre ボリュームのライフサイクルを管理できるようにする CSI インターフェイスを提供します。

このトピックでは、Amazon FSx for Lustre CSI ドライバーを Amazon EKS クラスターにデプロイし、動作することを確認する方法を示します。ドライバーのバージョン 0.3.0 を使用することをお勧めします。

注記

このドライバーは、Kubernetes バージョン以降の1.18クラスターおよびノードでサポートされています。Amazon EKSドライバーは Fargateまたは Arm ノードではサポートされていません。Amazon FSx for Lustre CSI ドライバーのアルファ機能は、Amazon EKS クラスターではサポートされていません。このドライバーはベータリリースです。本番稼働用に Amazon EKS によって十分にテストされ、サポートされています。ドライバーのサポートは削除されませんが、詳細は変更される可能性があります。ドライバーのスキーマまたはセマンティクスが変更された場合は、次のバージョンへの移行手順が提供されます。

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

Prerequisites

必要なもの:

  • AWS CLI のバージョン 1.18.163 以降がインストールされていること。現在インストールされているバージョンは、aws --version コマンドで確認できます。AWS CLI をインストールまたはアップグレードするには、「AWS CLI のインストール」を参照してください。

  • 既存の Amazon EKS クラスター。現在クラスターがない場合は、「Amazon EKS の開始方法」を参照してクラスターを作成します。

  • eksctl のバージョン 0.31.0-rc.0 以降がインストールされていること。現在インストールされているバージョンは、eksctl version コマンドで確認できます。eksctl をインストールまたはアップグレードする方法については、「eksctl のインストールまたはアップグレード」を参照してください。

  • クラスターのバージョンに合った、kubectl の最新バージョンがインストールされていること。現在インストールされているバージョンは、kubectl version --short --client コマンドで確認できます。詳細については、を参照してください のインストールkubectl

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

  1. AWS Identity and Access Management OIDC プロバイダーを作成し、クラスターに関連付けます。

    eksctl utils associate-iam-oidc-provider \ --region <region-code> \ --cluster <prod> \ --approve
  2. IAMドライバーがユーザーに代わって を呼び出すことを許可する ポリシーとサービスアカウントを作成します。AWSAPIs

    1. 次のテキストをコピーし、fsx-csi-driver.json という名前のファイルに保存します。

      { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iam:CreateServiceLinkedRole", "iam:AttachRolePolicy", "iam:PutRolePolicy" ], "Resource":"arn:aws:iam::*:role/aws-service-role/s3.data-source.lustre.fsx.amazonaws.com/*" }, { "Action":"iam:CreateServiceLinkedRole", "Effect":"Allow", "Resource":"*", "Condition":{ "StringLike":{ "iam:AWSServiceName":[ "fsx.amazonaws.com" ] } } }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "fsx:CreateFileSystem", "fsx:DeleteFileSystem", "fsx:DescribeFileSystems" ], "Resource":[ "*" ] } ] }
    2. ポリシーを作成します。

      aws iam create-policy \ --policy-name <Amazon_FSx_Lustre_CSI_Driver> \ --policy-document file://fsx-csi-driver.json

      返されるポリシー Amazon リソースネーム (ARN) を書き留めておきます。

  3. ドライバーの Kubernetes サービスアカウントを作成し、ポリシーをサービスアカウントにアタッチします。ポリシーの ARN を、前のステップで返された ARN に置き換えます。

    eksctl create iamserviceaccount \ --region <region-code> \ --name fsx-csi-controller-sa \ --namespace kube-system \ --cluster <prod> \ --attach-policy-arn arn:aws:iam::<111122223333:policy/Amazon_FSx_Lustre_CSI_Driver> \ --approve

    出力:

    サービスアカウントが作成されると、数行の出力が表示されます。出力の最後の行は、次のサンプル行のようになります。

    [ℹ] created serviceaccount "kube-system/fsx-csi-controller-sa"

    デプロイされた AWS CloudFormation スタックの名前を書き留めておきます。上記の出力例では、スタックの名前は eksctl-prod-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa です。

  4. 作成されたロールのロール ARN を書き留めます。

    1. AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。

    2. コンソールがIAMロールを作成したリージョンに設定されていることを確認してから、[ スタック] を選択します

    3. eksctl-prod-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa という名前のスタックを選択します。

    4. [出力] タブを選択します。[ロール ARN] が [Output(1)] ページに表示されます。

  5. 次のコマンドでドライバーをデプロイします。

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

    出力

    Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply serviceaccount/fsx-csi-controller-sa configured clusterrole.rbac.authorization.k8s.io/fsx-csi-external-provisioner-role created clusterrolebinding.rbac.authorization.k8s.io/fsx-csi-external-provisioner-binding created deployment.apps/fsx-csi-controller created daemonset.apps/fsx-csi-node created csidriver.storage.k8s.io/fsx.csi.aws.com created
  6. ドライバーのデプロイにパッチを適用し、ステップ 3 で作成したサービスアカウントを追加します。ARN を、ステップ 4 で書き留めた ARN に置き換えます。

    kubectl annotate serviceaccount -n kube-system <fsx-csi-controller-sa> \ eks.amazonaws.com/role-arn=<arn:aws:iam::111122223333:role/eksctl-prod-addon-iamserviceaccount-kube-sys-Role1-NPFTLHJ5PJF5> --overwrite=true

Kubernetes ストレージクラス、永続的なボリューム要求、およびサンプルアプリケーションをデプロイして、CSI ドライバーが動作していることを確認するには

この手順では、Amazon S3コンテナストレージインターフェイス (CSI) ドライバーリポジトリAmazon FSx for Lustreからの の動的ボリュームプロビジョニングを使用して、動的にプロビジョニングされたGitHubボリュームを使用します。Amazon FSx for Lustre

  1. ファイルを作成し、バケットにコピーすることにより、Amazon S3 バケットおよび export という名前のフォルダをそのボリュームに作成します。

    aws s3 mb s3://<fsx-csi> echo test-file >> testfile aws s3 cp testfile s3://<fsx-csi>/export/testfile
  2. 次のコマンドを使って、storageclass マニフェストをダウンロードします。

    curl -o storageclass.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/specs/storageclass.yaml
  3. ファイルを編集し、既存のファイルを独自のものに置き換えます。<example values>

    parameters: subnetId: <subnet-056da83524edbe641> securityGroupIds: <sg-086f61ea73388fb6b> s3ImportPath: s3://<ml-training-data-000> s3ExportPath: s3://<ml-training-data-000/export> deploymentType: <SCRATCH_2>
    • Amazon for Lustre subnetId – FSx ファイルシステムが作成されるサブネット ID。Amazon FSx for Lustre アベイラビリティーゾーン は、すべての でサポートされているわけではありません。で Amazon FSx for Lustre コンソールを開き、使用するサブネットが、サポートされている にあることを確認しますhttps://console.aws.amazon.com/fsx/。アベイラビリティーゾーンサブネットには、ノードを含めることも、別のサブネットまたは VPC にすることもできます。指定するサブネットが、ノードがあるサブネットと同じでない場合は、 VPCsを接続し、セキュリティグループで必要なポートが開いていることを確認する必要があります。https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/amazon-vpc-to-amazon-vpc-connectivity-options.html

    • securityGroupIds–ノードのセキュリティグループ ID。

    • s3ImportPath–永続ボリュームへのデータのコピー元となるデータリポジトリ。Amazon Simple Storage Serviceステップ 1 で作成した fsx-csi バケットを指定します。

    • s3ExportPath–新規ファイルまたは変更されたファイルのエクスポート先となるAmazon S3データリポジトリ。ステップ 1 で作成した fsx-csi/export フォルダを指定します。

    • deploymentType–ファイルシステムのデプロイタイプ。有効な値は、 SCRATCH_1SCRATCH_2 、および PERSISTENT_1です。 デプロイの種類の詳細については、「ファイルシステムの作成」を参照してくださいAmazon FSx for Lustre。

    注記

    s3ImportPath および s3ExportPath の Amazon S3 バケットは同じである必要があります。そうでない場合、ドライバーは Amazon FSx for Lustre ファイルシステムを作成できません。s3ImportPath はスタンドアロンとすることができます。ランダムなパスは、 のように自動的に作成されますs3://ml-training-data-000/FSxLustre20190308T012310Z。 の値を指定しないと、 を使用できませんs3ExportPathS3ImportPath

  4. storageclass を作成します。

    kubectl apply -f storageclass.yaml
  5. 永続的なボリューム要求マニフェストをダウンロードします。

    curl -o claim.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/specs/claim.yaml
  6. (オプション) claim.yaml ファイルを編集します。<value>ストレージ要件と前のステップで選択したものに基づいて、以下のいずれかの増分値に以下の変更します。deploymentType

    storage: <1200Gi>
    • SCRATCH_2PERSISTENTおよび – TiB 1.2 の 、2.4、または TiB 2.4 TiB 以降の 2.4 TiB .

    • SCRATCH_1–1.2、2.4、3.6、または TiB 3.6 TiB を超える 3.6 の増分TiB。TiBTiB

  7. 永続的なボリューム要求を作成します。

    kubectl apply -f claim.yaml
  8. ファイルシステムがプロビジョニングされていることを確認します。

    kubectl get pvc

    出力。

    NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE fsx-claim Bound pvc-15dad3c1-2365-11ea-a836-02468c18769e 1200Gi RWX fsx-sc 7m37s
    注記

    STATUS、 に変更されるまでに 5~10 Pending 分間表示される場合がありますBoundSTATUSが になるまで次のステップに進まないでくださいBound

  9. サンプルアプリケーションをデプロイします。

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/specs/pod.yaml
  10. サンプルアプリケーションが実行中であることを確認します。

    kubectl get pods

    出力

    NAME READY STATUS RESTARTS AGE fsx-app 1/1 Running 0 8s

Amazon S3ファイルシステムからAmazon FSx for Lustreファイルへのアクセス

データをインポートし、変更や作成を行わずに読み取る場合は、storageclass.yaml ファイルで s3ExportPath の値は必要ありません。データがサンプルアプリケーションによって Amazon FSx for Lustre ファイルシステムに書き込まれたことを確認します。

kubectl exec -it fsx-app ls /data

出力。

export out.txt

サンプルアプリケーションは、ファイルシステムに out.txt ファイルを書き込みました。

へのファイルのアーカイブ s3ExportPath

新しいファイルおよび変更されたファイルについては、Lustre ユーザースペースツールを使用して、s3ExportPath に指定した値を使用してデータを Amazon S3 にアーカイブすることができます。

  1. ファイルを Amazon S3 にエクスポートします。

    kubectl exec -ti fsx-app -- lfs hsm_archive /data/out.txt
    注記
    • 新しいファイルは Amazon S3 に自動的に同期されません。s3ExportPath にファイルを同期するには、コンテナイメージに Lustre クライアントをインストールし、lfs hsm_archive コマンドを手動で実行する必要があります。コンテナは、CAP_SYS_ADMIN 機能を持つ特権モードで実行する必要があります。

    • この例では、デモンストレーションのため、ライフサイクルフックを使用して Lustre クライアントをインストールします。通常のアプローチでは、Lustre クライアントでコンテナイメージを構築します。

  2. out.txt ファイルが Amazon S3 の s3ExportPath フォルダに書き込まれたことを確認します。

    aws s3 ls fsx-csi/export/

    出力

    2019-12-23 12:11:35 4553 out.txt 2019-12-23 11:41:21 10 testfile