Implantações simplificadas do PostgreSQL no Amazon EKS usando o PGO
Shalaka Dengale, Amazon Web Services
Resumo
Este padrão integra o Postgres Operator da Crunchy Data (PGO) com o Amazon Elastic Kubernetes Service (Amazon EKS) para simplificar as implantações do PostgreSQL em ambientes nativos da nuvem. O PGO fornece automação e escalabilidade para gerenciar bancos de dados PostgreSQL no Kubernetes. Quando você combina o PGO com o Amazon EKS, ele cria uma plataforma robusta para implantar, gerenciar e escalar bancos de dados PostgreSQL de forma eficiente.
Essa integração oferece os seguintes benefícios:
Implantação automatizada: simplifica a implantação e o gerenciamento de clusters do PostgreSQL.
Definições de recursos personalizadas (CRDs): usa primitivas do Kubernetes para gerenciamento do PostgreSQL.
Alta disponibilidade: oferece suporte a failover automático e replicação síncrona.
Backups e restaurações automatizados: simplifica os processos de backup e restauração.
Escalabilidade horizontal: permite o a escalabilidade dinâmica de clusters do PostgreSQL.
Atualizações de versão: facilita as atualizações contínuas com o mínimo de tempo de inatividade.
Segurança: aplica criptografia, controles de acesso e mecanismos de autenticação.
Pré-requisitos e limitações
Pré-requisitos
Uma Conta da AWS ativa.
AWS Command Line Interface (AWS CLI) versão 2, instalado e configurado no Linux, macOS ou Windows.
Configuração da AWS CLI, para conectar recursos da AWS pela linha de comando.
eksctl
, instalado e configurado no Linux, macOS ou Windows. kubectl, instalado e configurado para acessar recursos em seu cluster Amazon EKS. Para obter mais informações, consulte Configurar o kubectl e o eksctl na documentação do Amazon EKS.Seu terminal de computador configurado para acessar o cluster do Amazon EKS. Para obter mais informações, consulte Configurar o computador para se comunicar com seu cluster na documentação do Amazon EKS.
Versões do produto
Kubernetes versões 1.21 a 1.24 ou posteriores (consulte a documentação do PGO
). PostgreSQL versão 10 ou posterior. Este padrão usa o PostgreSQL versão 16.
Limitações
Alguns Serviços da AWS não estão disponíveis em todas as Regiões da AWS. Para conferir a disponibilidade de uma região, consulte Serviços da AWS by Region
. Para endpoints específicos, consulte a página Cotas e endpoints de serviços e clique no link correspondente ao serviço desejado.
Arquitetura
Pilha de tecnologias de destino
Amazon EKS
Amazon Virtual Private Cloud (Amazon VPC)
Amazon Elastic Compute Cloud (Amazon EC2)
Arquitetura de destino

