背景:我目前在一些kubernetes pod中运行pgbouncer sidecar容器。我遇到了有关sidecar的烦人问题(这将在k8s 1.18中得到解决),但这带来了一个早期问题,即在k8s内部运行pgbouncer。
许多人建议使用pgbouncer的sidecar方法,但我不明白为什么在k8s群集中针对每个机器运行一个pgbouncer不会更好?我承认我对pgbouncer或k8s网络没有足够深入的理解,无法理解任何方法的影响。
编辑:
添加上下文,因为似乎我的问题不够清楚。
我正试图在kubernetes集群中选择两种运行pgbouncer的方法。 PostgreSQL服务器未在此群集中运行。这两种方法是:
1.在所有我的pod中作为sidecar容器运行pgbouncer。我有许多pod:Web服务器部署上的一些副本,异步作业部署以及几个cron作业。
2.将pgbouncer作为单独的部署运行。我计划在k8s群集中每个节点上运行1个pgbouncer实例。
我担心(1)不会很好地扩展。如果我的PostgreSQL主服务器最大连接数为100,并且每个池的最大连接数为20,则可能很早就面临饱和连接的风险。此外,我在推送期间面临饱和主服务器连接的风险,因为新的pgbouncer sidecars存在并行于删除旧镜像。
然而,我几乎从未见过(2)被推荐。似乎每个人都推荐(1),但是对我来说缺点非常明显。如果在我的pod之外连接到pgbouncer会产生网络惩罚,这个惩罚足够大吗? pgbouncer能否聪明地处理许多其他可能使连接饱和的pgbouncer实例?
许多人建议使用pgbouncer的sidecar方法,但我不明白为什么在k8s群集中针对每个机器运行一个pgbouncer不会更好?我承认我对pgbouncer或k8s网络没有足够深入的理解,无法理解任何方法的影响。
编辑:
添加上下文,因为似乎我的问题不够清楚。
我正试图在kubernetes集群中选择两种运行pgbouncer的方法。 PostgreSQL服务器未在此群集中运行。这两种方法是:
1.在所有我的pod中作为sidecar容器运行pgbouncer。我有许多pod:Web服务器部署上的一些副本,异步作业部署以及几个cron作业。
2.将pgbouncer作为单独的部署运行。我计划在k8s群集中每个节点上运行1个pgbouncer实例。
我担心(1)不会很好地扩展。如果我的PostgreSQL主服务器最大连接数为100,并且每个池的最大连接数为20,则可能很早就面临饱和连接的风险。此外,我在推送期间面临饱和主服务器连接的风险,因为新的pgbouncer sidecars存在并行于删除旧镜像。
然而,我几乎从未见过(2)被推荐。似乎每个人都推荐(1),但是对我来说缺点非常明显。如果在我的pod之外连接到pgbouncer会产生网络惩罚,这个惩罚足够大吗? pgbouncer能否聪明地处理许多其他可能使连接饱和的pgbouncer实例?