Amazon FSx for Lustre CSI 驱动程序 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon FSx for Lustre CSI 驱动程序

这些区域有:Amazon FSx for Lustre Container Container Interface (CSI) 驱动程序提供了一个 CSI 接口,允许 Amazon EKS 群集管理 Lustre 文件系统的 Amazon FSx 的生命周期。

本主题介绍了如何部署 Amazon FSx for Lustre CSI 驱动程序到 Amazon EKS 群集,并验证它是否正常工作。我们建议使用驱动程序版本 0.4.0。

注意

Kubernetes 版本 1.20 及更高版本 Amazon EKS 群集和节点上支持此驱动程序。Fargate 节点或 Arm 节点上不支持驱动程序。Amazon EKS 群集上不支持 Amazon FSx for Lustre CSI 驱动程序的 Alpha 功能。驱动程序处于 Beta 版本。Amazon EKS 已经过了很好的测试且支持将它用于生产。不会删除对此驱动程序的支持,尽管详细信息可能会发生变化。如果驱动程序的架构或原理图发生变化,则将提供迁移到下一版本的说明。

有关可用参数的详细说明和演示驱动程序功能的完整示例,请参阅Amazon FSx for Lustre Container Container Interface (CSI) 驱动程序项 GitHub。

Prerequisites

您必须:

  • 的 1.19.75 版本或更高版本Amazon CLI已安装。您可以使用 aws --version 命令检查当前已安装的版本。要安装或升级 Amazon CLI,请参阅安装 Amazon CLI

  • 现有 Amazon EKS 群集。如果您当前没有集群,请参阅Amazon EKS 入门创建一个集群。

  • 适用于您的集群的现有 IAM OpenID Connect (OIDC) 提供商。要确定您是否已经拥有或创建一个,请参阅为您的集群创建 IAM OIDC 提供商

  • 的 0.54.0 版本或更高版本eksctl已安装。您可以使用 eksctl version 命令检查当前已安装的版本。要安装或升级 eksctl,请参阅安装或升级 eksctl

  • 已安装与您的集群版本相对应的 kubectl 的最新版本。您可以使用 kubectl version --short --client 命令检查当前已安装的版本。有关更多信息,请参阅 安装 kubectl

将 Amazon FSx for Lustre CSI 驱动程序部署到 Amazon EKS 群集

  1. 创建 IAM 策略和服务账户,允许驱动程序调用Amazon代表您访问 API。

    1. 复制以下文本并将其保存到名为 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":[ "*" ] } ] }
    2. 创建策略。您可以替换<Amazon_FSx_Lustre_CSI_Driver>使用不同的名称。

      aws iam create-policy \ --policy-name <Amazon_FSx_Lustre_CSI_Driver> \ --policy-document file://fsx-csi-driver.json

      记录返回的策略 Amazon 资源名称 (ARN)。

  2. 为驱动程序创建一个 Kubernetes 服务账户,并将策略附加到该服务账户。将策略的 ARN 替换为上一步中返回的 ARN。

    eksctl create iamserviceaccount \ --region <region-code> \ --name fsx-csi-controller-sa \ --namespace kube-system \ --cluster <prod> \ --attach-policy-arn arn:aws-cn: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

  3. 请注意,角色 ARN,表示所创建角色。

    1. 打开 Amazon CloudFormation 控制台,网址:https://console.aws.amazon.com/cloudformation

    2. 确保将控制台设置为您在其中创建 IAM 角色的区域,然后选择堆栈

    3. 选择名为 eksctl-prod-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa 的堆栈。

    4. 选择 Outputs (输出) 选项卡。Role ARN (角色 ARN) 列在 Output(1) (输出 (1)) 页面上。

  4. 使用以下命令部署驱动程序。

    注意

    要查看或下载yaml文件,您可以在aws-fsx-CSI 驱动程序吉途布

    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
  5. 修补驱动程序部署以添加在步骤 3 中创建的服务账户,并将 ARN 替换为在第 4 步中记录的 ARN。

    kubectl annotate serviceaccount -n kube-system <fsx-csi-controller-sa> \ eks.amazonaws.com/role-arn=<arn:aws-cn:iam::111122223333:role/eksctl-prod-addon-iamserviceaccount-kube-sys-Role1-NPFTLHJ5PJF5> --overwrite=true

