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

适用于 Amazon S3 的 Mountpoint CSI 驱动程序

重要

在本 Amazon Web Services 区域 中,Amazon S3 CSI 驱动程序的 Mountpoint 不作为 &EKS; 附加组件提供,并且自行管理的安装不受官方支持。

借助适用于 Amazon S3 的 Mountpoint 容器存储接口(CSI)驱动程序,您的 Kubernetes 应用程序可以通过文件系统接口访问 Amazon S3 对象,从而在不更改任何应用程序代码的情况下实现高聚合吞吐量。基于适用于 Amazon S3 的 Mountpoint 构建的 CSI 驱动程序,将 Amazon S3 存储桶以卷的形式呈现,可供 Amazon EKS 和自我管理的 Kubernetes 集群中的容器访问。本主题介绍了如何将适用于 Amazon S3 的 Mountpoint CSI 驱动程序部署到您的 Amazon EKS 集群。

注意事项
  • 适用于 Amazon S3 的 Mountpoint CSI 驱动程序目前与基于 Windows 的容器映像不兼容。

  • 适用于 Amazon S3 的 Mountpoint CSI 驱动程序不支持 Amazon Fargate。但支持在 Amazon EC2 中运行的容器(无论是 Amazon EKS 还是自定义 Kubernetes 安装)。

  • 适用于 Amazon S3 的 Mountpoint CSI 驱动程序仅支持静态预置。不支持动态预置或创建新存储桶。

    注意

    静态预调配是指使用现有的 Amazon S3 存储桶,该存储桶被指定为 PersistentVolume 对象中 volumeHandle 中的 bucketName。有关更多信息,请参阅 GitHub 上的静态预置

  • 使用适用于 Amazon S3 的 Mountpoint CSI 驱动程序挂载的卷,不支持所有 POSIX 文件系统功能。有关文件系统行为的详细信息,请参阅 GitHub 上的适用于 Amazon S3 的 Mountpoint 文件系统行为

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

  • 您的设备或 Amazon CloudShell 上已安装并配置 2.12.3 或更高版本的 Amazon CLI。

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

创建 IAM 策略

适用于 Amazon S3 的 Mountpoint CSI 驱动程序需要 Amazon S3 权限才能与文件系统交互。本节将介绍如何创建 IAM 策略来授予必要的权限。

以下示例策略遵循 Mountpoint 的 IAM 权限建议。或者,您可以使用 Amazon 托管策略 AmazonS3FullAccess,但此托管策略授予的权限超出了 Mountpoint 所需的权限。

有关 Mountpoint 建议权限的更多信息,请参阅 GitHub 上的 Mountpoint IAM 权限

使用 IAM 控制台创建 IAM 策略
  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在左侧导航窗格中,选择 Policies(策略)

  3. 策略页面上,选择创建策略

  4. 对于策略编辑器,选择 JSON

  5. 策略编辑器下,复制并粘贴以下内容:

    重要

    DOC-EXAMPLE-BUCKET1 替换为您自己的 Amazon S3 存储桶名称。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "MountpointFullBucketAccess", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" ] }, { "Sid": "MountpointFullObjectAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ] } ] }

    与 Amazon S3 Express One Zone 存储类一起推出的目录存储桶,使用不同于一般用途存储桶的身份验证机制。您应该使用 s3express:CreateSession 操作,而非使用 s3:* 操作。有关目录存储桶的更多信息,请参阅《Amazon S3 用户指南》中的目录存储桶

    以下是您将对目录存储桶使用的最低权限策略的示例。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3express:CreateSession", "Resource": "arn:aws:s3express:aws-region:111122223333:bucket/DOC-EXAMPLE-BUCKET1--az_id--x-s3" } ] }
  6. 选择下一步

  7. 查看和创建页面上,为您的策略命名。此示例演练使用名称 AmazonS3CSIDriverPolicy

  8. 选择创建策略

创建 IAM 角色

适用于 Amazon S3 的 Mountpoint CSI 驱动程序需要 Amazon S3 权限才能与文件系统交互。本节将介绍如何创建 IAM 角色来委派这些权限。要创建此角色,您可以使用 eksctl、IAM 控制台或 Amazon CLI。

注意

在上一节中创建了 IAM 策略 AmazonS3CSIDriverPolicy

eksctl

要使用 eksctl 创建适用于 Amazon S3 的 Mountpoint CSI 驱动程序 IAM 角色

