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

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

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

Amazon Elastic File System(Amazon EFS)提供无服务器的完全弹性文件存储,因此,您无需预置或管理存储容量和性能,即可共享文件数据。Amazon EFS Container Storage Interface(CSI)驱动程序提供了一个 CSI 接口,允许在 AWS 上运行的 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 资源配额

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

先决条件

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

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

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

步骤 1:创建 IAM 角色

Amazon EFS CSI 驱动程序需要 IAM 权限才能与您的文件系统进行交互。创建 IAM 角色并向其附加所需的 AWS 托管策略。您可以使用 eksctl、AWS Management Console或 AWS 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"
AWS Management Console
使用 AWS 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. 选择 Create role(创建角色)。

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

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

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

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

    将以下行添加到上一行的上方。region-code 替换为集群所在的 AWS 区域。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(更新策略)以完成操作。

AWS CLI
使用 AWS 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/id/EXAMPLED539D4633E53DE1B71EXAMPLE
  2. 创建授予 AssumeRoleWithWebIdentity 操作权限的 IAM 角色。

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

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws: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. 使用以下命令以将所需的 AWS 托管策略附加到角色。如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域,则将 arn:aws: 替换为 arn:aws-us-gov:

    aws iam attach-role-policy \ --policy-arn arn:aws: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 文件系统

注意

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

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

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

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