Я пытаюсь преобразовать среду 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