我在kubernetes上进行了持久卷声明,以保存mongodb数据。重新启动部署后,我发现数据不存在,而且我的PVC处于绑定状态。
这是我的yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth-mongo-depl
spec:
replicas: 1
selector:
matchLabels:
app: auth-mongo
template:
metadata:
labels:
app: auth-mongo
spec:
volumes:
- name: auth-mongo-data
persistentVolumeClaim:
claimName: auth-mongo-pvc
containers:
- name: auth-mongo
image: mongo
ports:
- containerPort: 27017
name: 'auth-mongo-port'
volumeMounts:
- name: auth-mongo-data
mountPath: '/data/db'
---
# Persistent Volume Claim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: auth-mongo-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
我为部署提供了clusterIP服务
1条答案
按热度按时间mwngjboj1#
首先,如果PVC状态仍为
Bound
,而所需的pod恰好在另一个节点上启动,则该pod将失败,因为无法将PV装载到该pod中。(也可以直接在PV上设置persistentVolumeReclaimPolicy: Retain
)。为了解决这个问题,您必须手动覆盖/删除PV的claimRef
。使用kubectl patch pv PV_NAME -p '{"spec":{"claimRef": null}}'
来完成此操作,完成此操作后,PV的状态应为Available
。要查看应用程序是否将任何数据写入所需路径,请运行应用程序并执行exec(
kubectl -n NAMESPACE POD_NAME -it -- /bin/sh
),然后检查/data/db
。您也可以创建一个包含一些随机文本的文件,重新启动应用程序并再次检查。我相当肯定,如果你的PV不是在每次你的应用程序启动时都被重新创建(这是不应该的,因为
Retain
),那么很可能你的应用程序没有写入指定的路径。但是你也可以和我们分享你的PersistentVolume
配置,因为那里也可能有一些错误的配置。