Предыстория: в настоящее время я запускаю несколько модулей kubernetes с контейнером коляски pgbouncer. Я столкнулся с раздражающим поведением с колясками (которые будут рассмотрены в k8s 1.18), которые имеют обходные пути, но подняли более ранний вопрос о запуске pgbouncer внутри k8s.
Многие люди рекомендуют подход с коляской для pgbouncer , но мне интересно, почему запуск одного pgbouncer на каждый: машина в кластере k8s не будет лучше? Я признаю, что мне не хватает глубокого понимания сетей pgbouncer или k8s, чтобы понять последствия любого подхода.
РЕДАКТИРОВАТЬ:
Добавление контекст, как кажется, мой вопрос не был достаточно ясен.
Я пытаюсь выбрать между двумя подходами запуска pgbouncer в кластере kubernetes. Сервер PostgreSQL не работает в этом кластере. Два подхода:
- Запуск pgbouncer в качестве контейнера с коляской во всех моих модулях. У меня есть несколько модулей: несколько реплик при развертывании веб-сервера, развертывание заданий asyn c и пара заданий cron.
- Запуск pgbouncer в качестве отдельного развертывания. Я планирую запустить 1 экземпляр pgbouncer на узел в кластере k8s.
Я беспокоюсь, что (1) не будет хорошо масштабироваться. Если у моего PostgreSQL master максимум 100 соединений, а в каждом пуле максимум 20 соединений, я потенциально рискую насытить соединения довольно рано. Кроме того, я рискую насытить соединения на ведущем устройстве во время проталкивания, так как наряду с удаляемым старым образом существуют новые коляски pgbouncer.
Я, однако, почти никогда не вижу рекомендуемых (2). Кажется, что все рекомендуют (1), но недостатки кажутся мне вполне очевидными. Является ли сетевой штраф, который я понесу, подключившись к pgbouncer за пределами моего модуля, будет достаточно большим, чтобы заметить? Является ли pgbouncer достаточно умным, чтобы справляться со многими другими экземплярами pgbouncer, которые могут насытить соединения?