AWS EKS从v1.22升级到v1.23后PV挂载失败,Pod处于Pending状态
解决AWS EKS 1.23升级后EBS卷挂载失败问题
核心原因分析
EKS 1.23版本开始移除了内置的in-tree EBS存储驱动,所有EBS卷操作必须依赖AWS EBS CSI Driver。即便安装了CSI驱动,仍需确保原有PV/PVC能正确切换到CSI驱动,同时验证集群权限、节点配置等关键项。
针对性排查与修复步骤
1. 验证EBS CSI Driver运行状态
先确认CSI驱动的控制器和节点Pod是否正常运行:
kubectl get pods -n kube-system -l app.kubernetes.io/name=aws-ebs-csi-driver
若Pod出现CrashLoopBackOff或Error状态,重点检查IAM权限:
- 确认CSI驱动的服务账户(默认是
ebs-csi-controller-sa)已关联AmazonEBSCSIDriverPolicy权限策略 - 若使用IRSA(IAM Roles for Service Accounts),需验证OIDC提供商已配置,且角色信任关系正确
2. 修复原有PV/PVC的驱动关联
原in-tree驱动创建的PV,其provisioner字段为kubernetes.io/aws-ebs,而CSI驱动使用ebs.csi.aws.com。针对已存在的gp2类型PV,需通过PVC触发迁移:
给目标PVC添加以下注解:
annotations: volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com volume.kubernetes.io/storage-provisioner: ebs.csi.aws.com
注意:不要直接修改PV字段,通过PVC注解触发Kubernetes自动完成驱动迁移。
3. 检查节点CSI组件部署
确保所有EKS节点上都运行了CSI节点插件Pod:
kubectl get pods -n kube-system -l app.kubernetes.io/name=aws-ebs-csi-driver,app.kubernetes.io/component=node
若部分节点缺失该Pod,说明CSI驱动的DaemonSet未覆盖所有节点,需重新部署CSI驱动并确认DaemonSet配置正确。
4. 验证EBS卷的状态与权限
- 登录AWS控制台,检查目标EBS卷的状态是否为
available或in-use,确认未被其他EC2实例占用 - 验证EKS节点的EC2实例角色包含必要的EBS操作权限:如
ec2:AttachVolume、ec2:DescribeVolumes、ec2:DetachVolume等(可直接关联AmazonEC2FullAccess做快速验证)
5. 检查CSI存储类配置
若创建了新的CSI存储类,确保配置符合要求(以gp2为例):
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ebs-csi-gp2 provisioner: ebs.csi.aws.com parameters: type: gp2 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowedTopologies: - matchLabelExpressions: - key: topology.kubernetes.io/zone values: - us-west-2a - us-west-2b - us-west-2c
注意:allowedTopologies需匹配集群实际可用区,避免卷调度失败。
6. 强制重新调度异常Pod
对处于Pending状态的Pod,删除后让Kubernetes重新调度:
kubectl delete pod <你的Pod名称>
重新调度后,Kubernetes会尝试通过CSI驱动重新挂载卷。
内容的提问来源于stack exchange,提问作者Abdullah Khawer
相关产品推荐
相关产品推荐