Este padrão cria uma arquitetura que contém um cluster do Amazon EKS com três nós. Cada nó é executado em um conjunto de instâncias do EC2 no backend. Essa configuração do PostgreSQL segue uma arquitetura de réplica primária, que é particularmente eficaz para casos de uso com muita leitura. A arquitetura inclui os seguintes componentes:
O contêiner do banco de dados primário (pg-primary) hospeda a instância principal do PostgreSQL para a qual todas as operações de gravação são direcionadas.
Os contêineres de réplica secundários (pg-replica) hospedam as instâncias do PostgreSQL que replicam os dados do banco de dados primário e processam as operações de leitura.
O PgBouncer é um pooler de conexão leve para bancos de dados PostgreSQL incluídos no PGO. Ele fica entre o cliente e o servidor do PostgreSQL e atua como intermediário para conexões do banco de dados.
O PGO automatiza a implantação e o gerenciamento de clusters do PostgreSQL nesse ambiente Kubernetes.
O Patroni é uma ferramenta de código aberto que gerencia e automatiza configurações de alta disponibilidade para o PostgreSQL. Ele está incluído no PGO. Quando você usa o Patroni com o PGO no Kubernetes, ele desempenha um papel crucial para garantir a resiliência e a tolerância a falhas de um cluster do PostgreSQL. Para obter mais informações, consulte a documentação do Patroni
.
O fluxo de trabalho inclui estas etapas:
Implantação do operador do PGO. Implante o operador do PGO no cluster do Kubernetes que é executado no Amazon EKS. Isso pode ser feito usando manifestos do Kubernetes ou charts do Helm. Este padrão usa manifestos do Kubernetes.
Defina instâncias do PostgreSQL. Quando o operador está em execução, você cria recursos personalizados (CRs) para especificar o estado desejado das instâncias do PostgreSQL. Isso inclui configurações como armazenamento, replicação e definições de alta disponibilidade.
Gerenciamento de operadores. Você interage com o operador por meio de objetos da API do Kubernetes, como CRs, para criar, atualizar ou excluir instâncias do PostgreSQL.
Monitoramento e manutenção. Você pode monitorar a integridade e a performance das instâncias do PostgreSQL executadas no Amazon EKS. Os operadores geralmente fornecem métricas e registros em log para fins de monitoramento. Você pode realizar tarefas de manutenção de rotina, como atualizações e correções, conforme necessário. Para obter mais informações, consulte Monitorar a performance de clusters e visualizar logs na documentação do Amazon EKS.
Dimensionamento e backup: você pode usar os recursos fornecidos pelo operador para escalar instâncias do PostgreSQL e gerenciar backups.
Este padrão não abrange as operações de monitoramento, manutenção e backup.
Automação e escala
É possível usar o CloudFormation para automatizar a criação da infraestrutura. Para obter mais informações, consulte Criar recursos do Amazon EKS com o CloudFormation na documentação do Amazon EKS.
É possível usar os números de compilação do GitVersion ou do Jenkins para automatizar a implantação de instâncias de banco de dados.
Ferramentas
Serviços da AWS
O Amazon Elastic Kubernetes Service (Amazon EKS) ajuda você a executar o Kubernetes na AWSsem precisar instalar e manter seus próprios nós ou painel de controle do Kubernetes.
A AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que auxilia na interação com Serviços da AWS por meio de comandos no seu shell de linha de comandos.
Outras ferramentas
Práticas recomendadas
Siga estas práticas recomendadas para garantir uma implantação tranquila e eficiente:
Proteja seu cluster do EKS. Implemente as práticas recomendadas de segurança para seu cluster do EKS, como usar perfis do AWS Identity and Access Management (IAM) para contas de serviço (IRSA), políticas de rede e grupos de segurança de VPC. Limite o acesso ao servidor da API do cluster do EKS e criptografe as comunicações entre os nós e o servidor da API usando TLS.
Certifique-se da compatibilidade de versões entre o PGO e o Kubernetes em execução no Amazon EKS. Alguns recursos do PGO podem exigir versões específicas do Kubernetes ou introduzir limitações de compatibilidade. Para obter mais informações, consulte Components and Compatibility
na documentação do PGO. Planeje a alocação de recursos para sua implantação do PGO, incluindo CPU, memória e armazenamento. Considere os requisitos de recursos para o PGO, bem como para as instâncias do PostgreSQL gerenciadas por ele. Monitore o uso de recursos e dimensione os recursos conforme necessário.
Favoreça a alta disponibilidade. Projete sua implantação do PGO para alta disponibilidade a fim de minimizar o tempo de inatividade e garantir a confiabilidade. Implante várias réplicas do PGO em diferentes zonas de disponibilidade para tolerância a falhas.
Implemente procedimentos de backup e restauração para seus bancos de dados PostgreSQL gerenciados pelo PGO. Use recursos fornecidos pelo PGO ou por soluções de backup de terceiros que sejam compatíveis com o Kubernetes e o Amazon EKS.
Configure o monitoramento e o registro em log para sua implantação do PGO a fim de monitorar a performance, a integridade e os eventos. Use ferramentas como o Prometheus, para monitorar métricas, e o Grafana, para visualização. Configure o registro em log para capturar logs do PGO para solução de problemas e auditoria.
Configure a rede adequadamente para permitir a comunicação entre o PGO, as instâncias do PostgreSQL e outros serviços em seu cluster do Kubernetes. Use os recursos de rede da Amazon VPC e os plug-ins de rede do Kubernetes, como o Calico ou a Amazon VPC CNI
, para aplicar políticas de rede e isolar o tráfego. Escolha as opções de armazenamento apropriadas para seus bancos de dados PostgreSQL, considerando fatores como performance, durabilidade e escalabilidade. Use volumes do Amazon Elastic Block Store (Amazon EBS) ou serviços de armazenamento gerenciado da AWS para armazenamento persistente. Para obter mais informações, consulte Usar armazenamento de volumes do Kubernetes com o Amazon EBS na documentação do Amazon EKS.
Use ferramentas de infraestrutura como código (IaC), como o CloudFormation, para automatizar a implantação e a configuração do PGO no Amazon EKS. Defina os componentes da infraestrutura (incluindo o cluster do EKS, a rede e os recursos do PGO) como código para consistência, repetibilidade e controle de versão.
Épicos
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Criar um perfil do IAM. |
| Administrador da AWS |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Crie um cluster do Amazon EKS. | Se você já implantou um cluster, ignore esta etapa. Caso contrário, implante um cluster do Amazon EKS em sua Conta da AWS atual usando o notaEste padrão usa o Amazon EC2 como um grupo de nós para o Amazon EKS. Se você quiser usar o AWS Fargate, consulte a configuração
| Administrador da AWS, administrador do Terraform ou eksctl, administrador do Kubernetes |
Valide o status do cluster. | Execute o seguinte comando para exibir o status atual dos nós no cluster:
Se encontrar erros, consulte a seção de solução de problemas da documentação do Amazon EKS. | Administrador da AWS, administrador do Terraform ou eksctl, administrador do Kubernetes |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Habilite o provedor OIDC do IAM. | Como pré-requisito para o driver da interface de armazenamento de contêiner (CSI) do Amazon EBS, você deve ter um provedor OpenID Connect (OIDC) do IAM existente para o cluster. Habilite o provedor OIDC do IAM usando o seguinte comando:
Para obter mais informações sobre essa etapa, consulte a documentação do Amazon EKS. | Administrador da AWS |
Crie um perfil do IAM para o driver da CSI do Amazon EBS. | Use o seguinte comando do
Se você usa unidades criptografadas do Amazon EBS, é necessário configurar ainda mais a política. Para obter instruções, consulte a documentação do driver da CSI do Amazon EBS | Administrador da AWS |
Adicione o driver da CSI do Amazon EBS. | Use o seguinte comando do
| Administrador da AWS |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Clone o repositório do PGO. | Clone o repositório do GitHub para o PGO:
| AWS DevOps |
Forneça os detalhes do perfil para a criação da conta de serviço. | Para conceder ao cluster do Amazon EKS acesso aos recursos da AWS necessários, especifique o nome do recurso da Amazon (ARN) do perfil do OIDC criado anteriormente no arquivo
| Administrador da AWS, administrador do Kubernetes |
Crie o namespace e os pré-requisitos do PGO. |
| Administrador do Kubernetes |
Verifique a criação dos pods. | Verifique se o namespace e a configuração padrão foram criados:
| Administrador da AWS, administrador do Kubernetes |
Verifique as PVCs. | Use o seguinte comando para verificar as declarações de volume persistentes (PVCs):
| Administrador da AWS, administrador do Kubernetes |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Crie um operador. | Confirme se o conteúdo do arquivo localizado em
Essas atualizações garantem o seguinte:
| Administrador da AWS, DBA, administrador do Kubernetes |
Implante o operador. | Implante o operador do PGO para simplificar o gerenciamento e a operação dos bancos de dados PostgreSQL em ambientes Kubernetes:
| Administrador da AWS, DBA, administrador do Kubernetes |
Verificar a implantação. |
Na saída do comando, observe a réplica primária ( | Administrador da AWS, DBA, administrador do Kubernetes |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Grave os dados na réplica primária. | Use os seguintes comandos para se conectar à réplica primária do PostgreSQL e gravar dados no banco de dados:
| Administrador da AWS, administrador do Kubernetes |
Confirme se a réplica de leitura tem os mesmos dados. | Conecte-se à réplica de leitura do PostgreSQL e verifique se a replicação de streaming está funcionando corretamente:
A réplica de leitura deve ter a tabela que você criou na réplica primária na etapa anterior. | Administrador da AWS, administrador do Kubernetes |
Solução de problemas
| Problema | Solução |
|---|---|
O pod não inicia. |
|
As réplicas estão significativamente atrasadas em relação ao banco de dados primário. |
|
Você não tem visibilidade da performance e da integridade do cluster do PostgreSQL. |
|
A replicação não funciona. |
|
Recursos relacionados
Amazon Elastic Kubernetes Service (whitepaper Overview of Deployment Options on AWS)
CloudFormation (whitepaper Overview of Deployment Options on AWS)
Conceitos básicos do Amazon EKS: eksctl (Guia do usuário do Amazon EKS)
Configurar o kubectl e o eksctl (Guia do usuário do Amazon EKS)
Criar um perfil para uma federação do OpenID Connect (Guia do usuário do IAM)
Como definir as configurações da AWS CLI (Guia do usuário da AWS CLI)