Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
使用适用于 Amazon S3 的 Mountpoint CSI 驱动程序访问适用于 Amazon S3 对象
借助适用于 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
对象中 volumeAttributes
中的 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.30
,则可以将 kubectl
的 1.29
、1.30
或 1.31
版本与之配合使用。要安装或升级 kubectl
,请参阅 设置 kubectl 和 eksctl。
创建 IAM 策略
适用于 Amazon S3 的 Mountpoint CSI 驱动程序需要 Amazon S3 权限才能与文件系统交互。本节将介绍如何创建 IAM 策略来授予必要的权限。
以下示例策略遵循 Mountpoint 的 IAM 权限建议。或者,您可以使用 Amazon 托管策略 AmazonS3FullAccess,但此托管策略授予的权限超出了 Mountpoint 所需的权限。
有关 Mountpoint 建议权限的更多信息,请参阅 GitHub 上的 Mountpoint IAM 权限。
使用 IAM 控制台创建 IAM 策略
通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
-
在左侧导航窗格中,选择 Policies(策略)。
-
在策略页面上,选择创建策略。
-
对于策略编辑器,选择 JSON。
-
在策略编辑器下,复制并粘贴以下内容:
将 amzn-s3-demo-bucket1
替换为您自己的 Amazon S3 存储桶名称。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MountpointFullBucketAccess",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket1"
]
},
{
"Sid": "MountpointFullObjectAccess",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-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/amzn-s3-demo-bucket1--usw2-az1--x-s3
"
}
]
}
-
选择下一步。
-
在查看和创建页面上,为您的策略命名。此示例演练使用名称 AmazonS3CSIDriverPolicy
。
-
选择创建策略。
创建 IAM 角色
适用于 Amazon S3 的 Mountpoint CSI 驱动程序需要 Amazon S3 权限才能与文件系统交互。本节将介绍如何创建 IAM 角色来委派这些权限。要创建此角色,您可以使用 eksctl
、IAM 控制台或 Amazon CLI。
在上一节中创建了 IAM policy 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 角色
通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
-
在左侧导航窗格中,选择 Roles(角色)。
-
在 Roles(角色)页面上,选择 Create role(创建角色)。
-
在 Select trusted entity(选择受信任的实体)页面上,请执行以下操作:
在 Trusted entity type(受信任的实体类型)部分中,选择 Web identity(Web 身份)。
-
对于 Identity provider(身份提供商),为您的集群选择 OpenID Connect provider URL(提供商 URL)(如 Amazon EKS 中的 Overview(概述)下所示)。
如果未显示 URL,请查看 先决条件。
-
对于 Audience (受众),请选择 sts.amazonaws.com
。
选择下一步。
-
在 Add permissions(添加权限)页面上,请执行以下操作:
-
在 Filter policies (筛选器策略) 框中,输入 AmazonS3CSIDriverPolicy
。
-
选中搜索返回的 AmazonS3CSIDriverPolicy
结果左侧的复选框。
选择下一步。
-
在 Name, review, and create(命名、查看和创建)页面中,请执行以下操作:
-
对于 Role name(角色名称),请为角色输入唯一名称,例如 AmazonEKS_S3_CSI_DriverRole
。
在添加标签(可选)下,将标签作为键值对附加,以将元数据添加到角色。有关在 IAM 中使用标签的更多信息,请参阅《IAM 用户指南》 中的标记 IAM 资源。
-
选择 Create role(创建角色)。
创建角色后,在控制台中选择角色以将其打开进行编辑。
选择 Trust relationships(信任关系)选项卡,然后选择 Edit trust policy(编辑信任策略)。
-
该行看起来类似于以下行:
"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-*"
-
将 Condition
运算符从 "StringEquals"
变更为 "StringLike"
。
选择 Update policy(更新策略)以完成操作。
- Amazon CLI
-
要使用 Amazon CLI 创建适用于 Amazon S3 的 Mountpoint CSI 驱动程序 IAM 角色
-
查看集群的 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
-
创建 IAM 角色,从而向 Kubernetes 服务账户授予 AssumeRoleWithWebIdentity
操作权限。
-
将以下内容复制到名为 aws-s3-csi-driver-trust-policy
.json
的文件中。请将 111122223333
替换为您的账户 ID。将 EXAMPLED539D4633E53DE1B71EXAMPLE
和 region-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"
}
}
}
]
}
-
创建角色。您可以将 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"
-
使用以下命令将之前创建的 IAM 策略附加到角色。
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonS3CSIDriverPolicy
\
--role-name AmazonEKS_S3_CSI_DriverRole
在上一节中创建了 IAM 策略 AmazonS3CSIDriverPolicy
。
-
如果您将驱动程序作为 Amazon EKS 附加组件安装,则跳过此步骤。对于自行管理的驱动程序安装,请创建 Kubernetes 服务账户并使用您创建的 IAM 角色的 ARN 进行注释。
-
将以下内容保存到名为 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
-
在集群上创建 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 CSI 驱动程序的 Mountpoint
您可以通过 Amazon EKS 插件,安装适用于 Amazon S3 的 Mountpoint CSI 驱动程序。您可以使用 eksctl
、Amazon Web Services Management Console 或 Amazon CLI 将附加组件添加到您的集群。或者,您可以将 Amazon S3 CSI 驱动程序的 Mountpoint 作为自托管安装进行安装。有关执行自我管理安装的说明,请参阅 GitHub 上的安装。
从 v1.8.0
开始,您可以为 CSI 驱动程序的 Pods 配置可容忍的污点。为此,要么使用 node.tolerations
指定一组要容忍的自定义污点,要么使用 node.tolerateAllTaints
容忍所有污点。有关更多信息,请参阅 Kubernetes 文档中的污点和容忍度。
- 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 字段管理的更多信息,请参阅 确定可以为 Amazon EKS 附加组件自定义的字段。
您可以通过配置文件对 eksctl
进行自定义。有关更多信息,请参阅 eksctl
文档中的使用配置值。以下示例演示了如何容忍所有污点。
# config.yaml
...
addons:
- name: aws-mountpoint-s3-csi-driver
serviceAccountRoleARN: arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
configurationValues: |-
node:
tolerateAllTaints: true
- Amazon Web Services Management Console
-
要使用 Amazon Web Services Management Console 添加适用于 Amazon EBS CSI 的 Mountpoint 附加组件
访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。
-
在左侧导航窗格中,选择集群。
-
选择要为其配置适用于 Amazon S3 CSI 的 Mountpoint 附加组件的集群名称。
-
选择附加组件选项卡。
-
选择获取更多附加组件。
-
在选择附加组件页面上,执行以下操作:
-
在 Amazon EKS 附加组件部分,选择适用于 Amazon S3 CSI 驱动程序的 Mountpoint复选框。
-
选择下一步。
-
在配置选定的附加组件设置页面上,执行以下操作:
-
选择您想使用的 Version(版本)。
-
对于选择 IAM 角色,选择要将适用于 Amazon EBS CSI 驱动程序的 Mountpoint IAM 策略附加到的 IAM 角色的名称。
-
(可选)展开可选配置设置后,更新冲突解决方法。如果选择覆盖,则可能用 Amazon EKS 附加组件设置覆盖现有附加组件的一个或多个设置。如果不启用此选项,并且与现有设置存在冲突,则操作将失败。您可以使用生成的错误消息对冲突进行故障排除。在选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。
-
(可选)展开可选配置设置后,在配置值字段中配置容忍度。
-
选择下一步。
-
在查看和添加页面上,选择创建。附加组件安装完成后,您将看到已安装的附加组件。
- 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
您可以使用 --configuration-values
标志自定义命令。以下替代示例演示了如何容忍所有污点。
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
\
--configuration-values '{"node":{"tolerateAllTaints":true}}'
在大多数情况下,您可以仅使用存储桶名称来配置适用于 Amazon S3 的 Mountpoint。有关配置适用于 Amazon S3 的 Mountpoint 的说明,请参阅 GitHub 上的配置适用于 Amazon S3 的 Mountpoint。
部署示例应用程序
您可以将静态预置部署到现有 Amazon S3 存储桶上的驱动程序。有关更多信息,请参阅 GitHub 上的静态预置。
移除适用于 Amazon S3 的 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 附加组件
访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。
-
在左侧导航窗格中,选择集群。
-
选择要为其移除 Amazon EBS CSI 附加组件的集群名称。
-
选择附加组件选项卡。
-
选择适用于 Amazon S3 CSI 驱动程序的 Mountpoint。
-
选择移除。
-
在删除:aws-mountpoint-s3-csi-driver 确认对话框中,执行以下操作:
-
如果希望 Amazon EKS 停止管理附加组件设置,请选择在集群上保留。如果要在集群上保留附加组件软件,请执行此操作。这样您可以自行管理附加组件的所有设置。
-
输入 aws-mountpoint-s3-csi-driver
。
-
选择移除。
- 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