部署 Kubernetes 存储类、持久卷注册和示例应用程序,以验证 CSI 驱动程序是否正常工作

此过程使用针对 Amazon S3 的动态卷预配置来自 的Amazon FSx for Lustre Container Container Interface (CSI) 驱动程序GitHub 存储库使用动态配置的 Amazon FSx for Lustre 卷。

  1. 创建 Amazon S3 存储桶及其中名为export创建文件并将文件复制到存储桶。

    aws s3 mb s3://<fsx-csi> echo test-file >> testfile aws s3 cp testfile s3://<fsx-csi>/export/testfile
  2. 使用下面的命令下载 storageclass 清单。

    curl -o storageclass.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/specs/storageclass.yaml
  3. 编辑文件并替换现有的<example values>用自己的值。

    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。通过以下网址打开 Amazon FSx for Lustre 控制台:https://console.aws.amazon.com/fsx/确认您要使用的子网是否位于支持的可用区中。该子网可以包含您的节点,也可以是不同的子网或 VPC。如果您指定的子网不是您所在的子网,则必须为connected,并且必须确保已在您的安全组中打开必要的端口。

    • securityGroupIds— 节点的安全组 ID。

    • 3 导入路径— Amazon 简单存储服务数据存储库,您要将数据从中复制到持久卷。指定您在第 1 步中创建的 fsx-csi 存储桶。

    • S3 导出路径— 要将新文件或修改过的文件导出到的 Amazon S3 数据存储库。指定您在第 1 步中创建的 fsx-csi/export 文件夹。

    • deploymentType— 文件系统部署类型。有效值包括 SCRATCH_1SCRATCH_2PERSISTENT_1。有关部署类型的更多信息,请参阅创建 Amazon FSx for Lustre 文件系统

    注意

    Amazon S3 存储桶s3ImportPaths3ExportPath必须相同,否则驱动程序无法创建 Amazon FSx for Lustre 文件系统。s3ImportPath 可以是独立的。系统将自动创建随机路径,例如 s3://ml-training-data-000/FSxLustre20190308T012310Z。如果不为 S3ImportPath 指定值,则无法使用 s3ExportPath

  4. 创建 storageclass

    kubectl apply -f storageclass.yaml
  5. 下载持久卷注册清单。

    curl -o claim.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/specs/claim.yaml
  6. (可选)编辑 claim.yaml 文件。变更<1200Gi>设置为下面列出的增量值之一,具体取决于您的存储要求和deploymentType在上一步中选择的值。

    storage: <1200Gi>
    • SCRATCH_2PERSISTENT— 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 增量。

  7. 创建持久卷注册。

    kubectl apply -f claim.yaml
  8. 确认已预配置文件系统。

    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

  9. 部署示例应用程序。

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/specs/pod.yaml
  10. 验证示例应用程序正在运行。

    kubectl get pods

    输出

    NAME READY STATUS RESTARTS AGE fsx-app 1/1 Running 0 8s

通过 Amazon FSx for Lustre 文件系统访问 Amazon S3 文件

如果您只希望导入和读取数据,而不执行任何修改和创建操作,则在 storageclass.yaml 文件中不需要 s3ExportPath 的值。验证示例应用程序已将数据写入 Amazon FSx for Lustre 文件系统。

kubectl exec -it fsx-app ls /data

输出。

export out.txt

示例应用程序已将 out.txt 文件写入文件系统。

将文件存档到 s3ExportPath

对于新文件以及修改后的文件,您可以通过 Lustre 用户空间工具,使用您为s3ExportPath

  1. 将文件重新导出回 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 客户端来构建容器映像。

  2. 确认已确认out.txt文件已写入到s3ExportPathAmazon S3 中的文件夹。

    aws s3 ls fsx-csi/export/

    输出

    2019-12-23 12:11:35 4553 out.txt 2019-12-23 11:41:21 10 testfile