Kubernetes GCP上的持久磁盘问题

问题描述 投票:1回答:2

我在GCP的Kubernetes工作,我遇到卷和持久磁盘问题。

我正在使用Directus 7(CMS Headless),它将大部分信息保存在数据库中,但上传的文件除外,这些文件位于/ var / www / html / public / uploads文件夹中(使用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

谢谢您的帮助

docker kubernetes google-cloud-platform persistent-storage directus
2个回答
0
投票

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


0
投票

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

我无法使用提供的清单文件重现您的情况,但我尝试了以下测试:

  1. 创建gcePersistentDisk
  2. 创建PersistentVolume
  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的内容

for busy in 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

© www.soinside.com 2019 - 2024. All rights reserved.