Kubernetes GCP上的永久磁盘问题

时间:2019-02-15 19:19:30

标签: docker kubernetes google-cloud-platform persistent-storage directus

我正在GCP的Kubernetes中工作,但在卷和永久磁盘方面遇到了问题。

我正在使用Directus 7(CMS Headless),它将大部分信息保存在数据库中,但上传的文件除外,这些文件位于 / var / www / html / public / uploads strong>文件夹(已在docker-compose上进行了本地测试,可以正常工作),并且该文件夹是我要保存在永久性磁盘上的那个文件夹。

没有错误发生,但是当重启Kubernetes Pod时,我丢失了上传的图像(它们没有保存在磁盘上)。

这是我的配置:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: directus-pv
  namespace: default
spec:
  storageClassName: ""
  capacity:
    storage: 100G
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk:
    pdName: directus-disk
    fsType: ext4

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: directus-pvc
  namespace: default
  labels:
    app: .....
spec:
  storageClassName: ""
  volumeName: directus-pv
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100G

在deploy.yaml中:

    volumeMounts:
      - name: api-disk
        mountPath: /var/www/html/public/uploads
        readOnly: false

  volumes:
  - name: api-disk
    persistentVolumeClaim:
      claimName: directus-pvc

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

从pv和pvc清单中删除名称空间属性。它们是群集中的共享资源。 还要删除存储类属性。

答案 1 :(得分:0)

我认为您正在使用PersistentVolumeReclaimPolicy = * Recycle以某种方式创建您手动设置的持久性卷 directus-pv 。这是可能导致每次POD重新启动时擦除数据的唯一可能原因。

我无法使用提供的清单文件来复制您的案子, 但我尝试了以下测试:

  1. 创建gcePersistentDisk
  2. 创建持久卷
  3. 创建PersistentVolumeClaim
  4. 像这样创建ReplicaSet(replicas = 1)

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  name: busybox-list-uploads
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: busybox-list-uploads
        version: "2"
    spec:
      containers:
        - image: busybox
          args: [/bin/sh, -c, 'sleep 9999' ]
          volumeMounts:
            - mountPath: /var/www/html/public/uploads
              name: api-disk
          name: busybox
      volumes:
      - name: api-disk
        persistentVolumeClaim:
          claimName: directus-pvc

  1. 将某些文件写入已安装的文件夹/ var / www / html / public / uploads
  2. 通过将副本的大小重新设置为0,然后重新设置为1,重新启动POD(=杀死POD)
  3. 在新创建的POD上列出/ var / www / html / public / uploads的内容
  

对于我在busybox-list-uploads-dgfbc中;做kubectl exec -it $ i-ls / var / www / html / public / uploads;完成   丢失+找到picture_from_busybox-list-uploads-ng4t6.png

如您所见,输出清晰可见,数据在POD重新启动后仍然存在

*您可以使用cmd进行验证:kubectl get pv/directus-pv -o yaml