帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
借助适用于 Amazon S3 的 Mountpoint 容器存储接口(CSI)驱动程序
注意事项
-
适用于 Amazon S3 的 Mountpoint CSI 驱动程序目前与基于 Windows 的容器映像不兼容。
-
适用于 Amazon S3 的 Mountpoint CSI 驱动程序目前与 Amazon EKS 混合节点功能不兼容。
-
适用于 Amazon S3 的 Mountpoint CSI 驱动程序不支持 AWS Fargate,但支持在 Amazon EC2 中运行的容器(无论是采用 Amazon EKS 还是自定义 Kubernetes 安装)。
-
适用于 Amazon S3 的 Mountpoint CSI 驱动程序仅支持静态预置。不支持动态预置或创建新存储桶。
注意
静态预调配是指使用现有的 Amazon S3 存储桶,该存储桶被指定为
PersistentVolume
对象中volumeAttributes
中的bucketName
。有关更多信息,请参阅 GitHub 上的 Static Provisioning。 -
使用适用于 Amazon S3 的 Mountpoint CSI 驱动程序挂载的卷,不支持所有 POSIX 文件系统功能。有关文件系统行为的详细信息,请参阅 GitHub 上的 Mountpoint for Amazon S3 file system behavior
。
先决条件
-
适用于集群的现有 AWS Identity and Access Management(IAM)OpenID Connect(OIDC)提供者。要确定您是否已经拥有一个或是否要创建一个,请参阅为集群创建 IAM OIDC 提供商。
-
您的设备或 AWS CloudShell 上安装并配置了 2.12.3 或更高版本的 AWS CLI。
-
您的设备或 AWS CloudShell 上安装了
kubectl
命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为1.29
,则可以将kubectl
的1.28
、1.29
或1.30
版本与之配合使用。要安装或升级kubectl
,请参阅 设置 kubectl 和 eksctl。
创建 IAM 策略
适用于 Amazon S3 的 Mountpoint CSI 驱动程序需要 Amazon S3 权限才能与文件系统交互。本节将介绍如何创建 IAM 策略来授予必要的权限。
以下示例策略遵循 Mountpoint 的 IAM 权限建议。您也可以使用 AWS 托管式策略 AmazonS3FullAccess
有关 Mountpoint 建议权限的更多信息,请参阅 GitHub 上的 Mountpoint IAM permissions
-
通过 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:us-west-2:111122223333:bucket/amzn-s3-demo-bucket1--usw2-az1--x-s3" } ] }
-
选择下一步。
-
在查看和创建页面上,为您的策略命名。此示例演练使用名称
AmazonS3CSIDriverPolicy
。 -
选择 创建策略。
创建 IAM 角色
适用于 Amazon S3 的 Mountpoint CSI 驱动程序需要 Amazon S3 权限才能与文件系统交互。本节将介绍如何创建 IAM 角色来委派这些权限。要创建此角色,您可以使用以下工具之一:
注意
在上一节中创建了 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
AWS Management Console
-
通过 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(OpenID Connect 提供程序 URL)(如 Amazon EKS 中的 Overview(概述)下所示)。
如果未显示 URL,请查看先决条件部分。
-
对于 Audience (受众),请选择
sts.amazonaws.com
。 -
选择下一步。
-
-
在 Add permissions(添加权限)页面上,请执行以下操作:
-
在筛选策略框中,输入 AmazonS3CSIDriverPolicy。
注意
在上一节中创建了此策略。
-
选中搜索返回的
AmazonS3CSIDriverPolicy
结果左侧的复选框。 -
选择下一步。
-
-
在 Name, review, and create(命名、查看和创建)页面中,请执行以下操作:
-
在角色名称中为角色输入唯一名称,例如 AmazonEKS_S3_CSI_DriverRole。
-
在添加标签(可选)下,将标签作为键值对附加,以将元数据添加到角色。有关在 IAM 中使用标签的更多信息,请参阅《IAM 用户指南》 中的标记 IAM 资源。
-
选择 Create role(创建角色)。
-
-
创建角色后,在控制台中选择角色以将其打开进行编辑。
-
选择 Trust relationships(信任关系)选项卡,然后选择 Edit trust policy(编辑信任策略)。
-
该行看起来类似于以下行:
"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:s3-csi-driver-sa"
-
确保将
Condition
运算符设置为"StringEquals"
。 -
选择 Update policy(更新策略)以完成操作。
AWS CLI
-
查看集群的 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
-
创建 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/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:s3-csi-driver-sa", "oidc.eks.region-code.amazonaws.com/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 的 Mountpoint CSI 驱动程序
您可以通过 Amazon EKS 附加组件,安装适用于 Amazon S3 的 Mountpoint CSI 驱动程序。您可以使用以下工具将附加组件添加到您的集群。
您也可以将适用于 Amazon S3 的 Mountpoint CSI 驱动程序作为自主管理型安装进行安装。有关执行自主管理型安装的说明,请参阅 GitHub 上的 Installation
从 v1.8.0
开始,您可以为 CSI 驱动程序的容器组(pod)配置可容忍的污点。为此,要么使用 node.tolerations
指定一组要容忍的自定义污点,要么使用 node.tolerateAllTaints
容忍所有污点。有关更多信息,请参阅 Kubernetes 文档中的 Taints and Tolerations
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
您可以通过配置文件对 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
AWS Management Console
-
打开 Amazon EKS 控制台
。 -
在左侧导航窗格中,选择集群。
-
选择要为其配置适用于 Amazon S3 的 Mountpoint CSI 附加组件的集群名称。
-
选择附加组件选项卡。
-
选择获取更多附加组件。
-
在选择附加组件页面上,执行以下操作:
-
在 Amazon EKS 附加组件部分中,选中适用于 Amazon S3 的 Mountpoint CSI 驱动程序复选框。
-
选择下一步。
-
-
在配置选定的附加组件设置页面上,执行以下操作:
-
选择您想使用的版本。
-
对于选择 IAM 角色,选择要将适用于 Amazon S3 的 Mountpoint CSI 驱动程序 IAM 策略附加到的 IAM 角色的名称。
-
(可选)展开可选配置设置后,更新冲突解决方法。如果选择覆盖,则可能用 Amazon EKS 附加组件设置覆盖现有附加组件的一个或多个设置。如果不启用此选项,并且与现有设置存在冲突,则操作将失败。您可以使用生成的错误消息对冲突进行故障排除。在选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。
-
(可选)展开可选配置设置后,在配置值字段中配置容忍度。
-
选择下一步。
-
-
在查看和添加页面上,选择创建。附加组件安装完成后,您将看到已安装的附加组件。
AWS CLI
使用 AWS CLI 添加适用于 Amazon S3 的 Mountpoint CSI 附加组件
运行以下命令。将 my-cluster
替换为您的集群的名称,将 111122223333
替换为您的账户 ID,并将 AmazonEKS_S3_CSI_DriverRole
替换为之前创建的 IAM 角色的名称。
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。有关配置适用于 Amazon S3 的 Mountpoint 的说明,请参阅 GitHub 上的 Configuring Mountpoint for Amazon S3
部署示例应用程序
您可以将静态预置部署到现有 Amazon S3 存储桶上的驱动程序。有关更多信息,请参阅 GitHub 上的 Static provisioning
移除适用于 Amazon S3 的 Mountpoint CSI 驱动程序
移除 Amazon EKS 附加组件时,您有两种选择。
-
将附加组件保留在您的集群上 - 此方法将移除 Amazon EKS 对任何设置的管理。还移除 Amazon EKS 通知您更新以及在您启动更新后自动更新 Amazon EKS 附加组件的功能。但是,此方法会保留集群上的附加组件软件。此选项会将附加组件作为自行管理安装使用,而不是作为 Amazon EKS 附加组件使用。使用此方法,附加组件不停机。此过程中的命令使用此选项。
-
从集群中完全删除附加组件 - 我们建议只有当集群中没有资源依赖于附加组件时,才从集群移除 Amazon EKS 附加组件。要执行此选项,请从您在此过程中使用的命令中删除
--preserve
。
如果附加组件有与其关联的 IAM 账户,则不会移除该 IAM 账户。
您可以使用以下工具移除 Amazon S3 CSI 附加组件:
eksctl
使用 eksctl
移除 Amazon S3 CSI 附加组件
将 my-cluster
替换为您的集群的名称,然后运行以下命令。
eksctl delete addon --cluster my-cluster --name aws-mountpoint-s3-csi-driver --preserve
AWS Management Console
-
打开 Amazon EKS 控制台
。 -
在左侧导航窗格中,选择集群。
-
选择要为其移除 Amazon EBS CSI 附加组件的集群名称。
-
选择附加组件选项卡。
-
选择适用于 Amazon S3 的 Mountpoint CSI 驱动程序。
-
选择移除 。
-
在删除:aws-mountpoint-s3-csi-driver 确认对话框中,执行以下操作:
-
如果希望 Amazon EKS 停止管理附加组件设置,请选择在集群上保留。如果要在集群上保留附加组件软件,请执行此操作。这样您可以自行管理附加组件的所有设置。
-
输入
aws-mountpoint-s3-csi-driver
。 -
选择移除。
-
AWS CLI
使用 AWS CLI 移除 Amazon S3 CSI 附加组件
将 my-cluster
替换为您的集群的名称,然后运行以下命令。
aws eks delete-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver --preserve