You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Metabase Pod连接PostgreSQL超时故障求助(运行1年突发异常)

排查Metabase跨命名空间连接PostgreSQL超时故障

已知环境:

  • Metabase Pod运行在metabase命名空间
  • PostgreSQL Pod运行在db命名空间,Pod状态正常
  • 配置稳定运行1年,无近期变更,突发连接超时故障
  • 核心报错:Failed to connect to database: Timed out after 5000 milliseconds

排查步骤

1. 验证跨命名空间DNS解析

跨命名空间访问依赖Kubernetes Service的DNS解析,先确认Metabase Pod能否正确解析PostgreSQL的Service地址:

# 替换<metabase-pod-name>为实际Pod名称,<postgres-service-name>为PostgreSQL的Service名称
kubectl exec -n metabase <metabase-pod-name> -- nslookup <postgres-service-name>.db.svc.cluster.local
  • 如果解析失败:检查CoreDNS Pod状态(kubectl get pods -n kube-system -l k8s-app=kube-dns),或是否有自定义DNS配置干扰。
  • 如果解析成功,记录解析出的IP,下一步验证连通性。

2. 测试网络端口连通性

确认Metabase Pod能访问PostgreSQL的5432端口:

kubectl exec -n metabase <metabase-pod-name> -- telnet <postgres-service-name>.db.svc.cluster.local 5432
# 或用nc命令(如果镜像带nc)
kubectl exec -n metabase <metabase-pod-name> -- nc -zv <postgres-service-name>.db.svc.cluster.local 5432
  • 如果端口不通:
    • 检查PostgreSQL的Service端点是否正常:kubectl get endpoints -n db <postgres-service-name>,确认端点列表包含正常运行的PostgreSQL Pod IP。
    • 检查是否存在NetworkPolicy规则阻断跨命名流量:kubectl get networkpolicy -n db,确认允许metabase命名空间的Pod访问5432端口。
    • 检查节点间网络是否正常,比如在Metabase所在节点ping PostgreSQL所在节点的IP。

3. 检查PostgreSQL自身连接限制

PostgreSQL可能因连接数耗尽或权限配置拒绝连接:

# 查看当前连接数(替换<username>、<db-name>为实际值)
kubectl exec -n db <postgres-pod-name> -- psql -U <username> -d <db-name> -c "SELECT count(*) FROM pg_stat_activity;"
# 查看pg_hba.conf配置,确认允许metabase命名空间IP段访问
kubectl exec -n db <postgres-pod-name> -- cat /var/lib/postgresql/data/pg_hba.conf
  • 如果连接数接近max_connections值,需调整PostgreSQL配置或清理闲置连接。
  • 如果pg_hba.conf中没有允许metabase命名空间的IP段,需添加类似规则:host all all <metabase-namespace-cidr> md5

4. 确认Metabase连接配置正确性

检查Metabase的数据库连接参数是否无误:

# 查看Metabase的数据库相关环境变量
kubectl exec -n metabase <metabase-pod-name> -- env | grep MB_DB

重点确认MB_DB_CONNECTION_URI格式是否正确:

postgresql://<db-user>:<db-pass>@<postgres-service-name>.db.svc.cluster.local:5432/<db-name>

注意是否存在拼写错误、密码过期或数据库名称变更(虽然配置未改,但可能有其他操作导致)。

5. 排查集群网络组件异常

如果以上步骤均正常,可能是集群网络插件(如Calico、Flannel)或CoreDNS出现临时故障:

# 重启CoreDNS Pod
kubectl rollout restart deployment -n kube-system coredns
# 检查网络插件Pod状态,以Calico为例
kubectl get pods -n calico-system

临时缓解方案

若需快速恢复服务,可临时调整Metabase的连接超时参数,将MB_DB_CONNECTION_TIMEOUT设置为更大的值(如10000毫秒),但需尽快找到根本原因。

内容的提问来源于stack exchange,提问作者ZAriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:15:32