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

Amazon FSx for Lustre CSI ドライバー

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

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

注記

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

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

前提条件

必要なもの:

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

  • デバイスまたは AWS CloudShell にインストールされている eksctl コマンドラインツールのバージョン 0.114.0 以降。eksctl をインストールまたは更新するには、「eksctl のインストールまたは更新」を参照してください。

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

次の手順は、簡単なテストクラスターを作成し、カスタムネットワークを設定して、動作を確認できるようにするのに役立ちます。本番ワークロードにテストクラスターを使用することはお勧めしません。このチュートリアルでは、example values を使用することをお勧めしますが、置き換えるように書かれている箇所はその限りではありません。本番クラスター向けに手順を完了するときには、どの example value も置き換えることができます。変数は、この手順全体で設定および使用され、別のターミナルには存在しないため、同じターミナルですべての手順を完了することをお勧めします。

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

  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 サービスアカウントを作成し、次のコマンドを使用して AmazonFSxFullAccess AWS マネージドポリシーをサービスアカウントに添付します。クラスターが 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. 次のコマンドでドライバーをデプロイします。

    注記

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

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

    出力例を次に示します。

    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 コンソール (https://console.aws.amazon.com/cloudformation) を開きます。

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

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

    4. [出力] タブを選択します。[Role1] ARN が [Outputs (1)] (出力 (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

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

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

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

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

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

    curl -o storageclass.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
  4. storageclass.yaml ファイルの parameters セクションを編集します。example value をすべて自分の値に置き換えてください。

    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 で [Compute] (コンピューティング) セクションのノードグループを選択すると、ノードサブネットを確認できます。

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

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

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

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

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

    kubectl apply -f storageclass.yaml

    出力例を次に示します。

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

    curl -o claim.yaml 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 ユーザーガイド」の「リソースをクリーンアップする」を参照してください。