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

Amazon EFS CSI 驱动程序

重要

Amazon EFS 驱动程序在此 Amazon Web Services 区域中仅支持自行管理安装。有关如何将其添加为自行管理安装的说明,请参阅 GitHub 上的 安装

Amazon Elastic File System(Amazon EFS)提供无服务器的完全弹性文件存储,因此,您无需预置或管理存储容量和性能,即可共享文件数据。Amazon EFS Container Storage Interface(CSI)驱动程序提供了一个 CSI 接口,允许在 Amazon 上运行的 Kubernetes 集群管理 Amazon EFS 文件系统的生命周期。本主题介绍了如何部署 Amazon EFS CSI 驱动程序到您的 Amazon EKS 集群。

注意事项
  • Amazon EFS CSI 驱动程序与基于 Windows 的容器映像不兼容。

  • 不能将持久性卷的动态预置与 Fargate 节点结合使用,但可以使用静态预置

  • 动态预置需要 1.2 或更高版本的驱动程序。您可以在任何受支持的 Amazon EKS 集群版本上通过 1.1 版本的驱动程序,对持久性卷使用静态预置

  • 此驱动程序的 1.3.2 版或更高版本支持 Arm64 架构,包括基于 Amazon EC2 Graviton 的实例。

  • 版本 1.4.2 或更高版本的此驱动程序支持使用 FIPS 装载文件系统。

  • 注意 Amazon EFS 的资源配额。例如,可以为每个 Amazon EFS 文件系统创建 1000 个接入点的配额。有关更多信息,请参阅您无法更改的 Amazon EFS 资源配额

先决条件
  • 集群的现有 Amazon Identity and Access Management IAM OpenID Connect (OIDC) 提供商。要确定您是否已经拥有一个或是否要创建一个,请参阅 为集群创建 IAM OIDC 提供商

  • 在您的设备或 Amazon CloudShell 上安装和配置了 Amazon Command Line Interface(Amazon CLI)的版本 2.12.3 或更高版本,或版本 1.27.160 或更高版本。要查看当前版本,请使用 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 上安装了 kubectl 命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为 1.28,则可以将 kubectl1.271.281.29 版本与之配合使用。要安装或升级 kubectl,请参阅 安装或更新 kubectl

注意

Amazon Fargate 上运行的 Pod 会自动挂载 Amazon EFS 文件系统。

创建 IAM 角色

Amazon EFS CSI 驱动程序需要 IAM 权限才能与您的文件系统进行交互。创建 IAM 角色并向其附加所需的 Amazon 托管策略。您可以使用 eksctl、Amazon Web Services Management Console或 Amazon CLI。

注意

此过程中的具体步骤是为将驱动程序用作 Amazon EKS 附加组件而编写的。有关自行管理的安装的详细信息,请参阅 GitHub 上的 Set up driver permission

eksctl

使用 eksctl 创建 Amazon EFS CSI 驱动程序 IAM 角色

运行以下命令以创建 IAM 角色。将 my-cluster 替换为您的集群名称,并将 AmazonEKS_EFS_CSI_DriverRole 替换为您的角色名称。

export cluster_name=my-cluster export role_name=AmazonEKS_EFS_CSI_DriverRole eksctl create iamserviceaccount \ --name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $role_name \ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --approve TRUST_POLICY=$(aws iam get-role --role-name $role_name --query 'Role.AssumeRolePolicyDocument' | \ sed -e 's/efs-csi-controller-sa/efs-csi-*/' -e 's/StringEquals/StringLike/') aws iam update-assume-role-policy --role-name $role_name --policy-document "$TRUST_POLICY"
Amazon Web Services Management Console
使用 Amazon Web Services Management Console 创建 Amazon EFS CSI 驱动程序 IAM 角色
  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在左侧导航窗格中,选择 Roles(角色)。

  3. Roles(角色)页面上,选择 Create role(创建角色)。

  4. Select trusted entity(选择受信任的实体)页面上,请执行以下操作:

    1. Trusted entity type(受信任的实体类型)部分中,选择 Web identity(Web 身份)。

    2. 对于 Identity provider(身份提供商),为您的集群选择 OpenID Connect provider URL(提供商 URL)(如 Amazon EKS 中的 Overview(概述)下所示)。

    3. 对于 Audience (受众),请选择 sts.amazonaws.com

    4. 选择下一步

  5. Add permissions(添加权限)页面上,请执行以下操作:

    1. Filter policies (筛选器策略) 框中,输入 AmazonEFSCSIDriverPolicy

    2. 选中搜索返回的 AmazonEFSCSIDriverPolicy 左侧的复选框。

    3. 选择下一步

  6. Name, review, and create(命名、查看和创建)页面中,请执行以下操作:

    1. 对于 Role name(角色名称),请为角色输入唯一名称,例如 AmazonEKS_EFS_CSI_DriverRole

    2. 添加标签(可选)下,将标签作为键值对附加,以将元数据添加到角色。有关在 IAM 中使用标签的更多信息,请参阅《IAM 用户指南》中的标记 IAM 资源

    3. 选择创建角色

  7. 创建角色后,在控制台中选择角色以将其打开进行编辑。

  8. 选择 Trust relationships(信任关系)选项卡,然后选择 Edit trust policy(编辑信任策略)。

  9. 该行看起来类似于以下行:

    "oidc.eks.region-code.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"

    将以下行添加到上一行的上方。region-code 替换为集群所在的 Amazon Web Services 区域。EXAMPLED539D4633E53DE1B71EXAMPLE 替换为集群的 OIDC 提供商 ID。

    "oidc.eks.region-code.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-*",
  10. Condition 运算符从 "StringEquals" 修改为 "StringLike"

  11. 选择 Update policy(更新策略)以完成操作。

Amazon CLI
使用 Amazon CLI 创建 Amazon EFS CSI 驱动程序 IAM 角色
  1. 查看集群的 OIDC 提供商 URL。将 my-cluster 替换为您的集群名称。如果命令的输出为 None,请查看先决条件

    aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text

    示例输出如下。

    https://oidc.eks.region-code.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B71EXAMPLE
  2. 创建授予 AssumeRoleWithWebIdentity 操作权限的 IAM 角色。

    1. 将以下内容复制到名为 aws-efs-csi-driver-trust-policy.json 的文件中。请将 111122223333 替换为您的账户 ID。将 EXAMPLED539D4633E53DE1B71EXAMPLEregion-code 替换为在上一步中返回的值。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "oidc.eks.region-code.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-*", "oidc.eks.region-code.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" } } } ] }
    2. 创建角色。您可以将 AmazonEKS_EFS_CSI_DriverRole 更改为其他名称,但如果更改,请确保在后续步骤中也做出相应更改。

      aws iam create-role \ --role-name AmazonEKS_EFS_CSI_DriverRole \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy.json"
  3. 使用以下命令以将所需的 Amazon 托管策略附加到角色。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --role-name AmazonEKS_EFS_CSI_DriverRole

安装 Amazon EFS CSI 驱动程序

要详细了解如何执行 Amazon EFS CSI 驱动程序的自行管理安装,请参阅 GitHub 上的 安装

创建 Amazon EFS 文件系统

要创建 Amazon EFS 文件系统,请参阅 GitHub 上的 为 Amazon EKS 创建 Amazon EKS 文件系统

部署示例应用程序

您可以部署各种示例应用程序并根据需要对其进行修改。有关更多信息,请参阅 GitHub 上的 示例