上传目录用 hostPath 挂到 /data/uploads,Pod 重建后调度到另一台节点,历史图片全部 404。乍看像缓存或者权限的锅,追下去往往不是。
kubectl get pod api-4c5d6e7f8-9k2mn -o jsonpath='{.spec.nodeName}'
kubectl get pvc uploads-data
kubectl exec api-4c5d6e7f8-9k2mn -- ls /data/uploads | head
追下去是这么回事:hostPath 只指向当前节点的本地目录,Pod 换节点后看到的是另一份空目录。没有共享存储时,副本和重建都无法保证数据落在同一处。
「hostPath 数据丢失」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。
监控和日志的时间要对上,时区不一致会多绕很大一圈。
具体做法是,改用 PVC StorageClass 选支持 RWX 的共享存储;迁移前把各节点 hostPath 里的文件汇总到新卷;临时方案可以用 nodeSelector 把 Pod 钉在原节点 但要接受单点;验证重建后新 Pod 能读到旧文件。
验收就看一点,删掉 Pod 重建后仍能列出旧图片 上传的新文件在另一个副本里也能读到。
