Containers PostgreSQL com a Crunchy Container Suite Roberto Mello
O Que São Containers? •Processos que tem todo o necessário para executar uma aplicação •Parecido com máquinas virtuais, sem o custo de executar um outro sistema operacional completo •Maior densidade por máquina fonte: docker
Mudança na Forma de Pensar • Não pense em programas a instalar e rodar, mas sim em conjuntos de recursos a serem executados fonte: pluralsight
Containers com Docker
Containers:
 Vantagens e Desvantagens • Leves (usam menos disco, RAM e CPU que VMs) • Execução em ambiente isolado • Encapsulamento dos serviços • Acaba com o “hot fix” • Mais configuração • Orquestração de containers não é simples • Performance pode ser um problema • Pode-se comprometer dados e segurança
PostgreSQL + Containers • Separar os serviços em “pacotes” mais fáceis de administrar • Consistência dos ambientes de produção e desenvolvimento • Facilidade de reunir extensões e upgrades • Automação e escalonamento com provisionamento e criação de réplicas e backups
Crunchy Container Suite Instalação e Dependências • Go • Docker, Kubernetes ou OpenShift • Usa variáveis de ambiente extensivamente • Documentação escrita para CentOS ou RHEL, que também são os containers suportados • https://github.com/CrunchyData/crunchy-containers
Crunchy Containers Componentes • PostgreSQL (com ou sem PostGIS) • Replicação (síncrona e assíncrona) • pool de conexões e load balancing: pgpool + pgbouncer • Gerenciamento de backup: pgBackRest • Monitoramento: Prometheus + grafana • Análise de logs: pgBadger • Outros (watch, sim, dba, upgrade, pgdump, pgaudit, etc)
Visão Geral fonte: Crunchy
Demo: Iniciando um BD $ cd crunchy-containers/examples/docker/primary $ ./run.sh Cleaning up... Error response from daemon: No such container: primary Error: No such container: primary Error: No such volume: primary-pgdata Error: No such network: pgnet ea6f6fd78dc51d18c0f554d1a9f426464a81a08b1ecb5d51dca2b922fcab7a3b 105c3bcef3b8aebb075997fbfb3c40364234bd8191d7fd69bf9c18a9d0d96d0b $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 105c3bcef3b8 crunchydata/crunchy-postgres:centos7-10.4-2.0.0 "/opt/cpm/bin/ start.…" 3 minutes ago Up 3 minutes 0.0.0.0:5432->5432/tcp primary
Iniciando um BD Vários componentes da Crunchy Containers tem scripts run.sh e cleanup.sh, que executam e removem o container com algumas pré-definições, para TESTES docker network create --driver bridge pgnet docker run -p 5432:5432 -v primary-pgdata:/pgdata -e PG_MODE=primary -e PG_USER=testuser -e PG_PASSWORD=password -e PG_DATABASE=userdb -e PG_PRIMARY_USER=primaryuser -e PG_PRIMARY_PORT=5432 -e PG_PRIMARY_PASSWORD=password -e PG_ROOT_PASSWORD=password --name=primary --hostname=primary --network=pgnet -d $CCP_IMAGE_PREFIX/crunchy-postgres:$CCP_IMAGE_TAG
Demo: metrics
Demo: primary-replica • Crunch-containers tem um componente primary- replica • Pode ser executado diretamente pelo docker (por ex: com o ./run.sh) • Ou com o docker-compose, que permite definir a execução de vários containers num conjunto • https://docs.docker.com/compose/overview/
Demo: primary-replica
Demo: pgbouncer com réplicas
Como Gerenciar Tudo Isso em Larga Escala?
Kubernetes: Orquestrando Containers • Automação de “deployment”, escalonamento, e gerenciamento de aplicações em containers • Gerencia todo o ciclo de vida de um container • Muito poderoso, mas nada simples de usar • Quanto mais containers para gerenciar, mais necessário se torna usar um orquestrador fonte: kubernetes
PostgreSQL + Kubernetes • Realizar comandos em massa • Coordenar quais containers são inicializados, e como • Escalar para cima/baixo
PostgreSQL + Kubernetes • Projeto “postgres-operator” da Crunchy • Permite rodar comandos específicos do PostgreSQL para gerenciar clusters em miltiplos containers • https://github.com/crunchydata/postgres-operator
Resumo • Crunchy Containers tem containers com ferramentas e serviços prontos para serem executados e escalonados tanto localmente quanto em nuvem • NECESSÁRIO entender cada um dos serviços e como rodá- los adequadamente. Não há mágica. • NECESSÁRIO entender as especificidades de rodar containers, principalmente segurança, armazenagem e rede • Orquestração de muitos containers não é algo simples, mas é poderoso
Perguntas
Links Interessantes PGCONF.EU 2017 • USING KUBERNETES, DOCKER, AND HELM TO DEPLOY ON-DEMAND POSTGRESQL STREAMING REPLICAS
 
 https://www.postgresql.eu/events/sessions/pgconfeu2017/session/1559/slides/35/ Using%20Kubernetes,% 20Docker,%20and%20Helm%20to%20Deploy%20On- Demand%20PostgreSQL%20Streaming%20Replicas.pdf Postgres Open 2017 • A Kubernetes Operator for PostgreSQL
 https://github.com/crunchydata/postgres-operator • Containerized Clustered PostgreSQL 
 http://jberkus.github.io/container_cluster_pg/#23 PGConf 2017 • Patroni - HA PostgreSQL made easy 
 https://www.slideshare.net/AlexanderKukushkin1/patroni-ha-postgresql-made-easy • PostgreSQL High Availability in a Containerized World 
 http://jkshah.blogspot.jp/2017/03/pgconf-2017-postgresql-high.html
