An one old image dies, a young image lives: Murabei publica imagem/código para ajudar os órfãos da bitnami/pgbouncer

“The loneliest moment in someone’s life is when they are watching their whole world fall apart, and all they can do is stare blankly.”

Scott Fitzgerald

 

Olá comunidade,

Acho que muitos de nós estamos órfãos da Bitnami. Durante muito tempo nos acostumamos a ter imagens docker de qualidade disponibilizadas de forma gratuita e aberta, ficamos dependentes e o golpe veio de forma inesperada: Bitnami anuncia que vai fechar suas imagens, pelo menos parte delas.

Tudo certo, sem problemas… só não limpar o cache das imagens

No nosso caso, a compra das imagens (assinatura) se torna muitas vezes inviável pelo próprio caráter da consultoria: não somos apenas um projeto… somos muitos projetos simultâneos e, na maior parte das vezes, a infraestrutura não é da Murabei. Isso implicaria no fato de que em cada um dos clientes teríamos que adquirir as imagens ou pelo menos entender as cláusulas contratuais para o uso caso a caso.

Nosso principal impacto foi no uso da imagem do PgBouncer. Para quem não conhece, o PgBouncer é um componente importante para o uso do Postgres em arquiteturas distribuídas em micro/domínio serviços. Dando uma boa encurtada na história, no Postgres cada conexão abre uma thread separada no banco e tem um consumo considerável de memória. Pela existência do pool de conexões, tanto para o Django quanto para o SQLAlchemy, mais de uma conexão é aberta por worker de aplicação. Assim podemos chegar em um conta bem simples: (5 conexões por worker chutando) * (10 workers) * (2 replicadas do container) = 100 conexões que na maior parte do tempo estão inativas. Pensando que cada conexão consuma 20Mb (chutando também), facilmente temos 2Gb de RAM sendo consumidos por conexões idle, so not good.

Certo, meio técnico… mas acho que esse post é para ser mesmo! Agora estamos na 💩 com vários projetos para quebrar por ImagePullErr; algo precisa ser feito. E fizemos! Uma imagem aberta para o PgBouncer com variáveis de ambiente similares à imagem oficial Postgres para facilitar o uso. De quebra, ainda faz um bootstrap e cria o banco de dados de destino no servidor se este não estiver presente.

 

Seria esse meu presente de Natal adiantado?

 

services:
  pgbouncer:
    image: docker.io/andrebaceti/pgbouncer-auto-bootstrap:1.15.0-1-20251130
    container_name: pgbouncer
    ports:
      - 6432:6432
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_DB=pumpwood
      - POSTGRES_USER=pumpwood
      - POSTGRES_PASSWORD=pumpwood

  postgres:
    image: postgres:18
    container_name: postgres
    ports:
      - 5432:5432
    environment:
      - POSTGRES_PASSWORD=pumpwood
      - POSTGRES_USER=pumpwood
      - POSTGRES_DB=pumpwood
    volumes:
      # Mount your SQL dump file with test data
      - ./dump/test_data.sql:/docker-entrypoint-initdb.d/test_data.sql

 

A publicação foi feita no github no repositório de pacotes open source da Murabei. Quem não conhece dá uma olhada por lá, tem muita coisa legal mal documentada, mas estamos trabalhando para melhorar isso… se alguém quiser contribuir com doações, quem sabe não dá para deixar alguém responsável por deixar as coisas mais bonitinhas por lá? Os repos de docker da Murabei ainda estão no meu nome, mas logo mais, quando tiver um tempo, mudaremos isso também.

Bom é isso, usem e abusem, mas não cobrem… é open-source MIT-3 por um motivo: está achando ruim, faz um fork. Se quiser manutenção ou customização, só entrar em contato 🙂.

 

See you space cowboys!

André Baceti

Compartilhar