EKS集群中创建关联PVC的测试Pod时,出现AWS持久化存储缓存凭证刷新失败问题求助
大家好,我在EKS集群里尝试创建一个关联了PVC的测试Pod,用来验证持久化存储的功能,但PVC一直卡在Pending状态,describe的时候提示ProvisioningFailed,错误信息是EBS CSI控制器创建卷失败。以下是我的配置和错误详情,求各位帮忙看看问题出在哪?
我的PVC配置(pvc.yaml)
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc namespace: my-ns spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: gp2
我的Pod配置(pod.yaml)
apiVersion: v1 kind: Pod metadata: name: test-pod namespace: my-ns spec: containers: - name: test-container image: busybox command: ["sleep", "3600"] volumeMounts: - mountPath: /mnt/data name: my-pvc-volume volumes: - name: my-pvc-volume persistentVolumeClaim: claimName: my-pvc
PVC的错误描述
Warning ProvisioningFailed 4m58s (x5 over 14m)
ebs.csi.aws.com_ebs-csi-controller-dd646df8-7ddpr_aca98eff-9b9a-4bce-8049-b34905dffc7e
failed to provision volume with StorageClass "gp2": rpc error: code = Internal desc = Could not...
看起来你遇到的是EKS里EBS CSI驱动创建卷失败的典型问题,我之前维护EKS集群时也踩过类似的坑,给你几个实用的排查方向,按顺序试应该能定位到问题:
先确认EBS CSI驱动的IAM权限是否到位
EBS CSI控制器的服务账号必须绑定拥有EC2操作权限的IAM角色,比如ec2:CreateVolume、ec2:AttachVolume、ec2:DescribeVolumes这些核心权限是少不了的。你可以登录AWS控制台,找到对应的IAM角色(通常命名类似AmazonEKS_EBS_CSI_DriverRole),检查关联的权限策略是否完整。如果是用eksctl一键创建的集群,默认会配置好这个角色,但手动搭建的集群很容易漏掉这一步。检查gp2存储类的Provisioner配置
gp2存储类的Provisioner必须是ebs.csi.aws.com,这是AWS官方EBS CSI驱动的标识。你可以用这条命令验证:
kubectl get storageclass gp2 -o yaml
如果spec.provisioner字段写成了旧版的kubernetes.io/aws-ebs(那是in-tree驱动,现在EKS已经推荐用CSI驱动了),肯定会导致卷创建失败。
- 拉取EBS CSI控制器的完整日志找线索
你的错误信息被截断了,完整的日志能直接告诉你问题根源。去kube-system命名空间下找到EBS CSI控制器的Pod,查看ebs-plugin容器的日志:
kubectl logs -n kube-system -l app=ebs-csi-controller -c ebs-plugin
我之前碰到过类似的情况,日志里明确显示“无法获取STS临时凭证”,后来排查发现是集群的OIDC提供商没配置好,导致服务账号拿不到有效的AWS凭证。
验证集群的OIDC提供商是否正常工作
EKS里IAM角色绑定服务账号完全依赖OIDC提供商,如果你的集群没配置OIDC,或者OIDC的ARN配置错误,服务账号就没法通过STS获取临时凭证,自然调用不了EC2 API创建EBS卷。你可以在EKS控制台的集群详情页,进入“身份提供商”板块,确认OIDC提供商已经配置,并且对应的IAM角色信任策略里包含了EBS CSI服务账号的ARN。检查VPC网络能否访问EC2 API
如果你的EKS集群是私有集群(节点没有公网IP),必须配置EC2的VPC端点,让EBS CSI控制器能在内网访问EC2 API。如果是公有集群,确保节点所在子网有公网访问权限,且安全组允许出站访问443端口(EC2 API用的是HTTPS)。确认集群与EBS卷的区域一致性
虽然gp2是区域级存储,但也得确保集群节点所在的AWS区域,和PVC要创建的EBS卷区域一致(不过正常情况下PVC会自动匹配集群区域,这个概率比较小,但也可以顺手排查下)。
备注:内容来源于stack exchange,提问作者Container-Man

