Постоянная проблема с диском в Kubernetes GCP - PullRequest
0 голосов
/ 15 февраля 2019

Я работаю в Kubernetes в GCP, и у меня проблемы с томами и постоянными дисками.

Я использую Directus 7 (CMS Headless), который сохраняет большую часть своей информации в базе данных, кромезагруженные файлы, эти файлы находятся в папке / var / www / html / public / uploads (проверено локально с помощью docker-compose и работает нормально), и именно эта папка я пробуюсохранить на постоянном диске.

Ошибка не возникает, но при перезапуске Pod Kubernetes я теряю загруженные изображения (они не сохраняются на диске).

Это моя конфигурация:

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 голосов
/ 21 февраля 2019

Я предполагаю, что ваш предоставленный вручную том персистентности directus-pv , каким-то образом создается с PersistentVolumeReclaimPolicy = * Recycle .Это единственная возможная причина, которая может привести к стиранию данных при каждом перезапуске 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
Записать какой-нибудь файл в смонтированную папку / var / www / html / public / uploads Перезапустить POD (= убить POD), изменив размер реплики до 0, затем до 1 Вывести список содержимого/ var / www / html / public / uploads на вновь созданном POD

для i в busybox-list-uploads-dgfbc;do kubectl exec -it $ i - ls / var / www / html / public / uploads;сделанный;lost + found picture_from_busybox-list-uploads-ng4t6.png

Как видно, выходные данные ясно показывают, что данные сохраняются после перезапуска POD

*, вы можете проверить это с помощью cmd: kubectl get pv/directus-pv -o yaml

0 голосов
/ 16 февраля 2019

Удалить свойство пространства имен из pvc и pvc manifest.Они являются общими ресурсами в кластере.Также удалите свойство класса хранения.

...