Как обслуживать статические файлы из кластера EKS для Django?
Я новичок в Kubernetes. Прочитав некоторые блоги и документацию, я успешно создал кластер EKS. Я использую ALB (балансировка нагрузки 7-го уровня) для моего приложения Django. Для управления маршрутами/путями я использую контроллер ALB ingress. Но я не могу обслужить статическое содержимое для администратора Django. Я знаю, что мне нужен веб-сервер (Nginx) для обслуживания моих статических файлов. Я не уверен, как настроить его для обслуживания статических файлов. примечание: (Я не хочу использовать whitenoise)
Я решил проблему, создав pod с Django BE и Nginx reverse-proxy, разделяя объем статических файлов:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
labels:
app: myapp
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
volumes:
- name: staticfiles
emptyDir: {}
containers:
- name: nginx
image: ...
ports:
- containerPort: 80
volumeMounts:
- name: staticfiles
mountPath: /data
- name: django
image: ...
ports:
- containerPort: 8000
volumeMounts:
- name: staticfiles
mountPath: /data
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "cp -r /path/to/staticfiles /data/"]
Затем, в Service (и Ingress), укажите порт Nginx 80.
Я решил проблему.
Я удалил команду ["/bin/sh", "-c", "cp -r /path/to/staticfiles /data/"]
Я монтировал по неправильному пути. Поэтому новый файл развертывания выглядит так:
apiVersion: apps/v1
kind: Deployment
metadata:
name: server-dashboard-backend
labels:
app: backend
spec:
replicas: 2
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
volumes:
- name: staticfiles
emptyDir: {}
containers:
- name: server-dashboard
image: *.dkr.ecr.ap-southeast-1.amazonaws.com/*:4
volumeMounts:
- name: staticfiles
mountPath: /usr/src/code/static
- name: nginx
image: nginx:stable
ports:
- containerPort: 80
volumeMounts:
- name: staticfiles
mountPath: /usr/share/nginx/html/static/