DigitalOcean Kubernetes多副本共享do-block-storage持久卷失效问题
问题根因
1. 存储类型本身不支持跨副本共享
你使用的do-block-storage是DigitalOcean的块存储服务,块存储天生仅支持单节点挂载读写,无法同时挂载到多个节点。同时你的PVC配置的访问模式是ReadWriteOnce(RWO),该模式下PVC绑定的PV只能被同一个K8s节点上的Pod访问,跨节点的Pod无法复用这一PV。
2. 调度策略导致Pod跨节点分散
Deployment中配置的topologySpreadConstraints要求Pod按区域标签topology.kubernetes.io/region分散调度,4个副本会被分配到不同的节点甚至不同区域,每个节点都无法挂载其他节点绑定的块存储。这种情况下集群会自动为调度到新节点/区域的Pod创建新的独立PV,最终就会出现你看到的各副本存储独立、数据不互通的现象。
可选解决方案
- 更换支持多节点读写的共享存储:
do-block-storage不支持ReadWriteMany(RWX)访问模式,你可以自行部署NFS存储服务、使用第三方共享存储方案,或者直接将Ghost的内容存储对接DigitalOcean Spaces对象存储,无需本地持久卷。 - 调整部署规模和调度规则:如果不需要多副本高可用,可将副本数调整为1,同时移除跨区域调度的配置,保证唯一的Pod始终调度在同一节点,即可正常使用现有块存储PVC。
- 改造架构规避本地存储共享需求:将Ghost上传的静态资源、站点内容等统一存储到对象存储中,本地卷仅用于存放临时运行数据,不需要跨副本共享,即可在保留多副本部署的前提下使用现有块存储。
内容的提问来源于stack exchange,提问作者FrancisV
相关产品推荐
相关产品推荐

