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

K8s端口转发Postgres Pod执行psql特定命令报连接重置错误

排查思路
  • 第一步先排除端口转发本身的干扰,直接进主Pod内部执行命令复现:
    # 获取主Pod名称
    PG_CLUSTER_PRIMARY_POD=$(microk8s kubectl get pod -o name \
    -l postgres-operator.crunchydata.com/cluster=hippo,postgres-operator.crunchydata.com/role=master)
    # 直接在Pod内执行\dt命令
    microk8s kubectl exec -it ${PG_CLUSTER_PRIMARY_POD} -c database -- psql -U hippo -d hippo -c "\dt"
    
    如果这步执行就报错,问题出在Postgres实例本身,和端口转发、本地网络无关;如果这步正常返回结果,问题才出在microk8s端口转发链路。
  • 如果判定是实例本身异常:
    • 先查Pod内Postgres日志,定位崩溃时间点的具体报错:
      microk8s kubectl logs ${PG_CLUSTER_PRIMARY_POD} -c database --tail=100
      
      重点排查有没有segmentation fault、PANIC、disk full、out of memory类的致命报错。
    • 检查存储使用率:你配置的数据盘和备份盘都只有1Gi,很容易被WAL日志、临时文件写满,执行以下命令查看磁盘占用:
      microk8s kubectl exec -it ${PG_CLUSTER_PRIMARY_POD} -c database -- df -h /pgdata
      
    • 检查内存占用:执行microk8s kubectl top pod查看实例内存使用率,确认是不是因为内存不足触发OOM被系统杀掉进程。
  • 如果Pod内执行\dt正常,只有端口转发时报错:
    查看microk8s的kubelet日志、CNI组件日志,确认是不是microk8s旧版本端口转发的已知连接重置问题。
对应解决方案
  • 存储不足场景:直接修改PostgresCluster CR配置,把实例存储、备份存储的容量至少调到5Gi以上,Crunchy Operator支持PVC在线扩容,修改配置后会自动生效。
  • 内存不足场景:给Postgres实例配置至少1Gi的内存limit,避免查询系统表时内存占用过高触发OOM终止进程。
  • 实例崩溃场景:你使用的centos8-13.5-0是较早的镜像版本,存在pg_stat_statements扩展和系统glibc兼容的已知bug,查询pg_catalog系统表时会触发Postgres段错误退出,直接升级到13系列最新的Crunchy镜像即可,比如替换为registry.developers.crunchydata.com/crunchydata/crunchy-postgres:centos8-13.11-0,Operator会自动完成实例滚动升级。如果暂时不能升级,可以临时移除shared_preload_libraries中的pg_stat_statements配置,重启实例验证问题。
  • 端口转发异常场景:不要把kubectl port-forward作为稳定连接方式,临时测试可以给集群Service配置NodePort暴露,或者升级microk8s到最新稳定版本修复端口转发的连接重置bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:27:13