Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
库伯内特斯+;Django/PostgreSQL—当我将PostgreSQL数据库部署到Kubernetes集群时,如何指定它的主机_Django_Postgresql_Docker_Kubernetes - Fatal编程技术网

库伯内特斯+;Django/PostgreSQL—当我将PostgreSQL数据库部署到Kubernetes集群时,如何指定它的主机

库伯内特斯+;Django/PostgreSQL—当我将PostgreSQL数据库部署到Kubernetes集群时,如何指定它的主机,django,postgresql,docker,kubernetes,Django,Postgresql,Docker,Kubernetes,我在配置停靠的Django+PostgreSQL DB应用程序以在Kubernetes集群上工作时遇到了很多问题,我使用Google云平台创建了Kubernetes集群 当我将Docker Hub中的PostgreSQL映像和Django Web应用程序的映像部署到Kubernetes集群时,如何从my settings.py文件中指定DATABASES.default.HOST 以下是我希望我的应用程序如何工作。在本地运行应用程序时,我希望使用SQLITE DB,为此,我在settings.p

我在配置停靠的Django+PostgreSQL DB应用程序以在Kubernetes集群上工作时遇到了很多问题,我使用Google云平台创建了Kubernetes集群

当我将Docker Hub中的PostgreSQL映像和Django Web应用程序的映像部署到Kubernetes集群时,如何从my 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容器(我的Docked 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
version: '3'
services:
  web:
    build: .
    command: python src/manage.py runserver --settings=agents.config.settings
    volumes: 
      - .:/agent-technologies
    ports: 
      - "8000:8000"
    environment:
      - DB=true
下面是我的docker compose文件的外观:

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 compose文件中指定的命令(
command:python src/manage.py runserver--settings=agents.config.settings
)可能会产生异常,并使POD在无限循环中崩溃

注意:我已经为Kubernetes创建了所有必要的配置文件(部署定义/服务/机密/卷文件)。这是我的github链接:

任何帮助都将不胜感激!提前谢谢大家

您必须为您的postgres pod创建一个(集群ip)以使其“可访问”。创建服务时,可以通过
。默认值:
。但是,将postgres(或任何db)作为一个简单的pod运行是危险的(一旦您或k8s重新创建pod或将其放大,您就会丢失数据)。您可以使用或使用正确安装

获得地址后,您可以将其放入并从settings.py访问它

'USER': 'stefan_radonjic',
'PASSWORD': 'cepajecar995',
'HOST': os.getenv('POSTGRES_HOST'),
'PORT': os.getenv('POSTGRES_PORT'),
编辑: 将其放在部署yaml()中:

在你的settings.py中

'USER': 'stefan_radonjic',
'PASSWORD': 'cepajecar995',
'HOST': os.getenv('POSTGRES_HOST'),
'PORT': os.getenv('POSTGRES_PORT'),
你必须为你的postgres pod创建一个(集群ip)以使其“可访问”。创建服务时,可以通过
。默认值:
。但是,将postgres(或任何db)作为一个简单的pod运行是危险的(一旦您或k8s重新创建pod或将其放大,您就会丢失数据)。您可以使用或使用正确安装

获得地址后,您可以将其放入并从settings.py访问它

'USER': 'stefan_radonjic',
'PASSWORD': 'cepajecar995',
'HOST': os.getenv('POSTGRES_HOST'),
'PORT': os.getenv('POSTGRES_PORT'),
编辑: 将其放在部署yaml()中:

在你的settings.py中

'USER': 'stefan_radonjic',
'PASSWORD': 'cepajecar995',
'HOST': os.getenv('POSTGRES_HOST'),
'PORT': os.getenv('POSTGRES_PORT'),
以下是我的调查结果:

  • postgres实例取决于持久卷。我看到了持久卷声明的代码,但没有看到持久卷本身。所以我必须先创建这个
  • apiVersion:v1 种类:PersistentVolume 元数据: 标签: 类型:本地 名称:任务pv卷 规格: 访问模式: -读写 容量: 存储:1Gi 主机路径: 路径:/tmp/数据 PersistentVolumeClaIncolicy:保留
  • 在agent/agents/config/kubernetes/postgres/secrets-definition.yml术语密码中有一个类型
    数据:
    用户:c3RlZmFuX3JhZG9uamlj#stefan#u radonjic
    passowrd:sdfsdfsd#cepajecar995
    
    因此,postgres实例无法启动。我通过运行命令kubectl descripe pods查看事件发现了这一点

  • Docker映像中没有执行应用程序的命令。因此,如果我在cepa995/agents_web上运行您的docker映像,它将简单地退出,而不会运行任何应用程序。这就是django应用程序没有运行的原因。为了解决这个问题,我修改了Dockerfile,在末尾添加了一条CMD指令。我看到你把这个放在docker compose中来构建图像,但是这个命令必须在docker文件本身内部。Dockerfile现在看起来像这样:
  • 来自python:3.6的
    
    环境蟒蛇缓冲1
    运行mkdir/agent技术
    WORKDIR/agent技术
    抄袭/代理技术
    运行pip安装-r src/requirements.txt
    曝光8000
    CMD python src/manage.py runserver 0.0.0.0:8000--settings=agents.config.settings
    
    以下是我的发现:

  • postgres实例取决于持久卷。我看到了持久卷声明的代码,但没有看到持久卷本身。所以我必须先创建这个
  • apiVersion:v1 种类:PersistentVolume 元数据: 标签: 类型:本地 名称:任务pv卷 规格: 访问模式: -读写 容量: 存储:1Gi 主机路径: 路径:/tmp/数据 PersistentVolumeClaIncolicy:保留
  • 在agent/agents/config/kubernetes/postgres/secrets-definition.yml术语密码中有一个类型
    数据:
    用户:c3RlZmFuX3JhZG9uamlj#stefan#u radonjic
    passowrd:sdfsdfsd#cepajecar995
    
    因此,postgres实例无法启动。我通过运行命令kubectl descripe pods查看事件发现了这一点

  • Docker映像中没有执行应用程序的命令。因此,如果我在cepa995/agents_web上运行您的docker映像,它将简单地退出,而不会运行任何应用程序。这就是django应用程序没有运行的原因。为了解决这个问题,我修改了Dockerfile,在末尾添加了一条CMD指令。我看到你把这个放在docker compose中来构建图像,但是这个命令必须在docker文件本身内部。Dockerfile看起来