Amazon FSx for Lustre CSI 驱动程序
FSx for Lustre Container Storage Interface (CSI) 驱动程序
本主题介绍了如何部署 FSx for Lustre CSI 驱动程序到您的 Amazon EKS 集群,并验证它是否正常工作。我们建议使用 0.4.0 版本的驱动程序。
此驱动程序在 Kubernetes 版本 1.21 及更高版本的 Amazon EKS 集群和节点上受支持。此驱动程序在 Fargate 或 Arm 节点上不受支持。Amazon EKS 集群上不支持 FSx for Lustre CSI 驱动程序的 Alpha 功能。驱动程序处于 Beta 版本。它经过了严格测试且 Amazon EKS 支持将它用于生产。不会删除对此驱动程序的支持,尽管详细信息可能会发生变化。如果驱动程序的架构或原理图发生变化,则将提供迁移到下一版本的说明。
有关可用参数的详细说明和演示驱动程序功能的完整示例,请参阅 GitHub 上的 FSx for Lustre Container Storage Interface (CSI) 驱动程序
先决条件
您必须:
-
您的计算机或 Amazon CloudShell 上安装并配置了 2.4.9 版或更高版本,或 1.22.30 版或更高版本的 Amazon CLI。有关更多信息,请参阅 Amazon Command Line Interface 用户指南中的安装、更新和卸载 Amazon CLI 和使用
aws configure
进行快速配置。 -
现有 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS。
-
集群的现有 Amazon Identity and Access Management IAM OpenID Connect (OIDC) 提供程序。要确定您是否已经拥有一个或是否要创建一个,请参阅 为集群创建 IAM OIDC 提供商。
-
计算机或 Amazon CloudShell 上已安装 0.84.0 版或更高版本的
eksctl
命令行工具。要安装或更新eksctl
,请参阅安装 eksctl。 -
计算机或 Amazon CloudShell 上安装的
kubectl
命令行工具。其版本必须与您的集群版本相同,或者最多高出两个版本。要安装或升级kubectl
,请参阅 安装 kubectl。
将 FSx for Lustre CSI 驱动程序部署到 Amazon EKS 集群
-
创建允许驱动程序代表您调用 Amazon API 的 IAM 策略和服务账户。
-
复制以下文本并将其保存到名为
fsx-csi-driver.json
的文件。{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iam:CreateServiceLinkedRole", "iam:AttachRolePolicy", "iam:PutRolePolicy" ], "Resource":"arn:aws-cn: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":[ "*" ] } ] }
-
创建策略。您可以将
替换为其他名称。Amazon_FSx_Lustre_CSI_Driver
aws iam create-policy \ --policy-name
Amazon_FSx_Lustre_CSI_Driver
\ --policy-document file://fsx-csi-driver.json
记下返回的策略 Amazon Resource Name (ARN)。
-
-
为驱动程序创建一个 Kubernetes 服务账户,并将策略附加到该服务账户。将策略的 ARN 替换为上一步骤中返回的 ARN。
eksctl create iamserviceaccount \ --region
region-code
\ --name fsx-csi-controller-sa \ --namespace kube-system \ --clusterprod
\ --attach-policy-arn arn:aws:iam::111122223333:policy/Amazon_FSx_Lustre_CSI_Driver
\ --approve输出:
创建服务账户时,您将看到几行输出。输出的最后一行类似于以下示例行。
[ℹ] created serviceaccount "kube-system/fsx-csi-controller-sa"
记录已部署的 Amazon CloudFormation 堆栈的名称。在上面的示例输出中,堆栈的名称为
eksctl-prod-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa
。 -
记录所创建角色的角色 ARN。
打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation
。 -
确保将控制台设置为您在其中创建 IAM 角色的 Amazon Web Services 区域,然后选择 Stacks(堆栈)。
-
选择名为
eksctl-prod-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa
的堆栈。 -
选择 Outputs(输出)选项卡。Role ARN(角色 ARN)列在 Output(1)(输出 (1))页面上。
-
使用以下命令部署驱动程序。
注意 要查看或手动下载
yaml
文件,您可以在 aws-fsx-csi-driver Github上找到它。 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
-
修补驱动程序部署以添加之前创建的服务账户,并将 ARN 替换为记录的 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 驱动程序是否正常工作
此过程利用来自 FSx for Lustre Container Storage Interface (CSI) 驱动程序
-
创建 Amazon S3 存储桶,然后通过创建文件并将文件复制到该存储桶,从而在存储桶中创建一个名为
export
的文件夹。aws s3 mb s3://
fsx-csi
echo test-file >> testfile aws s3 cp testfile s3://fsx-csi
/export/testfile -
使用下面的命令下载
storageclass
清单。curl -o storageclass.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/specs/storageclass.yaml
-
编辑文件并将每个
替换为自己的值。example-value
parameters: subnetId:
subnet-056da83524edbe641
securityGroupIds:sg-086f61ea73388fb6b
s3ImportPath: s3://ml-training-data-000
s3ExportPath: s3://ml-training-data-000/export
deploymentType:SCRATCH_2
-
subnetId – 应在其中创建 Amazon FSx for Lustre 文件系统的子网 ID。并非所有可用区都支持 Amazon FSx for Lustre。打开 https://console.aws.amazon.com/fsx/
中 Amazon FSx for Lustre 控制台,确认您要使用的子网是否位于支持的可用区中。该子网可以包含您的节点,也可以是不同的子网或 VPC。如果您指定的子网不是节点所在的子网,则必须已连接 VPC,并且必须确保已在您的安全组中打开必要的端口。 -
securityGroupIds – 您的节点的安全组 ID。
注意 安全组必须允许入站/出站访问 Lustre 端口 988 和 1021–1023。有关更多信息,请参阅 Amazon FSx for Lustre 用户指南的 Lustre 客户端 VPC 安全组规则。
-
s3ImportPath – 要将数据从中复制到持久性卷的 Amazon Simple Storage Service 数据存储库。指定之前创建的
fsx-csi
存储桶。 -
s3ExportPath – 要将新文件或修改过的文件导出到的 Amazon S3 数据存储库。指定之前创建的
fsx-csi/export
文件夹。 -
deploymentType – 文件系统部署类型。有效值包括
SCRATCH_1
、SCRATCH_2
和PERSISTENT_1
。有关部署类型的更多信息,请参阅创建 Amazon FSx for Lustre 文件系统。
注意 s3ImportPath
和s3ExportPath
的 Amazon S3 存储桶必须相同,否则驱动程序无法创建 FSx for Lustre 文件系统。s3ImportPath
可以是独立的。系统将自动创建随机路径,例如s3://ml-training-data-000/FSxLustre20190308T012310Z
。如果不为s3ExportPath
指定值,则无法使用S3ImportPath
。 -
-
创建
storageclass
。kubectl apply -f storageclass.yaml
-
下载持久卷注册清单。
curl -o claim.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/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
-
确认已预配置文件系统。
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
,然后才会更改为Bound
。请勿继续下一步,直到STATUS
变成Bound
。 -
部署示例应用程序。
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/specs/pod.yaml
-
验证示例应用程序正在运行。
kubectl get pods
输出
NAME READY STATUS RESTARTS AGE fsx-app 1/1 Running 0 8s
从 FSx for Lustre 文件系统访问 Amazon S3 文件
如果您只希望导入和读取数据,而不执行任何修改和创建操作,则在 s3ExportPath
文件中不需要 storageclass.yaml
的值。验证示例应用程序已将数据写入 FSx for Lustre 文件系统。
kubectl exec -it fsx-app ls /data
输出。
export out.txt
示例应用程序已将 out.txt
文件写入文件系统。
将文件存档到 s3ExportPath
对于新文件以及修改后的文件,您可以通过 Lustre 用户空间工具,使用您为 s3ExportPath
指定的值将数据存档回 Amazon S3。
-
将文件重新导出到 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 客户端来构建容器镜像。
-
-
确认
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