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

Amazon FSx for Lustre CSI 驱动程序

FSx for Lustre Container Storage Interface (CSI) 驱动程序提供了一个 CSI 接口,允许 Amazon EKS 集群管理 FSx for Lustre 文件系统的生命周期。有关更多信息,请参阅《FSx for Lustre 用户指南》。

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

注意

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

有关可用参数的详细说明和演示驱动程序功能的完整示例,请参阅 GitHub 上的 FSx for Lustre 容器存储接口 (CSI) 驱动程序项目。

先决条件

您必须:

  • 您的设备或 Amazon CloudShell 上安装并配置了 2.8.0 版或更高版本,或 1.25.87 版或更高版本的 Amazon CLI。您可以使用 aws --version | cut -d / -f2 | cut -d ' ' -f1 检查您的当前版本。软件包管理器(如 yumapt-get 或适用于 macOS 的 Homebrew)通常比 Amazon CLI 的最新版本落后几个版本。要安装最新版本,请参阅《Amazon Command Line Interface 用户指南》中的安装、更新和卸载 Amazon CLI使用 aws configure 进行快速配置。Amazon CloudShell 中安装的 Amazon CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《Amazon CloudShell 用户指南》中的将 Amazon CLI 安装到您的主目录

  • 您的设备或 Amazon CloudShell 上安装了 0.114.0 版或更高版本的 eksctl 命令行工具。要安装或更新 eksctl,请参阅 安装或更新 eksctl

  • 您的设备或 Amazon CloudShell 上安装了 kubectl 命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为 1.22,则可以将 kubectl 版本 1.211.221.23 用于它。要安装或升级 kubectl,请参阅 安装或更新 kubectl

以下步骤帮助您创建简单的测试集群并为其配置自定义联网,以便您可以了解它是如何工作的。我们不建议将测试集群用于生产工作负载。在本教程中,我们建议使用 example values,除非注意到要替换它们。您可以在完成生成集群的步骤时替换任何 example value。我们建议您在同一个终端中完成所有步骤,因为这些步骤中设置并使用了变量,而且这些变量不会存在于不同的终端中。

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

  1. 设置一些要在其余步骤中使用的变量。将 my-csi-fsx-cluster 替换为您要创建的测试集群的名称,并将 region-code 替换为您要在其中创建测试集群的 Amazon Web Services 区域。

    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 服务账户,并将 AmazonFSxFullAccess Amazon 托管策略附加到该服务账户。

    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"

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

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

    注意

    您可以在 GitHub 上查看应用于 aws-fsx-csi-driver 中的内容。

    kubectl apply -k "github.com/kubernetes-sigs/aws-fsx-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

    输出示例如下。

    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。如果您早些时候没有注意到它并且没有在 Amazon CLI 输出中再提供它,您可以执行以下操作以在 Amazon Web Services Management Console 中查看它。

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

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

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

    4. 选择 Outputs(输出)选项卡。Role1 ARN 列于 Outputs(1)页面上。

  6. 使用以下命令修补驱动程序部署以添加之前创建的服务账户。将 ARN 替换为您记下的 ARN。请将 111122223333 替换为您的账户 ID。

    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 容器存储接口 (CSI) 驱动程序 GitHub 存储库来使用动态预置的 FSx for Lustre 卷。

  1. 注意集群的安全组。您可以在 Amazon Web Services Management Console 中的 Networking(联网)部分下或通过使用以下 Amazon CLI 命令来查看它。

    aws eks describe-cluster --name $cluster_name --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  2. 根据《Amazon FSx for Lustre 用户指南》中的 Amazon VPC 安全组显示的标准,为您的 Amazon FSx 文件系统创建安全组。对于 VPC,选择 Networking(联网)部分下显示的集群的 VPC。对于“与 Lustre 客户端关联的安全组”,请使用您的集群安全组。您可以单独保留出站规则以允许所有流量

  3. 使用下面的命令下载存储类清单。

    curl -o storageclass.yaml 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(计算)部分下选择节点组来在 Amazon Web Services 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 claim.yaml 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 用户指南》中的清理资源