为何Kubernetes(Skaffold)本地重启时会删除MongoDB持久化数据?
缺失配置及解决方案
1. 未关闭Skaffold默认自动清理逻辑
skaffold dev默认终止时会清理所有它部署的集群资源,包括PVC、Deployment等。如果你使用集群默认动态供应的PV,其默认回收策略为Delete,PVC被删除后PV和对应存储数据会同步销毁。
解决方法二选一:
- 启动时添加参数:执行
skaffold dev --no-cleanup命令启动,终止时不会自动清理资源 - 永久修改skaffold配置:在
skaffold.yaml中添加如下配置:
deploy: cleanup: false
2. 缺少绑定本地磁盘的静态PV配置
你当前配置中只声明了PVC,没有手动创建绑定本地固定路径的PersistentVolume(PV)资源,默认动态生成的PV属于集群临时存储,不会持久化到本地硬盘,就算PVC未被删除,集群重启后数据也可能丢失。
新增本地PV配置文件如下,替换对应字段为你本地实际配置:
apiVersion: v1 kind: PersistentVolume metadata: name: local-mongo-pv spec: capacity: storage: 2Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: local-mongo-sc local: path: /home/your-user/mongo-data # 替换为你本地要存储数据的目录路径 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - minikube # 替换为你的集群节点主机名,单节点集群直接填节点名即可
同步修改原有PVC配置,指定对应存储类绑定PV:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: database-persistent-volume-claim spec: accessModes: - ReadWriteOnce storageClassName: local-mongo-sc # 和上面PV的存储类名称保持一致 resources: requests: storage: 2Gi
如果你使用Kind集群,需要在创建集群时将本地数据目录挂载到Kind节点内部,否则PV配置的
path是节点容器内的路径,集群重启后数据依然会丢失。
内容的提问来源于stack exchange,提问作者Amel Amcë Muminovic
相关产品推荐
相关产品推荐

