FSx for Lustre を使用して高性能アプリケーションを保存する - Amazon EKS

FSx for Lustre を使用して高性能アプリケーションを保存する

FSx for Lustre コンテナストレージインターフェイス (CSI) ドライバーは、Amazon EKS クラスターが FSx for Lustre ファイルシステムのライフサイクルを管理できるようにする CSI インターフェイスを提供します。詳細については、「FSx for Lustre ユーザーガイド」を参照してください。

このトピックでは、FSx for Lustre CSI ドライバーを Amazon EKS クラスターにデプロイし、動作することを確認する方法を示します。最新バージョンのドライバーを使用することをお勧めします。利用可能なバージョンについては、GitHub の「CSI Specification Compatibility Matrix」(CSI 仕様互換性マトリックス) を参照してください。

注記

Fargate では、ドライバーはサポートされていません。

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

必要なもの:

  • ご使用のデバイスまたは AWS CloudShell で、バージョン 2.12.3 以降、または AWS コマンドラインインターフェイス (AWS CLI) のバージョン 1.27.160 以降がインストールおよび設定されていること。現在のバージョンを確認するには、「aws --version | cut -d / -f2 | cut -d ' ' -f1」を参照してください。macOS の yumapt-get、または Homebrew などのパッケージマネージャは、AWS CLI の最新バージョンより数バージョン遅れることがあります。最新バージョンをインストールするには、「AWS コマンドラインインターフェイスユーザーガイド」の「インストール」および「aws configure を使用したクイック設定」を参照してください。AWS CloudShell にインストールされている AWS CLI バージョンも最新バージョンより数バージョン遅れることがあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。

  • デバイスまたは AWS CloudShell にインストールされている eksctl コマンドラインツールのバージョン 0.190.0 以降。eksctl をインストールまたはアップグレードするには、eksctl ドキュメントの「インストール」を参照してください。

  • デバイスまたは AWS CloudShell に、kubectl コマンドラインツールがインストールされていること。バージョンは、ご使用のクラスターの Kubernetes バージョンと同じか、1 つ前のマイナーバージョン以前、あるいはそれより新しいバージョンが使用できます。例えば、クラスターのバージョンが 1.29 である場合、kubectl のバージョン 1.281.29、または 1.30 が使用できます。kubectl をインストールまたはアップグレードする方法については、「kubectl と eksctl のセットアップ」を参照してください。

