Kubernetes持久卷声明不保存数据

tcbh2hod  于 2023-01-12  发布在  Kubernetes
关注(0)|答案(1)|浏览(145)

我在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服务

mwngjboj

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配置,因为那里也可能有一些错误的配置。

相关问题