要创建 IAM 角色和 Kubernetes 服务账户,请运行以下命令。这些命令还会将 AmazonS3CSIDriverPolicy IAM 策略附加到角色,使用 IAM 角色的 Amazon 资源名称(ARN)对 Kubernetes 服务账户(s3-csi-controller-sa)进行注释,并将 Kubernetes 服务账户名称添加到 IAM 角色的信任策略。

CLUSTER_NAME=my-cluster REGION=region-code ROLE_NAME=AmazonEKS_S3_CSI_DriverRole POLICY_ARN=AmazonEKS_S3_CSI_DriverRole_ARN eksctl create iamserviceaccount \ --name s3-csi-driver-sa \ --namespace kube-system \ --cluster $CLUSTER_NAME \ --attach-policy-arn $POLICY_ARN \ --approve \ --role-name $ROLE_NAME \ --region $REGION \ --role-only
IAM console
要使用 Amazon Web Services Management Console 创建适用于 Amazon S3 的 Mountpoint 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(概述)下所示)。

      如果未显示 URL,请查看先决条件部分。

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

    4. 选择下一步

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

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

      注意

      在上一节中创建了此策略。

    2. 选中搜索返回的 AmazonS3CSIDriverPolicy 结果左侧的复选框。

    3. 选择下一步

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

    1. 对于 Role name(角色名称),请为角色输入唯一名称,例如 AmazonEKS_S3_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:s3-csi-*"
  10. Condition 运算符从 "StringEquals" 变更为 "StringLike"

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

Amazon CLI
要使用 Amazon CLI 创建适用于 Amazon S3 的 Mountpoint 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. 创建 IAM 角色,从而向 Kubernetes 服务账户授予 AssumeRoleWithWebIdentity 操作权限。

    1. 将以下内容复制到名为 aws-s3-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:s3-csi-*", "oidc.eks.region-code.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" } } } ] }
    2. 创建角色。您可以将 AmazonEKS_S3_CSI_DriverRole 更改为其他名称,但如果更改,请确保在后续步骤中也做出相应更改。

      aws iam create-role \ --role-name AmazonEKS_S3_CSI_DriverRole \ --assume-role-policy-document file://"aws-s3-csi-driver-trust-policy.json"
  3. 使用以下命令将之前创建的 IAM 策略附加到角色。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonS3CSIDriverPolicy \ --role-name AmazonEKS_S3_CSI_DriverRole
    注意

    在上一节中创建了 IAM 策略 AmazonS3CSIDriverPolicy

  4. 如果您将驱动程序作为 Amazon EKS 附加组件安装,则跳过此步骤。对于自行管理的驱动程序安装,请创建 Kubernetes 服务账户并使用您创建的 IAM 角色的 ARN 进行注释。

    1. 将以下内容保存到名为 mountpoint-s3-service-account.yaml 的文件中。请将 111122223333 替换为您的账户 ID。

      --- apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: aws-mountpoint-s3-csi-driver name: mountpoint-s3-csi-controller-sa namespace: kube-system annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
    2. 在集群上创建 Kubernetes 服务账户。使用您创建的名为 AmazonEKS_S3_CSI_DriverRole 的 IAM 角色对 Kubernetes 服务账户(mountpoint-s3-csi-controller-sa)进行注释。

      kubectl apply -f mountpoint-s3-service-account.yaml
      注意

      在此过程中部署插件后,系统会创建一个名为 s3-csi-driver-sa 的服务账户,并将其配置为使用该服务账户。

安装适用于 Amazon S3 的 Mountpoint CSI 驱动程序

您可以通过 Amazon EKS 插件,安装适用于 Amazon S3 的 Mountpoint CSI 驱动程序。您可以使用 eksctl、Amazon Web Services Management Console 或 Amazon CLI 将附加组件添加到您的集群。

您可以选择将 Amazon Mountpoint S3 CSI 驱动程序作为自托管安装进行安装。有关执行自我管理安装的说明,请参阅 GitHub 上的安装

eksctl
要使用 eksctl 添加 Amazon S3 CSI 附加组件

运行以下命令。将 my-cluster 替换为您的集群的名称,将 111122223333 替换为您的账户 ID,并将 AmazonEKS_S3_CSI_DriverRole 替换为之前创建的 IAM 角色

eksctl create addon --name aws-mountpoint-s3-csi-driver --cluster my-cluster --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole --force

如果您删除 --force 选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么更新 Amazon EKS 附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在指定此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置,因为这些设置会被此选项覆盖。有关此设置其他选项的更多信息,请参阅 eksctl 文档中的 Addons(附加组件)。有关 Amazon EKS Kubernetes 字段管理的更多信息,请参阅  Kubernetes 字段管理

