Kubernetes создает постоянный том и использует его в моем приложении django
Я хочу создать постоянный том на моем кластере kubernetes (gcp) и использовать его в моем приложении django в качестве, например, медиа-папки. На стороне kubernetes я делаю:
Сначала создайте претензию на объем:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-zeus
namespace: ctest
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
, затем в моем deployments.yaml я создаю том и связываю его с pod:
apiVersion: apps/v1
kind: Deployment
metadata:
name: django
namespace: ctest
labels:
app: django
spec:
replicas: 3
selector:
matchLabels:
app: django
template:
metadata:
labels:
app: django
spec:
volumes:
- name: cc-volume
persistentVolumeClaim:
claimName: pvc-zeus
containers:
- name: django
image: gcr.io/direct-variety-3066123/cc-mirror
volumeMounts:
- mountPath: "/app/test-files"
name: cc-volume
...
затем в моих настройках django:
MEDIA_URL = '/test-files/'
Вот мой Dockerfile:
FROM python:3.8-slim
ENV PROJECT_ROOT /app
WORKDIR $PROJECT_ROOT
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
RUN chmod +x run.sh
CMD python manage.py runserver --settings=settings.kube 0.0.0.0:8000
когда я применил утверждение тома на моем кластере, все было сделано (утверждение тома было создано), но после применения deployment.yaml том не был создан для стручков (также если я подключусь в bash к моим стручкам, папка test-files не существует).
Как я могу создать том в моих развертывающих капсулах и использовать его в моем приложении django?
Заранее большое спасибо
Для создания PVC необходимо наличие одного из двух объектов Kubernetes: PersistentVolume(PV) или StorageClass(SC).
Как вы показали, ваш PVC не указывает на PV или SC, из которых можно создать том.
Обычно, когда вы не указываете PV или SC в PVC, используется SC по умолчанию, и вы должны указывать .resources не в PVC, а в SC по умолчанию.
Возможно, если вы просто хотите работать с SC по умолчанию, вы захотите проверить, активен ли он в вашем конкретном кластере или вам нужно создать/активировать его.