Amazon S3 CSI驱动程序允许EKS集群管理S3中的对象,当我们运行在EKS中的pod需要挂载S3进行持久化存储时,必须先安装好S3 CSI驱动,通过S3 CSI我们的应用程序可以通过文件系统接口直接访问Amazon S3对象,就像访问本地文件一样,可以在不更改任何应用程序代码的情况下实现高聚合吞吐量的S3对象读写。具体可以参考Amazon S3 CSI driver。
设置S3存储桶
我直接创建了一个新的S3 Bucket进行本次实验的演示,我创建了一个全新的S3 bucket并命名为s3-csi-1025-test
权限设置
创建 IAM policy
参考AWS Management Console 创建S3 CSI Policy,我们继续可以在AWS控制台进行操作。我们先创建IAM Policy并命名为AmazonS3CSIDriverPolicy,将<your-s3-bucketname>替换为你自己实际的S3 bucket
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MountpointFullBucketAccess",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::<your-s3-bucketname>"
]
},
{
"Sid": "MountpointFullObjectAccess",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::<your-s3-bucketname>/*"
]
}
]
}
创建完成后,我们可以在AWS IAM控制台查看AmazonS3CSIDriverPolicy
创建 IAM 角色
参考AWS Management Console 创建S3 CSI Role,我们继续可以在AWS控制台进行操作。
首选在AWS IAM 控制台点击创建role,接着选择Web identity,然后再选择EKS OIDC后给Audience填入sts.amazonaws.com
选择前面创建好的AmazonS3CSIDriverPolicy
给Role一个名称AmazonEKS_S3_CSI_DriverRole
继续补充修改AmazonEKS_S3_CSI_DriverRole的信任策略
补充下面的设置"oidc.eks.<region-code>.amazonaws.com/id/<oidc-id>:sub": "system:serviceaccount:kube-system:s3-csi-driver-sa",添加到我画红框的部分,将region-code和<oidc-id>替换你自己的实际的值。
安装S3 CSI Addon
我们直接在EKS Addon页面进行添加
选择IAM roles for service accounts (IRSA)并选择AmazonEKS_S3_CSI_DriverRole
等待片刻,插件安装完成
测试
后面你可以自行参考S3 Static provisioning for Amazon EKS来对我们前面安装好的EFS CSI驱动进行功能测试