如何定位EKS集群中读写EFS及PVC的Pod?
定位EKS集群中消耗EFS读写的Pod及写入PVC的Pod
方法一:通过EFS访问日志关联到具体Pod
- 先开启EFS的访问日志:用AWS控制台或者
aws efs put-file-system-policy命令配置,日志会输出到CloudWatch Logs,每条日志包含客户端IP、操作类型、访问的文件路径等信息。 - 关联EFS日志的客户端IP到EKS节点:执行
kubectl get pods -o wide,获取每个Pod所在节点的IP及Pod自身IP。由于EFS挂载由节点上的客户端发起,需进一步追踪节点进程:- 登录目标节点,运行
mount | grep efs找到EFS挂载路径。 - 用
lsof +D <挂载点路径>列出所有访问该挂载点的进程,再通过crictl ps(containerd环境)或docker ps找到进程对应的Pod ID,最终关联到Pod名称。
- 登录目标节点,运行
方法二:用K8s监控工具直接追踪PVC读写
- 部署Prometheus+Grafana,结合kubelet内置指标:kubelet会暴露
volume_stats_used_bytes、volume_stats_writes_total等指标,这些指标直接关联PVC和对应的Pod,在Grafana中创建面板即可筛选出读写量高的Pod。 - 直接进入Pod排查:对可疑Pod执行
kubectl exec <pod-name> -- df -h,查看挂载的EFS PVC使用情况;若Pod内装有iotop工具,可实时查看进程的IO读写数据。
方法三:借助EFS CSI驱动的增强监控
如果使用AWS官方EFS CSI驱动,可开启驱动的指标收集:
- 部署CSI驱动时,给控制器和节点插件的启动命令添加
--metrics-addr=:9100参数。 - 用Prometheus抓取这些指标,其中
efs_csi_node_volume_operations_total等指标会记录每个Pod对应的EFS操作次数和字节数,可直接定位耗流量的Pod。
方法四:实时追踪写入PVC的Pod
- 用
inotifywait实时监控:在节点的EFS挂载点执行inotifywait -m -r -e create,modify <挂载点>,实时捕捉文件写入操作,再通过lsof关联到对应的Pod。 - 开启K8s审计日志:开启后筛选与PVC挂载、写入相关的API操作,虽无法直接获取IO量,但能快速定位使用目标PVC的Pod。
内容的提问来源于stack exchange,提问作者Spiros Agriopoulos
相关产品推荐
相关产品推荐