次の手順は、FSx for Lustre CSI ドライバーを使用して簡単なテストクラスターを作成して、動作を確認できるようにするのに役立ちます。本番ワークロードにテストクラスターを使用することはお勧めしません。このチュートリアルでは、置き換えが必要だと明記されている場合を除き、サンプル値をそのまま使用することをお勧めします。本番クラスター向けに手順を完了する際には、サンプル値を任意の値に置き換えることができます。変数は、この手順全体で設定および使用され、別のターミナルには存在しないため、同じターミナルですべての手順を完了することをお勧めします。

  1. 残りの手順で使用する変数をいくつか設定します。my-csi-fsx-cluster を作成するテストクラスターの名前に置き換え、region-code をテストクラスターを作成する AWS リージョンに置き換えます。

    export cluster_name=my-csi-fsx-cluster export region_code=region-code
  2. テストクラスターを作成します。

    eksctl create cluster \ --name $cluster_name \ --region $region_code \ --with-oidc \ --ssh-access \ --ssh-public-key my-key

    クラスターのプロビジョニングには数分かかります。クラスターの作成中に、数行の出力が表示されます。出力の最後の行は、次のサンプル行のようになります。

    [✓] EKS cluster "my-csi-fsx-cluster" in "region-code" region is ready
  3. ドライバーの Kubernetes サービスアカウントを作成し、次のコマンドを使用して AmazonFSxFullAccessAWS マネージドポリシーをサービスアカウントにアタッチします。クラスターが AWS GovCloud (米国東部) または AWS GovCloud (米国西部) の AWS リージョンにある場合は、 arn:aws: arn:aws-us-gov: に置き換えます。

    eksctl create iamserviceaccount \ --name fsx-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonFSxFullAccess \ --approve \ --role-name AmazonEKSFSxLustreCSIDriverFullAccess \ --region $region_code

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

    [ℹ] 1 task: { 2 sequential sub-tasks: { create IAM role for serviceaccount "kube-system/fsx-csi-controller-sa", create serviceaccount "kube-system/fsx-csi-controller-sa", } } [ℹ] building iamserviceaccount stack "eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa" [ℹ] deploying stack "eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa" [ℹ] waiting for CloudFormation stack "eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa" [ℹ] created serviceaccount "kube-system/fsx-csi-controller-sa"

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

  4. 次のコマンドでドライバーをデプロイします。release-X.XX を目的のブランチに置き換えます。マスターブランチは、現在リリースされている安定版のドライバーと互換性のない今後リリースされる機能が含まれている可能性があるため、サポート対象外です。最新のリリース済みバージョンをダウンロードすることをお勧めします。ブランチのリストについては、GitHub で aws-fsx-csi-driver Branches を参照してください。

    注記

    GitHub の aws-fsx-csi-driver/deploy/kubernetes/overlays/stable で適用されているコンテンツを表示できます。

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

    出力例は次のとおりです。

    serviceaccount/fsx-csi-controller-sa created serviceaccount/fsx-csi-node-sa created clusterrole.rbac.authorization.k8s.io/fsx-csi-external-provisioner-role created clusterrole.rbac.authorization.k8s.io/fsx-external-resizer-role created clusterrolebinding.rbac.authorization.k8s.io/fsx-csi-external-provisioner-binding created clusterrolebinding.rbac.authorization.k8s.io/fsx-csi-resizer-binding created deployment.apps/fsx-csi-controller created daemonset.apps/fsx-csi-node created csidriver.storage.k8s.io/fsx.csi.aws.com created
  5. 作成されたロールの ARN を書き留めます。書き留めていなくて、AWS CLI 出力として表示されなくなっている場合は、次の操作で AWS Management Console に表示できます。

    1. AWS CloudFormation コンソールを開きます。

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

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

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

  6. 次のコマンドを使用して、ドライバーのデプロイにパッチを適用し、前に作成したサービスアカウントを追加します。ARN を、メモした ARN に置き換えます。111122223333 は、ご自分のアカウント ID に置き換えます。クラスターが AWS GovCloud (米国東部) または AWS GovCloud (米国西部) の AWS リージョンにある場合は、 arn:aws: arn:aws-us-gov: に置き換えます。

    kubectl annotate serviceaccount -n kube-system fsx-csi-controller-sa \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKSFSxLustreCSIDriverFullAccess --overwrite=true

    出力例は次のとおりです。

    serviceaccount/fsx-csi-controller-sa annotated

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

  1. クラスターのセキュリティグループを書き留めます。AWS Management Console の [ネットワーク] セクションまたは次の AWS CLI コマンドを使用して確認できます。

    aws eks describe-cluster --name $cluster_name --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  2. 「Amazon FSx for Lustre ユーザーガイド」の「Amazon VPC セキュリティグループ」に示す基準に従って、Amazon FSx ファイルシステムのセキュリティグループを作成します。[VPC] で、[ネットワーク] セクションに示されているようにクラスターの VPC を選択します。「Lustre クライアントに関連付けられているセキュリティグループ」には、クラスターセキュリティグループを使用します。アウトバウンドルールをそのままにして、[すべてのトラフィック] を許可することができます。

  3. 次のコマンドを使用して、ストレージクラスマニフェストをダウンロードします。

    curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
  4. storageclass.yaml ファイルの parameters セクションを編集します。各サンプル値は独自の値に置き換えます。

    parameters: subnetId: subnet-0eabfaa81fb22bcaf securityGroupIds: sg-068000ccf82dfba88 deploymentType: PERSISTENT_1 automaticBackupRetentionDays: "1" dailyAutomaticBackupStartTime: "00:00" copyTagsToBackups: "true" perUnitStorageThroughput: "200" dataCompressionType: "NONE" weeklyMaintenanceStartTime: "7:09:00" fileSystemTypeVersion: "2.12"
    • subnetId – Amazon FSx for Lustre ファイルシステムが作成されるサブネット ID。Amazon FSx for Lustre は、すべてのアベイラビリティーゾーンでサポートされているわけではありません。https://console.aws.amazon.com/fsx/ で Amazon FSx for Lustre コンソールを開き、使用するサブネットが、サポートされているアベイラビリティーゾーンにあることを確認します。次のように、サブネットにノードを含めることも、別のサブネットまたは VPC にすることもできます。

      • AWS Management Console で [コンピューティング] セクションのノードグループを選択すると、ノードサブネットを確認できます。

      • 指定するサブネットが、ノードがあるサブネットと同じでない場合は、VPC が接続されている必要があり、セキュリティグループで必要なポートが開いていることを確認する必要があります。

    • securityGroupIds – ファイルシステム用に作成したセキュリティグループの ID。

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

    • 他のパラメータ (オプション) - 他のパラメータについては、「GitHub」の「StorageClass の編集」を参照してください。

  5. ストレージクラスマニフェストを作成します。

    kubectl apply -f storageclass.yaml

    出力例は次のとおりです。

    storageclass.storage.k8s.io/fsx-sc created
  6. 永続的なボリューム要求マニフェストをダウンロードします。

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

    storage: 1200Gi
    • SCRATCH_2 および PERSISTENT1.2 TiB2.4 TiB、または 2.4 TiB を超えると 2.4 TiB の増分。

    • SCRATCH_11.2 TiB2.4 TiB3.6 TiB、または 3.6 TiB を超えると 3.6 TiB の増分。

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

    kubectl apply -f claim.yaml

    出力例は次のとおりです。

    persistentvolumeclaim/fsx-claim created
  9. ファイルシステムがプロビジョニングされていることを確認します。

    kubectl describe pvc

    出力例は次のとおりです。

    Name: fsx-claim Namespace: default StorageClass: fsx-sc Status: Bound [...]
    注記

    Status は、Pending になる前に 5~10 分間 Bound と表示されることがあります。StatusBound になるまで次のステップに進まないでください。Status が 10 分を超えて Pending になっている場合は、Events 内の警告メッセージを問題に対処するための参考として使用します。

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

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

    kubectl get pods

    出力例は次のとおりです。

    NAME READY STATUS RESTARTS AGE fsx-app 1/1 Running 0 8s
  12. ファイルシステムがアプリケーションによって正しくマウントされていることを確認します。

    kubectl exec -ti fsx-app -- df -h

    出力例は次のとおりです。

    Filesystem Size Used Avail Use% Mounted on overlay 80G 4.0G 77G 5% / tmpfs 64M 0 64M 0% /dev tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup 192.0.2.0@tcp:/abcdef01 1.1T 7.8M 1.1T 1% /data /dev/nvme0n1p1 80G 4.0G 77G 5% /etc/hosts shm 64M 0 64M 0% /dev/shm tmpfs 6.9G 12K 6.9G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs 3.8G 0 3.8G 0% /proc/acpi tmpfs 3.8G 0 3.8G 0% /sys/firmware
  13. データがサンプルアプリケーションによって FSx for Lustre ファイルシステムに書き込まれたことを確認します。

    kubectl exec -it fsx-app -- ls /data

    出力例は次のとおりです。

    out.txt

    この出力例は、サンプルアプリケーションが out.txt ファイルをファイルシステムに正常に書き込んだことを示しています。

注記

クラスターを削除する前に FSx for Lustre ファイルシステムを必ず削除してください。詳細については、「FSx for Lustre ユーザーガイド」の「リソースをクリーンアップする」を参照してください。