AWS EKS安装EBS CSI插件[AWS 中国宁夏区]

228 阅读2分钟

Amazon EBS CSI驱动程序允许EKS集群管理AWS EBS卷的生命周期,当我们运行在EKS中的pod需要挂载EBS盘进行持久化存储时,必须先安装好EBS CSI驱动,具体可以参考Amazon EBS CSI driver

权限设置

为EBS CSI Driver创建IAM role

Amazon EBS CSI驱动需要IAM权限才能代表您调用AWS API,所以我们需要先创建EBS CSI Driver的IAM Role

查看当前集群的OIDC信息,将<xxx-cluster>替换为你实际的EKS集群名称

aws eks describe-cluster --name <xxx-cluster> --query "cluster.identity.oidc.issuer" --output text

截图如下:

eks-cn-ebs-02.png

如果你习惯使用AWS控制台,其实你也可以在AWS控制台上看到OIDC信息

eks-cn-ebs-01.png

将上一步读取到的OIDC信息补充下下面的json模板中,并保存为aws-ebs-csi-driver-trust-policy.json

{
	"Version": "2012-10-17",
	"Statement": [{
			"Effect": "Allow",
			"Principal": {
				"Federated": "arn:aws-cn:iam::<aws-account-id>:oidc-provider/oidc.eks.<region-code>.amazonaws.com.cn/id/EXAMPLEDxxxxDE1B71EXAMPLE"
			},
			"Action": "sts:AssumeRoleWithWebIdentity",
			"Condition": {
				"StringEquals": {
					"oidc.eks..amazonaws.com.cn/id/EXAMPLEDxxxxDE1B71EXAMPLE:aud": "sts.amazonaws.com",
					"oidc.eks..amazonaws.com.cn/id/EXAMPLEDxxxxDE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
				}
			}
		},
		{
			"Effect": "Allow",
			"Principal": {
				"Service": "pods.eks.amazonaws.com"
			},
			"Action": [
				"sts:AssumeRole",
				"sts:TagSession"
			]
		}
	]
}

其中需要系替换的是<aws-account-id><region-code>OIDC的ID,如图中红色部分

eks-cn-ebs-03.png

进行EBS CSI Driver的IAM Role的创建,role名称为AmazonEKS_EBS_CSI_DriverRole,执行下面的命令:

# 设置role名称为AmazonEKS_EBS_CSI_DriverRole
aws iam create-role --role-name AmazonEKS_EBS_CSI_DriverRole  --assume-role-policy-document file://"aws-ebs-csi-driver-trust-policy.json"
# 为AmazonEKS_EBS_CSI_DriverRole附加policy
aws iam attach-role-policy --policy-arn arn:aws-cn:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --role-name AmazonEKS_EBS_CSI_DriverRole

创建完成后,我们可以在AWS IAM控制台看到名称为AmazonEKS_EBS_CSI_DriverRole的role

eks-cn-ebs-04.png

如果你不需要使用自定义的KMS对EBS盘进行静态加密,那么role到这里就完成了。否则你需要额外的创建policy并继续附加到AmazonEKS_EBS_CSI_DriverRole,详情请看csi-iam-role

CSI addon安装

命令行安装

我们可以直接使用命令行进行addon安装,其中role arn需要填写我们刚才创建的AmazonEKS_EBS_CSI_DriverRole的arn

aws eks create-addon --cluster-name poc-cn-cluster --addon-name aws-ebs-csi-driver --service-account-role-arn arn:aws-cn:iam::<aws-account-id>:role/AmazonEKS_EBS_CSI_DriverRole

执行完成后,我们可以在AWS控制台上看到EBS CSI驱动正在被安装,只需要略微等待即可完成。

AWS 控制台安装

如果你不习惯使用命令行,那么直接使用控制台也可以安装

先在EKS控制台找到add-on安装入口 eks-cn-ebs-05.png

选择Amazon EBS CSI Driver插件 eks-cn-ebs-06.png

然后选择前面我们创建好的AmazonEKS_EBS_CSI_DriverRole eks-cn-ebs-07.png

我们在控制台上会看到CSI驱动安装完成,并使用了AmazonEKS_EBS_CSI_DriverRole

eks-cn-ebs-08.png

eks-cn-ebs-09.png

此外我们使用eksctl也可以进行快速的查询,语句为eksctl get addon --name aws-ebs-csi-driver --cluster xxx-cluster

eks-cn-ebs-10.png

测试

后面你可以自行参考Deploy a sample application and verify that the CSI driver is working来对我们前面安装好的EBS CSI驱动进行功能测试