我在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
谢谢您的帮助
从pv和pvc清单中删除名称空间属性。它们是群集中的共享资源。同时删除存储类属性。
我假设您使用PersistentVolumeReclaimPolicy = * Recycle以某种方式创建了手动配置的持久性卷directus-pv。这是唯一可能导致每次POD重启时数据擦除的原因。
我无法使用提供的清单文件重现您的情况,但我尝试了以下测试:
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
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