postgresql - 使用环境变量将两个容器与 Kubernetes 连接
问题描述
我是 k8s 的新手,需要一些关于如何排除故障的指导。
我有一个 postgres 容器和一个 graphql 容器。graphql 容器在启动时尝试连接到 postgres。
问题
graphql 容器无法连接到 postgres。这是启动时的错误:
{"internal":"无法连接到服务器:连接被拒绝\n\t服务器是否在主机 "my-app" (xxx.xx.xx.xxx) 上运行并接受\n\t端口 5432 上的 TCP/IP 连接? \n", "path":"$","error":"连接错误","code":"postgres-error"}
我的理解是 graphql-container 无法识别 IP my-app (xxx.xx.xx.xxx)
。这是实际的 Pod 主机 IP,所以我很困惑为什么它无法识别它。如何解决此类错误?
我试过的
将 deployment.yaml 中连接 uri 中的主机硬编码为实际的 pod 主机 IP。同样的错误。
进入 graphql 容器并使用
env
命令验证它具有正确的 env 值。
部署.yaml
spec:
selector:
matchLabels:
service: my-app
template:
metadata:
labels:
service: my-app
...
- name: my-graphql-container
image: image-name:latest
env:
- name: MY_POSTGRES_HOST
value: my-app
- name: MY_DATABASE
value: db
- name: MY_POSTGRES_DB_URL # the postgres connection url that the graphql container uses
value: postgres://$(user):$(pw)@$(MY_POSTGRES_HOST):5432/$(MY_DATABASE)
...
- name: my-postgres-db
image: image-name:latest
解决方案
在关于 pod 的 k8s 文档中,您可以阅读:
Kubernetes 集群中的 Pod 主要有两种使用方式:
运行单个容器的 Pod。[...]
运行多个需要协同工作的容器的 Pod。[...]
注意:在单个 Pod 中将多个位于同一位置和共同管理的容器分组是一个相对高级的用例。您应该仅在容器紧密耦合的特定情况下使用此模式。
每个 Pod 旨在运行给定应用程序的单个实例。[...]
请注意,您的部署不符合此描述,因为您试图在一个 pod 中运行两个应用程序。
请记住,每个容器始终使用一个 pod,并且如果无法将它们分开(并且由于某种原因它们必须一起运行),则只能在每个 pod 中使用多个容器。
其余的已经被大卫提到了。
推荐阅读
- django - django:使用一对一链接扩展用户模型 - 如何使用 post_save 信号
- javascript - 大型 jsPDF 文件导致 504 网关超时
- c - 32 张卡片组的特定排列(在 C 中)
- python - python中打印功能的错误?
- matlab - How can I find the average of largest set of non-zero values in an array
- python - How to solve the error when importing matplotlib in Anaconda on macOS?
- qt - Group users in Firebase RTDB
- python-3.x - pip install bad解释器:没有这样的文件或目录
- highcharts - How to use Sankey chart from highchart in Angular5
- vim - Get a parsable string with carriage returns