如何修复EKS 1.23集群中aws-ebs-csi-driver的"no topology key found on CSINode"错误?
解决EKS 1.23部署AWS EBS CSI Driver时的Topology Key报错
问题根源
这个报错是因为EBS CSI Driver的节点守护进程没把拓扑信息正确注册到CSINode资源里,要么就是StorageClass的拓扑键配置出错。EKS 1.23里CSI驱动默认开启拓扑感知,得保证节点侧组件正常运行,且能正确上报拓扑数据。
排查修复步骤
1. 检查EBS CSI节点组件状态
直接运行命令查看守护进程和对应的Pod是否在所有节点正常运行:
kubectl get daemonset ebs-csi-node -n kube-system kubectl get pods -n kube-system -l app=ebs-csi-node
如果有Pod未正常启动,查看日志定位问题:
kubectl logs -n kube-system <ebs-csi-node-pod-name> -c node-driver-registrar kubectl logs -n kube-system <ebs-csi-node-pod-name> -c ebs-plugin
2. 验证CSINode资源的拓扑信息
选取任意节点,查看对应的CSINode资源是否包含topology.ebs.csi.aws.com/zone拓扑键:
kubectl get csinode <node-name> -o yaml
正常情况下,spec.drivers数组中应该有如下配置:
spec: drivers: - name: ebs.csi.aws.com nodeID: <node-id> topologyKeys: - topology.ebs.csi.aws.com/zone
如果没有该拓扑键,说明节点组件未完成注册,重启守护进程即可:
kubectl rollout restart daemonset ebs-csi-node -n kube-system
3. 检查StorageClass配置
查看gp2 StorageClass的配置是否正确,动态创建卷时,要么配置allowedTopologies,要么保证默认拓扑匹配逻辑正常。先查看当前配置:
kubectl get storageclass gp2 -o yaml
如果未配置allowedTopologies,可以添加以下内容(替换为你的集群可用区):
allowedTopologies: - matchLabelExpressions: - key: topology.ebs.csi.aws.com/zone values: - us-west-2a - us-west-2b - us-west-2c
注意不要配置错误的拓扑键,同时确保CSI驱动的provisioner支持动态拓扑选择。
4. 确认IAM权限配置
EBS CSI节点组件需要权限访问EC2元数据获取可用区信息,不管是使用节点IAM角色还是IRSA配置,都要确保包含ec2:DescribeAvailabilityZones等相关权限。如果用IRSA,检查Service Account的注解和IAM角色绑定是否正确。
5. 重新创建PVC
完成上述检查后,删除原有PVC并重新创建,观察是否能正常生成卷:
kubectl delete pvc <你的PVC名称> kubectl apply -f <你的PVC配置文件>
内容的提问来源于stack exchange,提问作者Gabriel Stein
相关产品推荐
相关产品推荐

