我在配置我的Dockerized + PostgreSQL DB应用程序以在Kubernetes集群上工作时遇到了很多问题,这是我使用Google平台创建的。
当我从Docker部署PostgreSQL映像和将Django应用程序映像部署到Kubernetes集群时,如何从settings.py文件中指定PostgreSQL?
下面是我想让我的应用程序工作的方式。当我在本地运行应用程序时,我希望使用SQLITE,为了做到这一点,我在我的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应用程序)。在创建容器时,我还创建了环境变量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下面是我的坞-撰写文件的样子:
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文件(command: python src/manage.py runserver --settings=agents.config.settings)中指定的命令可能会产生异常,并使Pods在无限循环中崩溃。
注意:我已经为Kubernetes创建了所有必要的配置文件(部署定义/服务/秘密/卷文件)。这是我的github链接:https://github.com/StefanCepa/agent-technologies-bachelor
任何帮助都将不胜感激!提前谢谢大家!
发布于 2018-05-24 18:25:36
您必须为postgres吊舱创建一个服务 (集群ip),以使其“可访问”。当您创建一个服务时,您可以通过访问通过<service name>.default:<port>来实现它。然而,将postgres (或任何db)作为一个简单的pod运行是危险的(一旦您或k8s重新创建或者扩展它,您就会丢失数据)。您可以使用服务或使用statefulSets正确地安装它。
一旦你有了地址,你就可以把它放在env变量中,并从你的settings.py中访问它。
编辑:将其放在部署yaml (示例)中:
env:
- name: POSTGRES_HOST
value: "postgres-service.default"
- name: POSTGRES_PORT
value: "5432"
- name: DB
value: "DB"在你的settings.py里
'USER': 'stefan_radonjic',
'PASSWORD': 'cepajecar995',
'HOST': os.getenv('POSTGRES_HOST'),
'PORT': os.getenv('POSTGRES_PORT'),发布于 2018-05-26 07:01:54
以下是我的调查结果:
apiVersion: v1
kind: PersistentVolume
metadata:
labels:
type: local
name: task-pv-volume
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
hostPath:
path: /tmp/data
persistentVolumeReclaimPolicy: Retaindata:
user: c3RlZmFuX3JhZG9uamlj #stefan_radonjic
passowrd: sdfsdfsd #cepajecar995因此postgres实例无法启动。我是通过运行命令kubectl来观察事件发现的。
FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /agent-technologies
WORKDIR /agent-technologies
COPY . /agent-technologies
RUN pip install -r src/requirements.txt
EXPOSE 8000
CMD python src/manage.py runserver 0.0.0.0:8000 --settings=agents.config.settingshttps://stackoverflow.com/questions/50515478
复制相似问题