Назад | Перейти на главную страницу

Как обслуживать загруженные пользователем файлы в Django / nginx в Kubernetes на GCP (Google Cloud Platform)

Я пытаюсь преобразовать среду docker-compose django (с gnunicorn) / nginx / postgres (используя docker-compose) в kubernetes на GCP. У меня все работает нормально, за исключением обслуживания МЕДИА контента. В django это любой загруженный пользователем контент. Предположим, пользователь загружает изображение профиля или заархивированный документ и т. Д.

Проблема в том, что я создал определение PVC (Persistent Volume Claim) и мне нужно, чтобы оно было доступно для записи. Я установил следующие режимы доступа: ReadWriteOnce и ReadOnlyMany в заявке. Я знаю, что только один контейнер может монтировать том в режиме ReadWrite одновременно.

Я надеялся связать контейнер django с PV (постоянный том) в режиме ReadWrite, а контейнер nginx привязать тот же PV в режиме ReadOnly. Nginx нужен только доступ для чтения. Однако, похоже, это не разрешено в GCP, поскольку только один контейнер может одновременно связывать PV. Когда я применяю конфигурацию, один контейнер монтирует ее (контейнер nginx в режиме RO), а другой (django) не может монтироваться и застревает в статусе «ContainerCreating» на неопределенное время.

Итак, мой вопрос: как обслужить загруженный пользователем контент (который django хранит в / media / *) в GCP / Kubernetes? Есть ли какие-нибудь волшебные поисковые слова, которые я должен использовать, или какие-то документы, которые я могу прочитать? Есть много руководств по запуску django на GCP / kubernetes, но ни одно из них не касается этой проблемы, которую я обнаружил.

В среде docker-compose и контейнер django, и контейнер nginx имеют один и тот же смонтированный том. Поэтому в конфигурации nginx я просто создаю псевдоним для / media, указывающий на монтирование тома.

Статический контент в порядке, у меня есть решение. Проблема заключается только в динамических загрузках пользователей. Прямо сейчас этот том установлен только у контейнера django. Таким образом, пользователь может загрузить файл, но я не могу его отобразить, поскольку nginx не может ссылаться на него.

Любая помощь будет оценена.

Спасибо.

Ты нуждаешься в Общий объем между двумя контейнерами. Вы можете выполнить эту работу с помощью определения модуля, содержащего как контейнеры, так и общий том.

Ваше развертывание должно быть таким:

apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:

  restartPolicy: Never

  volumes:
  - name: shared-data
    persistentVolumeClaim:
        claimName: myclaim

  containers:

  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html

  - name: django-container
    image: django
    volumeMounts:
    - name: shared-data
      mountPath: /media