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

注記

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

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

前提条件

必要なもの:

  • ご使用のデバイスまたは AWS CloudShell で、バージョン 2.12.3 以降、または AWS Command Line Interface (AWS CLI) のバージョン 1.27.160 以降がインストールおよび設定されていること。現在のバージョンを確認するには、「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.172.0 以降。eksctl をインストールまたはアップグレードするには、eksctl ドキュメントの「インストール」を参照してください。

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

次の手順は、FSx for Lustre CSI ドライバーを使用して簡単なテストクラスターを作成して、動作を確認できるようにするのに役立ちます。本番ワークロードにテストクラスターを使用することはお勧めしません。このチュートリアルでは、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 サービスアカウントを作成し、次のコマンドを使用して 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」を参照してください。

    注記

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

    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. https://console.aws.amazon.com/cloudformation で 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
Kubernetes ストレージクラス、永続的なボリューム要求、およびサンプルアプリケーションをデプロイして、CSI ドライバーが動作していることを確認するには

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

      • 指定するサブネットが、ノードがあるサブネットと同じでない場合は、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 ユーザーガイド」の「リソースをクリーンアップする」を参照してください。