Obrigado! roberto.mello@gmail.com

Containers PostgreSQL com a Crunchy Container Suite

  • 1.
    Containers PostgreSQL com aCrunchy Container Suite Roberto Mello
  • 2.
    O Que SãoContainers? •Processos que tem todo o necessário para executar uma aplicação •Parecido com máquinas virtuais, sem o custo de executar um outro sistema operacional completo •Maior densidade por máquina fonte: docker
  • 3.
    Mudança na Formade Pensar • Não pense em programas a instalar e rodar, mas sim em conjuntos de recursos a serem executados fonte: pluralsight
  • 4.
  • 5.
    Containers:
 Vantagens e Desvantagens •Leves (usam menos disco, RAM e CPU que VMs) • Execução em ambiente isolado • Encapsulamento dos serviços • Acaba com o “hot fix” • Mais configuração • Orquestração de containers não é simples • Performance pode ser um problema • Pode-se comprometer dados e segurança
  • 6.
    PostgreSQL + Containers •Separar os serviços em “pacotes” mais fáceis de administrar • Consistência dos ambientes de produção e desenvolvimento • Facilidade de reunir extensões e upgrades • Automação e escalonamento com provisionamento e criação de réplicas e backups
  • 7.
    Crunchy Container Suite Instalaçãoe Dependências • Go • Docker, Kubernetes ou OpenShift • Usa variáveis de ambiente extensivamente • Documentação escrita para CentOS ou RHEL, que também são os containers suportados • https://github.com/CrunchyData/crunchy-containers
  • 8.
    Crunchy Containers Componentes • PostgreSQL(com ou sem PostGIS) • Replicação (síncrona e assíncrona) • pool de conexões e load balancing: pgpool + pgbouncer • Gerenciamento de backup: pgBackRest • Monitoramento: Prometheus + grafana • Análise de logs: pgBadger • Outros (watch, sim, dba, upgrade, pgdump, pgaudit, etc)
  • 9.
  • 10.
    Demo: Iniciando umBD $ cd crunchy-containers/examples/docker/primary $ ./run.sh Cleaning up... Error response from daemon: No such container: primary Error: No such container: primary Error: No such volume: primary-pgdata Error: No such network: pgnet ea6f6fd78dc51d18c0f554d1a9f426464a81a08b1ecb5d51dca2b922fcab7a3b 105c3bcef3b8aebb075997fbfb3c40364234bd8191d7fd69bf9c18a9d0d96d0b $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 105c3bcef3b8 crunchydata/crunchy-postgres:centos7-10.4-2.0.0 "/opt/cpm/bin/ start.…" 3 minutes ago Up 3 minutes 0.0.0.0:5432->5432/tcp primary
  • 11.
    Iniciando um BD Várioscomponentes da Crunchy Containers tem scripts run.sh e cleanup.sh, que executam e removem o container com algumas pré-definições, para TESTES docker network create --driver bridge pgnet docker run -p 5432:5432 -v primary-pgdata:/pgdata -e PG_MODE=primary -e PG_USER=testuser -e PG_PASSWORD=password -e PG_DATABASE=userdb -e PG_PRIMARY_USER=primaryuser -e PG_PRIMARY_PORT=5432 -e PG_PRIMARY_PASSWORD=password -e PG_ROOT_PASSWORD=password --name=primary --hostname=primary --network=pgnet -d $CCP_IMAGE_PREFIX/crunchy-postgres:$CCP_IMAGE_TAG
  • 12.
  • 13.
    Demo: primary-replica • Crunch-containerstem um componente primary- replica • Pode ser executado diretamente pelo docker (por ex: com o ./run.sh) • Ou com o docker-compose, que permite definir a execução de vários containers num conjunto • https://docs.docker.com/compose/overview/
  • 14.
  • 15.
  • 16.
    Como Gerenciar TudoIsso em Larga Escala?
  • 17.
    Kubernetes: Orquestrando Containers • Automaçãode “deployment”, escalonamento, e gerenciamento de aplicações em containers • Gerencia todo o ciclo de vida de um container • Muito poderoso, mas nada simples de usar • Quanto mais containers para gerenciar, mais necessário se torna usar um orquestrador fonte: kubernetes
  • 18.
    PostgreSQL + Kubernetes •Realizar comandos em massa • Coordenar quais containers são inicializados, e como • Escalar para cima/baixo
  • 19.
    PostgreSQL + Kubernetes •Projeto “postgres-operator” da Crunchy • Permite rodar comandos específicos do PostgreSQL para gerenciar clusters em miltiplos containers • https://github.com/crunchydata/postgres-operator
  • 20.
    Resumo • Crunchy Containerstem containers com ferramentas e serviços prontos para serem executados e escalonados tanto localmente quanto em nuvem • NECESSÁRIO entender cada um dos serviços e como rodá- los adequadamente. Não há mágica. • NECESSÁRIO entender as especificidades de rodar containers, principalmente segurança, armazenagem e rede • Orquestração de muitos containers não é algo simples, mas é poderoso
  • 21.
  • 22.
    Links Interessantes PGCONF.EU 2017 •USING KUBERNETES, DOCKER, AND HELM TO DEPLOY ON-DEMAND POSTGRESQL STREAMING REPLICAS
 
 https://www.postgresql.eu/events/sessions/pgconfeu2017/session/1559/slides/35/ Using%20Kubernetes,% 20Docker,%20and%20Helm%20to%20Deploy%20On- Demand%20PostgreSQL%20Streaming%20Replicas.pdf Postgres Open 2017 • A Kubernetes Operator for PostgreSQL
 https://github.com/crunchydata/postgres-operator • Containerized Clustered PostgreSQL 
 http://jberkus.github.io/container_cluster_pg/#23 PGConf 2017 • Patroni - HA PostgreSQL made easy 
 https://www.slideshare.net/AlexanderKukushkin1/patroni-ha-postgresql-made-easy • PostgreSQL High Availability in a Containerized World 
 http://jkshah.blogspot.jp/2017/03/pgconf-2017-postgresql-high.html
  • 23.