FSx for Lustre を使用して高性能アプリケーションを保存する
FSx for Lustre コンテナストレージインターフェイス (CSI) ドライバー
このトピックでは、FSx for Lustre CSI ドライバーを Amazon EKS クラスターにデプロイし、動作することを確認する方法を示します。最新バージョンのドライバーを使用することをお勧めします。利用可能なバージョンについては、GitHub の「CSI Specification Compatibility Matrix
注記
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 のyum
、apt-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.28
、1.29
、または1.30
が使用できます。kubectl
をインストールまたはアップグレードする方法については、「kubectl と eksctl のセットアップ」を参照してください。
次の手順は、FSx for Lustre CSI ドライバーを使用して簡単なテストクラスターを作成して、動作を確認できるようにするのに役立ちます。本番ワークロードにテストクラスターを使用することはお勧めしません。このチュートリアルでは、置き換えが必要だと明記されている場合を除き、サンプル値
をそのまま使用することをお勧めします。本番クラスター向けに手順を完了する際には、サンプル値
を任意の値に置き換えることができます。変数は、この手順全体で設定および使用され、別のターミナルには存在しないため、同じターミナルですべての手順を完了することをお勧めします。
-
残りの手順で使用する変数をいくつか設定します。
my-csi-fsx-cluster
を作成するテストクラスターの名前に置き換え、region-code
をテストクラスターを作成する AWS リージョンに置き換えます。export cluster_name=my-csi-fsx-cluster export region_code=region-code
-
テストクラスターを作成します。
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
-
ドライバーの 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
です。 -
次のコマンドでドライバーをデプロイします。
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
-
作成されたロールの ARN を書き留めます。書き留めていなくて、AWS CLI 出力として表示されなくなっている場合は、次の操作で AWS Management Console に表示できます。
-
AWS CloudFormation コンソール
を開きます。 -
コンソールが IAM ロールを作成した AWS リージョンに設定されていることを確認してから、[スタック] を選択します。
-
eksctl-my-csi-fsx-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa
という名前のスタックを選択します。 -
[出力] タブを選択します。[Role1] ARN が [出力 (1)] ページに表示されます。
-
-
次のコマンドを使用して、ドライバーのデプロイにパッチを適用し、前に作成したサービスアカウントを追加します。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
-
クラスターのセキュリティグループを書き留めます。AWS Management Console の [ネットワーク] セクションまたは次の AWS CLI コマンドを使用して確認できます。
aws eks describe-cluster --name $cluster_name --query cluster.resourcesVpcConfig.clusterSecurityGroupId
-
「Amazon FSx for Lustre ユーザーガイド」の「Amazon VPC セキュリティグループ」に示す基準に従って、Amazon FSx ファイルシステムのセキュリティグループを作成します。[VPC] で、[ネットワーク] セクションに示されているようにクラスターの VPC を選択します。「Lustre クライアントに関連付けられているセキュリティグループ」には、クラスターセキュリティグループを使用します。アウトバウンドルールをそのままにして、[すべてのトラフィック] を許可することができます。
-
次のコマンドを使用して、ストレージクラスマニフェストをダウンロードします。
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
-
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_1
、SCRATCH_2
、PERSISTENT_1
、およびPERSISTENT_2
です。デプロイのタイプの詳細については、「Amazon FSx for Lustre ファイルシステムを作成する」を参照してください。 -
他のパラメータ (オプション) - 他のパラメータについては、「GitHub」の「StorageClass の編集
」を参照してください。
-
-
ストレージクラスマニフェストを作成します。
kubectl apply -f storageclass.yaml
出力例は次のとおりです。
storageclass.storage.k8s.io/fsx-sc created
-
永続的なボリューム要求マニフェストをダウンロードします。
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/claim.yaml
-
(オプション)
claim.yaml
ファイルを編集します。ストレージ要件と前のステップで選択したdeploymentType
に基づいて、1200Gi
を次のいずれかの増分値に変更します。storage: 1200Gi
-
SCRATCH_2
およびPERSISTENT
–1.2 TiB
、2.4 TiB
、または 2.4 TiB を超えると 2.4 TiB の増分。 -
SCRATCH_1
–1.2 TiB
、2.4 TiB
、3.6 TiB
、または 3.6 TiB を超えると 3.6 TiB の増分。
-
-
永続的なボリューム要求を作成します。
kubectl apply -f claim.yaml
出力例は次のとおりです。
persistentvolumeclaim/fsx-claim created
-
ファイルシステムがプロビジョニングされていることを確認します。
kubectl describe pvc
出力例は次のとおりです。
Name: fsx-claim Namespace: default StorageClass: fsx-sc Status: Bound [...]
注記
Status
は、Pending
になる前に 5~10 分間Bound
と表示されることがあります。Status
がBound
になるまで次のステップに進まないでください。Status
が 10 分を超えてPending
になっている場合は、Events
内の警告メッセージを問題に対処するための参考として使用します。 -
サンプルアプリケーションをデプロイします。
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/pod.yaml
-
サンプルアプリケーションが実行中であることを確認します。
kubectl get pods
出力例は次のとおりです。
NAME READY STATUS RESTARTS AGE fsx-app 1/1 Running 0 8s
-
ファイルシステムがアプリケーションによって正しくマウントされていることを確認します。
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
-
データがサンプルアプリケーションによって FSx for Lustre ファイルシステムに書き込まれたことを確認します。
kubectl exec -it fsx-app -- ls /data
出力例は次のとおりです。
out.txt
この出力例は、サンプルアプリケーションが
out.txt
ファイルをファイルシステムに正常に書き込んだことを示しています。
注記
クラスターを削除する前に FSx for Lustre ファイルシステムを必ず削除してください。詳細については、「FSx for Lustre ユーザーガイド」の「リソースをクリーンアップする」を参照してください。