Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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
Postgresql Flask Postgres与Kubernetes和Docker的连接失败_Postgresql_Docker_Flask_Kubernetes_Minikube - Fatal编程技术网

Postgresql Flask Postgres与Kubernetes和Docker的连接失败

Postgresql Flask Postgres与Kubernetes和Docker的连接失败,postgresql,docker,flask,kubernetes,minikube,Postgresql,Docker,Flask,Kubernetes,Minikube,问题: 我的flask API无法连接到我的Postgres实例。我已经验证了数据库和api都能按预期独立工作,部署和服务都在kubernetes中运行。它必须是连接本身。连接是在Flask配置文件中定义的,所以我可能没有正确指定它?我不知下一步该怎么办 错误 这是我在检查特定于API的pod日志时看到的错误,该API正试图联系postgres sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not conne

问题:

我的flask API无法连接到我的Postgres实例。我已经验证了数据库和api都能按预期独立工作,部署和服务都在kubernetes中运行。它必须是连接本身。连接是在Flask配置文件中定义的,所以我可能没有正确指定它?我不知下一步该怎么办

错误

这是我在检查特定于API的pod日志时看到的错误,该API正试图联系postgres

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection timed out
       Is the server running on host "postgres" (198.105.244.228) and accepting
       TCP/IP connections on port 5432?
堆栈信息

  • 米尼库贝
  • 库伯内特斯
  • 码头工人
  • 烧瓶
  • 博士后
  • 炼金术
烧瓶/Config.py

SQLALCHEMY\u数据库postgres://postgres:postgres@postgres:5432/postgres'
。这与切换到Kubernetes之前我在Docker Compose中使用的相同

Kubernetes/postgres集群ip服务.yaml

apiVersion: v1
kind: Service
metadata:
  name: postgres-cluster-ip-service
spec:
  type: ClusterIP
  selector:
    component: postgres
  ports:
    - port: 5432
      targetPort: 5432
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postres-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: postgres
  template:
    metadata:
      labels:
        component: postgres
    spec:
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: database-persistent-volume-claim
      imagePullSecrets:
        - name: regcred
      containers:
        - name: postgres
          image: my/image-db
          ports:
            - containerPort: 5432
          env:
            - name: POSTGRES_PASSWORD
              value: postgres
            - name: POSTGRES_USER
              value: postgres
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
              subPath: postgres
Kubernetes/postgres部署。yaml

apiVersion: v1
kind: Service
metadata:
  name: postgres-cluster-ip-service
spec:
  type: ClusterIP
  selector:
    component: postgres
  ports:
    - port: 5432
      targetPort: 5432
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postres-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: postgres
  template:
    metadata:
      labels:
        component: postgres
    spec:
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: database-persistent-volume-claim
      imagePullSecrets:
        - name: regcred
      containers:
        - name: postgres
          image: my/image-db
          ports:
            - containerPort: 5432
          env:
            - name: POSTGRES_PASSWORD
              value: postgres
            - name: POSTGRES_USER
              value: postgres
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
              subPath: postgres
Kuberenetes/数据库持久卷声明

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: database-persistent-volume-claim
spec:
  # Access mode gets some instance of storage.
  # ReadWriteOncence means that it can be used by a single node.
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      # find a storage option that has at least 2 gigs of space
      storage: 2Gi

很高兴添加任何其他有帮助的文件

服务的名称是主机名,因此您应该连接到
postgres cluster ip Service.default.svc.cluster.local
(如果要部署到不同的Kubernetes命名空间,请更改
default
)。您的错误消息看起来好像您正在连接到群集环境之外名为
postgres
的其他系统。

只需添加到上面@David的正确答案中,供搜索者使用:

SQLALCHEMY_数据库_URI的格式为:

schema://username:password@服务器:端口/数据库名称

我失败的原因是因为我认为我的服务器名是由Kubernetes Postgres部署文件定义的Postgres。然而,我有一个单独的“服务”文件,名为postgres集群ip服务。我第二次将其设置为我的服务器名时,连接就开始工作了。确保服务器不是直接指向服务器,而是位于Kubernetes前面的IP服务

示例:


postgres://username:password@postgres群集ip服务:5432/databasename

这肯定是正确的答案!我今天晚些时候再试。接下来,您能否解释一下
.default.svc.cluster.local
,或者指向该长主机路由的文档?直觉上,我认为应该是
postgres服务集群ip://postgres:postgres@postgres:5432/postgres
所以我只是想知道其他部分是从哪里来的?在Kubernetes文档中。该主机名应该在
@
之后,在
:5432
之前<代码>protocol://user:password@主机:端口/路径是通用URL语法。已确认!在下面添加了一些注释来详细说明,因为我实际上不需要“default.svc.cluster.local”。非常感谢你的帮助。