部署适用于 Lustre 的 FSx 驱动程序 - Amazon EKS

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

部署适用于 Lustre 的 FSx 驱动程序

本主题演示如何将适用于 Lustre 的 FSx CSI 驱动程序部署到 Amazon EKS 集群,以及验证驱动程序是否正常工作。建议使用最新版本的驱动程序。有关可用版本,请参阅 GitHub 上的 CSI Specification Compatibility Matrix(CSI 规范兼容性矩阵)。

注意

Fargate 或 Amazon EKS 混合节点功能均不支持该驱动程序。

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

先决条件

  • 现有集群。

  • Amazon FSx CSI 驱动程序 EKS 附加组件需要 EKS 容器组身份代理进行身份验证。如果没有此组件,附加组件将因错误 Amazon EKS Pod Identity agent is not installed in the cluster 而失败,从而无法进行卷操作。在部署 FSx CSI 驱动程序附加组件之前或之后安装容器组身份代理。有关更多信息,请参阅 设置 Amazon EKS 容器组身份代理

  • 在您的设备或 AWS CloudShell 上安装和配置 AWS 命令行界面(AWS CLI)的版本 2.12.3 或更高版本,或版本 1.27.160 或更高版本。要查看当前版本,请使用 aws --version | cut -d / -f2 | cut -d ' ' -f1yumapt-get 或适用于 macOS 的 Homebrew 等软件包管理器通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本,请参阅《AWS 命令行界面用户指南》中的安装使用 aws configure 快速配置。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《AWS CloudShell 用户指南》中的将 AWS CLI 安装到您的主目录

  • 您的设备或 AWS CloudShell 上安装 0.210.0 版或更高版本的 eksctl 命令行工具。要安装或更新 eksctl,请参阅 eksctl 文档中的 Installation

  • 您的设备或 AWS CloudShell 上安装了 kubectl 命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为 1.29,则可以将 kubectl1.281.291.30 版本与之配合使用。要安装或升级 kubectl,请参阅 设置 kubectl 和 eksctl

第 1 步:创建 IAM 角色

Amazon FSx CSI 插件需要 IAM 权限才能代表您调用 AWS API。

注意

容器组(pod)将有权访问分配给 IAM 角色的权限,除非您阻止对 IMDS 的访问。有关更多信息,请参阅 使用最佳实践保护 Amazon EKS 集群

以下过程为您演示了如何创建 IAM 角色并向其附加 AWS 托管策略。

  1. 使用以下命令创建 IAM 角色并附加 AWS 托管策略。将 my-cluster 替换为您要使用的集群的名称。此命令将部署 AWS CloudFormation 堆栈,该堆栈将创建 IAM 角色,并会将 IAM 策略附加到该堆栈。

    eksctl create iamserviceaccount \ --name fsx-csi-controller-sa \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKS_FSx_CSI_DriverRole \ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonFSxFullAccess \ --approve

    创建服务账户时,您将看到几行输出。输出的最后一行类似于以下行。

    [ℹ] 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-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa" [ℹ] deploying stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa" [ℹ] waiting for CloudFormation stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa" [ℹ] created serviceaccount "kube-system/fsx-csi-controller-sa"

    记录已部署的 AWS CloudFormation 堆栈的名称。在上面的示例输出中,堆栈的名称为 eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa

现在您已经创建了 Amazon FSx CSI 驱动程序 IAM 角色,可以前往完成下一部分。使用此 IAM 角色部署附加组件后,该附加组件会创建一个名为 fsx-csi-controller-sa 的服务账户,并配置为使用该服务账户。服务账户绑定到被分配了所需的 Kubernetes 权限的 Kubernetes clusterrole

第 2 步:安装 Amazon FSx CSI 驱动程序

我们建议您通过 Amazon EKS 附加组件来安装 Amazon FSx CSI 驱动程序,从而提高安全性并减少工作量。要将 Amazon EKS 附加组件添加到您的集群,请参阅 创建 Amazon EKS 附加组件。有关附加组件的更多信息,请参阅 Amazon EKS 附加组件

重要

集群中预先安装的 Amazon FSx CSI 驱动程序可能会导致附加组件安装失败。当您在存在非 EKS FSx CSI 驱动程序的情况下尝试安装 Amazon EKS 附加组件版本时,由于资源冲突,安装将失败。在安装过程中使用 OVERWRITE 标志解决此问题。

aws eks create-addon --addon-name aws-fsx-csi-driver --cluster-name my-cluster --resolve-conflicts OVERWRITE

如果要对 Amazon FSx CSI 驱动程序进行自主管理型安装,请参阅 GitHub 上的 Installation

第 3 步:部署存储类、持久卷声明和示例应用程序

此过程利用 FSx for Lustre Container Storage Interface(CSI)驱动程序 GitHub 存储库来使用动态预置的 FSx for Lustre 卷。

  1. 注意集群的安全组。您可以在 AWS Management Console中的联网部分下或通过使用以下 AWS CLI 命令来查看它。将 my-cluster 替换为您要使用的集群的名称。

    aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  2. 根据《Amazon FSx for Lustre 用户指南》中的 Amazon VPC 安全组显示的标准,为您的 Amazon FSx 文件系统创建安全组。对于 VPC,选择 Networking(联网)部分下显示的集群的 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 文件的参数部分。将所有 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:

      • 您可以通过在 Compute(计算)部分下选择节点组来在 AWS Management Console 中检查节点子网。

      • 如果您指定的子网不是节点所在的子网,则必须已连接 VPC,并且必须确保已在您的安全组中打开必要的端口。

    • securityGroupIds – 您为文件系统创建的安全组的 ID。

    • deploymentType(可选)– 文件系统部署类型。有效值为 SCRATCH_1SCRATCH_2PERSISTENT_1PERSISTENT_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_2PERSISTENT1.2 TiB2.4 TiB,或 2.4TiB 之上 2.4TiB 的增量。

    • SCRATCH_11.2 TiB2.4 TiB3.6 TiB,或 3.6TiB 之上 3.6TiB 的增量。

  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 可能会在 5-10 分钟内显示为 Pending,然后才会更改为 Bound。在 Status 变成 Bound 之前,请勿继续执行下一步。如果 Status 显示 Pending 10 分钟以上,使用 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 用户指南》中的清理资源

适用于 Lustre 的 FSx 的性能调整

在 Amazon EKS 中使用适用于 Lustre 的 FSx 时,您可以通过在节点初始化期间应用 Lustre 调整来优化性能。建议使用启动模板用户数据来确保所有节点的配置一致。

这些调优包括:

  • 网络和 RPC 优化

  • Lustre 模块管理

  • LRU(锁定资源单位)调优:

  • 客户端缓存控制设置

  • OST 和 MDC 的 RPC 控件

有关实现这些性能调优的详细说明: