使用 Amazon EFS 存储弹性文件系统 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon EFS 存储弹性文件系统

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 版本的驱动程序,对持久性卷使用静态预置(请参阅了解 EKS 上的 Kubernetes 版本生命周期)。

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

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

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

  • 2.0.0 版本开始,此驱动程序使用 stunnel 切换到 efs-proxy 进行 TLS 连接。使用 efs-proxy 时,它将打开多个线程,其数量等于一加上它正在运行的节点的内核数。

先决条件

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

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

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

步骤 1:创建 IAM 角色

Amazon EFS CSI 驱动程序需要 IAM 权限才能与您的文件系统进行交互。创建 IAM 角色并向其附加所需的 Amazon 托管策略。要实现此过程,可以使用以下过程之一:

注意

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

eksctl

使用 eksctl 运行以下命令以创建 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-cn: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 运行以下命令以创建 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. 对于身份提供者,为您的集群选择 OpenID Connect 提供者 URL(如 Amazon EKS 中的概述下所示)。

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

    4. 选择下一步

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

    1. 筛选策略框中,输入 AmazonEFSCSIDriverPolicy

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

    3. 选择下一步

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

    1. 对于角色名称,为角色输入唯一名称,例如 AmazonEKS_EFS_CSI_DriverRole

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

    3. 选择 Create role(创建角色)。

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

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

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

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

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

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

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

Amazon CLI

使用 Amazon CLI 运行以下命令以创建 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/id/EXAMPLED539D4633E53DE1B71EXAMPLE
  2. 创建授予 AssumeRoleWithWebIdentity 操作权限的 IAM 角色。

    1. 将以下内容复制到名为 aws-efs-csi-driver-trust-policy.json`` 的文件中。请将 111122223333 替换为您的账户 ID。将 EXAMPLED539D4633E53DE1B71EXAMPLEregion-code 替换为上一步中返回的值。如果您的集群位于 Amazon GovCloud(美国东部)或 Amazon GovCloud(美国西部)Amazon 区域,则将 arn:aws-cn: 替换为 arn:aws-us-gov:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws-cn:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-*", "oidc.eks.region-code.amazonaws.com/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 托管策略附加到角色。如果您的集群位于 Amazon GovCloud(美国东部)或 Amazon GovCloud(美国西部)Amazon 区域,则将 arn:aws-cn: 替换为 arn:aws-us-gov:

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

第 2 步:获取 Amazon EFS CSI 驱动程序

我们建议您通过 Amazon EKS 附加组件方式来安装 Amazon EFS CSI 驱动程序。要将 Amazon EKS 附加组件添加到您的集群,请参阅 创建 Amazon EKS 附加组件。有关附加组件的更多信息,请参阅 Amazon EKS 附加组件。如果您无法使用 Amazon EKS 附加组件,我们鼓励您向容器路线图 GitHub 存储库提交有关您为什么无法使用的问题。

如果您想要自行管理 Amazon EFS CSI 驱动程序的安装,请参阅 GitHub 上的 安装

步骤 3:创建 Amazon EFS 文件系统

注意

Amazon Fargate 不需要此步骤。在 Fargate 上运行的 Pod 会自动挂载 Amazon EFS 文件系统。

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

第 4 步:部署示例应用程序

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