【发布时间】:2018-05-24 17:58:29
【问题描述】:
我在配置我的 Dockerized Django + PostgreSQL DB 应用程序以在我使用谷歌云平台创建的 Kubernetes 集群上工作时遇到很多问题。
当我将 Docker Hub 中的 PostgreSQL 映像和我的 Django Web 应用程序的映像部署到 Kubernetes 集群时,如何从我的 settings.py 文件中指定 DATABASES.default.HOST?
这就是我希望我的应用程序如何工作。当我在本地运行应用程序时,我想使用 SQLITE DB,为此我在我的 settings.py 文件中进行了以下更改:
if(os.getenv('DB')==None):
print('Development - Using "SQLITE3" Database')
DATABASES = {
'default':{
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR,'db.sqlite3'),
}
}
else:
print('Production - Using "POSTGRESQL" Database')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'agent_technologies_db',
'USER': 'stefan_radonjic',
'PASSWORD': 'cepajecar995',
'HOST': , #???
'PORT': , #???
}
}
主要思想是,当我将应用程序部署到 Kubernetes 集群时,在 Kubernetes Pod 对象内部,一个 Docker 容器(我的 Dockerized Django 应用程序)将运行。创建容器时,我还创建了环境变量 DB 并将其设置为 True。因此,当我部署应用程序时,我使用 PostgreSQL 数据库。
注意:如果有人对我应该如何将本地开发与生产开发分开有任何其他建议,请发表评论。
这是我的 Dockerfile 的样子:
FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /agent-technologies
WORKDIR /agent-technologies
COPY . /agent-technologies
RUN pip install -r requirements.txt
EXPOSE 8000
这是我的 docker-compose 文件的样子:
version: '3'
services:
web:
build: .
command: python src/manage.py runserver --settings=agents.config.settings
volumes:
- .:/agent-technologies
ports:
- "8000:8000"
environment:
- DB=true
在本地运行应用程序时,它工作得非常好。但是当我尝试将它部署到 Kubernetes 集群时,运行我的应用程序容器的 Pod 对象在无限循环中崩溃,因为我不知道在生产环境中运行应用程序时如何指定 DATABASES.default.HOST。当然,在 docker-compose 文件 (command: python src/manage.py runserver --settings=agents.config.settings) 中指定的命令可能会产生异常并导致 Pod 无限循环崩溃。
注意:我已经为 Kubernetes 创建了所有必要的配置文件(部署定义/服务/秘密/卷文件)。这是我的github链接:https://github.com/StefanCepa/agent-technologies-bachelor
任何帮助将不胜感激!提前谢谢大家!
【问题讨论】:
标签: django postgresql docker kubernetes