Docker-Kubernets 找不到 manage.py



我在Django中构建了一个API,并使用docker-compose来编排redi和celero服务。现在,我想将API转移到Kubernetes集群(AKS(中。但是,当我在集群中运行它时,我会得到错误python can't find manage.py。我使用Kompose工具编写了kubernets manifest.yaml。这是我的Dockerfile、docker-compose.yml和kubernets.yaml文件

# docker-compose.yml
version: '3'
services:
app:
build:
context: .
ports:
- "8000:8000"        
volumes:
- ./app:/app
command: >
sh -c "python3 ./manage.py makemigrations &&
python3 ./manage.py migrate &&
python3 ./manage.py runserver 0.0.0.0:8000"

Dockerfile

# Dockerfile
FROM python:3.8 
ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
RUN mkdir /app
COPY ./app /app
WORKDIR /app

kubernets显示

apiVersion: v1
items:
- apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert -f docker-compose.yml -o kb_manifests.yaml
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: app
name: app
spec:
ports:
- name: "8000"
port: 8000
targetPort: 8000
selector:
io.kompose.service: app
status:
loadBalancer: {}

- apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert -f docker-compose.yml -o kb_manifests.yaml
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: app
name: app
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: app
strategy:
type: Recreate
template:
metadata:
annotations:
kompose.cmd: kompose convert -f docker-compose.yml -o kb_manifests.yaml
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: app
spec:
containers:
- args:
- sh
- -c
- |-
python manage.py makemigrations &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000
image: <image pushed in a Azure Container Registry (ACR)>
name: app
ports:
- containerPort: 8000
resources: {}
volumeMounts:
- mountPath: /app
name: app-claim0
restartPolicy: Always
volumes:
- name: app-claim0
persistentVolumeClaim:
claimName: app-claim0
status: {}
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: app-claim0
name: app-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}

日志错误

$ kubectl logs app-6fc488bf56-hb8g9 --previous
# python: can't open file 'manage.py': [Errno 2] No such file or director

我认为您的问题在于kubernetes配置的volumes段。

在docker compose配置中,您有一个卷安装

volumes:
- ./app:/app

这对于本地开发来说非常好,因为它将在您的机器上复制代码并将其覆盖在docker映像上,这样您在机器上所做的更改将反映在正在运行的docker容器中,从而使runserver能够查看文件更改并根据需要重新加载django服务器。

这在kubernetes中不太好——当你在prod中运行时,你想使用已经烘焙到图像中的代码。由于这是当前配置的,我认为您正在创建一个PersistentVolumeClaim,然后将其安装在运行容器中的/app目录的顶部。由于它是空的,因此找不到manage.py文件。

试着让你的kubernetes配置看起来像这样:

apiVersion: v1
items:
- apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert -f docker-compose.yml -o kb_manifests.yaml
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: app
name: app
spec:
ports:
- name: "8000"
port: 8000
targetPort: 8000
selector:
io.kompose.service: app
status:
loadBalancer: {}

- apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert -f docker-compose.yml -o kb_manifests.yaml
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: app
name: app
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: app
strategy:
type: Recreate
template:
metadata:
annotations:
kompose.cmd: kompose convert -f docker-compose.yml -o kb_manifests.yaml
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: app
spec:
containers:
- args:
- sh
- -c
- |-
python manage.py makemigrations &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000
image: <image pushed in a Azure Container Registry (ACR)>
name: app
ports:
- containerPort: 8000
resources: {}
restartPolicy: Always
status: {}

这应该与减去对卷的任何引用后的内容相同。

如果这有效,那么你就去参加比赛了。一旦它启动并运行,请查看Django部署指南,了解您应该配置的其他一些设置——即,查看gunicorn;runserver并不是您进行生产部署的最佳途径。

相关内容

  • 没有找到相关文章

最新更新