FailedMount 在说什么
FailedMount 与 FailedAttachVolume 是卷在准备阶段失败的信号,Pod 会长期停在 ContainerCreating,容器根本没有机会启动。排查要按层拆开:attach 层是卷能否被附加到目标节点(云盘常见冲突与可用区不匹配);mount 层是节点能否把它挂到容器目录(CSI 节点组件、NFS 可达性);引用层是清单里引用的 Secret 或 ConfigMap 是否存在且键名正确。事件原文通常会直接指向其中一层。
按层定位
| 层 | 典型事件 | 检查点 |
|---|---|---|
| attach 层 | FailedAttachVolume、Multi-Attach | 卷是否已挂在别的节点、卷与节点是否同可用区 |
| mount 层 | FailedMount、mount failed: exit status 32 | CSI node 组件、NFS 服务端连通性、挂载类型与参数 |
| 引用层 | failed to get secret / configmap | Secret、ConfigMap 是否在同一命名空间且键名一致 |
| 调度层 | FailedScheduling 含卷拓扑信息 | volumeBindingMode 与 PV 的节点亲和 |
典型使用场景
- Pod 停在 ContainerCreating 超过一分钟:优先怀疑卷准备,而不是镜像或调度
- 云盘跨可用区:节点与卷不在同一区时 attach 永远无法完成
- NFS 服务端变更:节点侧挂载超时,表现与 Pod 配置无关却报挂载失败
- 引用缺失:Secret 改名或被删后,卷挂载阶段直接失败,容器连启动机会都没有
- 扩容与存储类调整后:新挂载参数不被驱动支持,出现挂载类型或参数不匹配的原文
按顺序排查
按顺序排查
kubectl describe pod web-x | grep -B2 -A6 -iE 'mount|attach' # 事件原文是一手材料
kubectl get pvc,pv # 绑定状态与容量
kubectl describe pvc data-web-0 | sed -n '/Events:/,$p' # 卷本身的失败原因
kubectl -n kube-system get pods | grep -i csi # 驱动控制器与节点组件是否就绪
kubectl -n kube-system logs -l app=csi-<driver>-controller --tail=100
kubectl get secret,configmap -n prod | grep -i <引用的名称> # 引用层快速确认事件原文对照
| 原文关键词 | 指向层 | 下一步 |
|---|---|---|
| timeout waiting for volume to be attached | attach 层 | 检查云侧 API、卷与节点可用区、是否被其他节点占用 |
| Multi-Attach error for volume | attach 层 | 确认是否有多副本共享同一 RWO 卷 |
| failed to get secret / configmap | 引用层 | 补建对象或修正名字与命名空间 |
| mount failed: exit status 32 | mount 层 | 核对挂载类型与参数,NFS 服务端是否可达 |
| volume not found / no matching volume | PV 与 PVC 层 | 确认 PV 是否已被删除或绑定关系错乱 |
卷引用缺失(Secret 或 ConfigMap 不存在)同样以挂载失败的形式出现,日志里不会说「配置漏了」,而是报挂载错误。看到 FailedMount 时顺手确认引用对象是否存在,能省掉一轮排查。
事件有保留时间限制,复现后应立即收集并按涉及对象过滤;节点侧的 kubelet 与 CSI 组件日志比 apiserver 事件更详细,必要时到问题节点上取。