Amazon Web Services Management Console
要使用 Amazon Web Services Management Console 添加适用于 Amazon EBS CSI 的 Mountpoint 附加组件
  1. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  2. 在左侧导航窗格中,选择集群

  3. 选择要为其配置适用于 Amazon S3 CSI 的 Mountpoint 附加组件的集群名称。

  4. 选择附加组件选项卡。

  5. 选择获取更多附加组件

  6. 选择附加组件页面上,执行以下操作:

    1. Amazon EKS 附加组件部分,选择适用于 Amazon S3 CSI 驱动程序的 Mountpoint复选框。

    2. 选择下一步

  7. 配置选定的附加组件设置页面上,执行以下操作:

    1. 选择您想使用的 Version(版本)

    2. 对于选择 IAM 角色,选择要将适用于 Amazon EBS CSI 驱动程序的 Mountpoint IAM 策略附加到的 IAM 角色的名称。

    3. (可选)展开可选配置设置。如果对冲突解决方法选择覆盖,则可能用 Amazon EKS 附加组件设置覆盖现有附加组件的一个或多个设置。如果不启用此选项,并且与现有设置存在冲突,则操作将失败。您可以使用生成的错误消息对冲突进行故障排除。在选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。

    4. 选择下一步

  8. 查看和添加页面上,选择创建。附加组件安装完成后,您将看到已安装的附加组件。

Amazon CLI
要使用 Amazon CLI 添加适用于 Amazon EBS CSI 的 Mountpoint 附加组件

运行以下命令。将 my-cluster 替换为集群名称,将 111122223333 替换为账户 ID,将 AmazonEKS_S3_CSI_DriverRole 替换为之前创建的角色名称。

aws eks create-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver \ --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole

配置适用于 Amazon S3 的 Mountpoint

在大多数情况下,您可以仅使用存储桶名称来配置适用于 Amazon S3 的 Mountpoint。有关配置适用于 Amazon S3 的 Mountpoint 的说明,请参阅 GitHub 上的配置适用于 Amazon S3 的 Mountpoint

部署示例应用程序

您可以将静态预置部署到现有 Amazon S3 存储桶上的驱动程序。有关更多信息,请参阅 GitHub 上的静态预置

删除适用于 Amazon S3 CSI 驱动程序的 Mountpoint

移除 Amazon EKS 附加组件时,您有两种选择。

  • 将附加组件保留在您的集群上 - 此方法将移除 Amazon EKS 对任何设置的管理。还移除 Amazon EKS 通知您更新以及在您启动更新后自动更新 Amazon EKS 附加组件的功能。但是,此方法会保留集群上的附加组件软件。此选项会将附加组件作为自行管理安装使用,而不是作为 Amazon EKS 附加组件使用。使用此方法,附加组件不停机。此过程中的命令使用此选项。

  • 从集群中完全删除附加组件 - 我们建议只有当集群中没有资源依赖于附加组件时,才从集群移除 Amazon EKS 附加组件。要执行此选项,请从您在此过程中使用的命令中删除 --preserve

如果附加组件有与其关联的 IAM 账户,则不会移除该 IAM 账户。

您可以使用 eksctl、Amazon Web Services Management Console 或 Amazon CLI 移除 Amazon S3 CSI 附加组件。

eksctl
要使用 eksctl 移除 Amazon S3 CSI 附加组件

请将 my-cluster 替换为您的集群名称,然后运行以下命令。

eksctl delete addon --cluster my-cluster --name aws-mountpoint-s3-csi-driver --preserve
Amazon Web Services Management Console
要使用 Amazon Web Services Management Console 移除 Amazon S3 CSI 附加组件
  1. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  2. 在左侧导航窗格中,选择集群

  3. 选择要为其移除 Amazon EBS CSI 附加组件的集群名称。

  4. 选择附加组件选项卡。

  5. 选择适用于 Amazon S3 CSI 驱动程序的 Mountpoint

  6. 选择移除

  7. 删除:aws-mountpoint-s3-csi-driver 确认对话框中,执行以下操作:

    1. 如果希望 Amazon EKS 停止管理附加组件设置,请选择在集群上保留。如果要在集群上保留附加组件软件,请执行此操作。这样您可以自行管理附加组件的所有设置。

    2. 输入 aws-mountpoint-s3-csi-driver

    3. 选择移除

Amazon CLI
要使用 Amazon CLI 移除 Amazon S3 CSI 附加组件

请将 my-cluster 替换为您的集群名称,然后运行以下命令。

aws eks delete-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver --preserve