【发布时间】:2020-05-24 16:37:56
【问题描述】:
背景:我目前使用 pgbouncer sidecar 容器运行一些 kubernetes pod。我一直在使用带有变通方法的 sidecar(将在 k8s 1.18 中解决)遇到烦人的行为,但之前提出了一个关于在 k8s 中运行 pgbouncer 的问题。
很多人推荐 pgbouncer 的 sidecar 方法,但我想知道为什么每次运行一个 pgbouncer 说:k8s 集群中的机器不会更好?我承认我对 pgbouncer 或 k8s 网络的理解不够深入,无法理解这两种方法的含义。
编辑:
添加上下文,因为我的问题似乎不够清楚。
我正在尝试在 kubernetes 集群中运行 pgbouncer 的两种方法之间做出决定。 PostgreSQL 服务器未在此集群中运行。这两种方法是:
- 在我的所有 pod 中将 pgbouncer 作为 sidecar 容器运行。我有许多 pod:网络服务器部署上的一些副本、异步作业部署和几个 cron 作业。
- 将 pgbouncer 作为单独的部署运行。我计划在 k8s 集群上的每个节点上运行 1 个 pgbouncer 实例。
我担心 (1) 不能很好地扩展。如果我的 PostgreSQL 主服务器最多有 100 个连接,并且每个池最多有 20 个连接,我可能会冒着很早就饱和连接的风险。此外,由于新的 pgbouncer sidecars 与被删除的旧图像一起存在,我冒着在推送期间使 master 上的连接饱和的风险。
然而,我几乎从未见过 (2) 推荐。似乎每个人都推荐(1),但缺点对我来说似乎很明显。通过连接到我的 pod 外部的 pgbouncer 所产生的网络惩罚是否足够大以引起注意? pgbouncer 是否足够聪明,可以处理许多其他可能使连接饱和的 pgbouncer 实例?
【问题讨论】:
-
Kubernetes 服务没有“本地优先”的概念,因此很难将流量路由到 Pod 之外的本地服务。您可以在网络延迟或容错之间进行选择(可能还有一些复杂性来修复容错)。
-
如果您可以添加一些关于您的应用程序为什么以及如何使用 PgBouncer 以及应用程序部署结构的信息,它可能会更多地指导答案。
-
@SirensOfTitan 对此问题有何更新?
-
@willrof:抱歉,刚刚更新!我意识到我最初的问题非常不清楚。我不是在问为什么我不能在节点上运行 pgbouncer,而是为什么我会选择在我的 pod 上将它作为 sidecar 运行,而不是在集群中的节点上运行具有副本 >= 的 pgbouncer 部署。随着副本数量的增长,我担心前一种情况下的连接饱和。
标签: postgresql kubernetes pgbouncer