

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Implantações simplificadas do PostgreSQL no Amazon EKS usando o PGO
<a name="streamline-postgresql-deployments-amazon-eks-pgo"></a>

*Shalaka Dengale, Amazon Web Services*

## Resumo
<a name="streamline-postgresql-deployments-amazon-eks-pgo-summary"></a>

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
<a name="streamline-postgresql-deployments-amazon-eks-pgo-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ [AWS Command Line Interface (AWS CLI) versão 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), instalado e configurado no Linux, macOS ou Windows.
+ [AWS CLI Config](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html), para conectar AWS recursos a partir da linha de comando.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), 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](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) 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](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) 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](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/)).
+ 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 todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte a página [Cotas e endpoints de serviços](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="streamline-postgresql-deployments-amazon-eks-pgo-architecture"></a>

**Pilha de tecnologias de destino**
+ Amazon EKS
+ Amazon Virtual Private Cloud (Amazon VPC)
+ Amazon Elastic Compute Cloud (Amazon EC2)

**Arquitetura de destino**

![Arquitetura para usar o PGO com três zonas de disponibilidade e duas réplicas PgBouncer, e o operador PGO.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/4c164012-7527-4ebe-b6a7-c129600328d6/images/26a5572b-405b-4634-b96a-91254c3ea2c1.png)


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.
+ **PgBouncer**é um agrupador de conexões leve para bancos de dados PostgreSQL incluído 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](https://patroni.readthedocs.io/en/latest/).

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 Kubernetes API, como CRs 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](https://docs.aws.amazon.com/eks/latest/userguide/eks-observe.html) 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**
+ Você pode usar CloudFormation para automatizar a criação da infraestrutura. Para obter mais informações, consulte [Criar recursos do Amazon EKS com o CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) na documentação do Amazon EKS.
+ Você pode usar os números GitVersion de compilação do Jenkins para automatizar a implantação de instâncias de banco de dados.

## Ferramentas
<a name="streamline-postgresql-deployments-amazon-eks-pgo-tools"></a>

**Serviços da AWS**
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.  
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.

**Outras ferramentas**
+ O [eksctl](https://eksctl.io/) é uma ferramenta simples de linha de comando para criar clusters no Amazon EKS.
+ O [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/): é um utilitário de linha de comando para executar comandos em clusters do Kubernetes.
+ O [PGO](https://github.com/CrunchyData/postgres-operator) automatiza e dimensiona o gerenciamento de bancos de dados PostgreSQL no Kubernetes.

## Práticas recomendadas
<a name="streamline-postgresql-deployments-amazon-eks-pgo-best-practices"></a>

Siga estas práticas recomendadas para garantir uma implantação tranquila e eficiente:
+ **Proteja seu cluster do EKS**. Implemente as melhores práticas de segurança para seu cluster EKS, como usar funções 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](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/references/components/) 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](https://github.com/aws/amazon-vpc-cni-k8s), 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) AWS ou serviços de armazenamento gerenciado para armazenamento persistente. Para obter mais informações, consulte [Usar armazenamento de volumes do Kubernetes com o Amazon EBS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html) na documentação do Amazon EKS.
+ **Use ferramentas de infraestrutura como código (IaC)**, como 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
<a name="streamline-postgresql-deployments-amazon-eks-pgo-epics"></a>

### Criar um perfil do IAM
<a name="create-an-iam-role"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um perfil do IAM. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrador da AWS | 

### Criar um cluster do Amazon EKS.
<a name="create-an-eks-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um cluster do Amazon EKS. | Se você já implantou um cluster, ignore esta etapa. Caso contrário, implante um cluster Amazon EKS em seu cluster atual Conta da AWS usando `eksctl` Terraform ou CloudFormation. Este padrão usa o `eksctl` para a implantação de clusters.Este padrão usa o Amazon EC2 como um grupo de nós para o Amazon EKS. Se você quiser usar AWS Fargate, consulte a `managedNodeGroups` configuração na documentação do [eksctl](https://eksctl.io/usage/schema/#managedNodeGroups).[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 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:<pre>kubectl get nodes</pre><br />Se encontrar erros, consulte a [seção de solução de problemas](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html) da documentação do Amazon EKS. | Administrador da AWS, administrador do Terraform ou eksctl, administrador do Kubernetes | 

### Criar um provedor de identidade OIDC
<a name="create-an-oidc-identity-provider"></a>


| Tarefa | Description | 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.<br />Habilite o provedor OIDC do IAM usando o seguinte comando:<pre>eksctl utils associate-iam-oidc-provider --region={region} --cluster={YourClusterNameHere} --approve</pre><br />Para obter mais informações sobre essa etapa, consulte a [documentação do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html). | Administrador da AWS | 
| Crie um perfil do IAM para o driver da CSI do Amazon EBS. | Use o seguinte comando do `eksctl` para criar o perfil do IAM para o driver do CSI:<pre>eksctl create iamserviceaccount \<br />  --region {RegionName} \<br />  --name ebs-csi-controller-sa \<br />  --namespace kube-system \<br />  --cluster {YourClusterNameHere} \<br />  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \<br />  --approve \<br />  --role-only \<br />  --role-name AmazonEKS_EBS_CSI_DriverRole</pre><br />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](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#installation-1). | Administrador da AWS | 
| Adicione o driver da CSI do Amazon EBS. | Use o seguinte comando do `eksctl` para adicionar o driver da CSI do Amazon EBS:<pre>eksctl create addon \<br />  --name aws-ebs-csi-driver \<br />  --cluster <YourClusterName> service-account-role-arn arn:aws:iam::$(aws sts get-caller-identity \<br />  --query Account \<br />  --output text):role/AmazonEKS_EBS_CSI_DriverRole \<br />  --force</pre> | Administrador da AWS | 

### Instalar o PGO
<a name="install-pgo"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório do PGO. | Clone o GitHub repositório para PGO:<pre>git clone https://github.com/CrunchyData/postgres-operator-examples.git </pre> | 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 AWS recursos necessários, especifique o Amazon Resource Name (ARN) da função do OIDC que você criou anteriormente no `service_account.yaml` arquivo que está localizado. [GitHub](https://github.com/CrunchyData/postgres-operator/blob/main/config/rbac/cluster/service_account.yaml)<pre>cd postgres-operator-examples</pre><pre>---<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::<accountId>:role/<role_name> # Update the OIDC role ARN created earlier</pre> | Administrador da AWS, administrador do Kubernetes | 
| Crie o namespace e os pré-requisitos do PGO. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrador do Kubernetes | 
| Verifique a criação dos pods. | Verifique se o namespace e a configuração padrão foram criados:<pre>kubectl get pods -n postgres-operator</pre> | Administrador da AWS, administrador do Kubernetes | 
| Verificar PVCs. | Use o comando a seguir para verificar as declarações de volume persistentes (PVCs):<pre>kubectl describe pvc -n postgres-operator</pre> | Administrador da AWS, administrador do Kubernetes | 

### Criar e implantar um operador
<a name="create-and-deploy-an-operator"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um operador. | Confirme se o conteúdo do arquivo localizado em `/kustomize/postgres/postgres.yaml` corresponde ao seguinte:<pre>spec:<br />  instances:<br />    - name: pg-1<br />      replicas: 3<br />  patroni:<br />    dynamicConfiguration:<br />      postgresql:<br />      pg_hba:<br />        - "host all all 0.0.0.0/0 trust" # this line enabled logical replication with programmatic access<br />        - "host all postgres 127.0.0.1/32 md5"<br />      synchronous_mode: true<br />  users:<br />  - name: replicator<br />    databases:<br />      - testdb<br />    options: "REPLICATION"</pre><br />Essas atualizações garantem o seguinte:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 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:<pre>kubectl apply -k kustomize/postgres</pre> | Administrador da AWS, DBA, administrador do Kubernetes | 
| Verificar a implantação. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html)Na saída do comando, observe a réplica primária (`primary_pod_name`) e a réplica de leitura (`read_pod_name`). Elas serão usadas nas próximas etapas. | Administrador da AWS, DBA, administrador do Kubernetes | 

### Verificar a replicação de streaming
<a name="verify-streaming-replication"></a>


| Tarefa | Description | 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:<pre>kubectl exec -it <primary_pod_name> bash -n postgres-operator</pre><pre>psql</pre><pre>CREATE TABLE customers (firstname text, customer_id serial, date_created timestamp);<br />\dt</pre> | 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:<pre>kubectl exec -it {read_pod_name} bash -n postgres-operator</pre><pre>psql</pre><pre>\dt</pre><br />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
<a name="streamline-postgresql-deployments-amazon-eks-pgo-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O pod não inicia. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| As réplicas estão significativamente atrasadas em relação ao banco de dados primário. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Você não tem visibilidade da performance e da integridade do cluster do PostgreSQL. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| A replicação não funciona. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 

## Recursos relacionados
<a name="streamline-postgresql-deployments-amazon-eks-pgo-resources"></a>
+ [Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html) (whitepaper *Overview of Deployment Options on AWS*)
+  [CloudFormation](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/aws-cloudformation.html) (whitepaper *Overview of Deployment Options on AWS*)
+ [Conceitos básicos do Amazon EKS: eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) (*Guia do usuário do Amazon EKS*)
+ [Configurar o kubectl e o eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) (*Guia do usuário do Amazon EKS*)
+ [Criar um perfil para uma federação do OpenID Connect](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html) (*Guia do usuário do IAM*)
+ [Definindo as configurações do AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) (*Guia AWS CLI do usuário*)
+ [Documentação do Crunchy Postgres for Kubernetes](https://access.crunchydata.com/documentation/postgres-operator/latest)
+ [Crunch & Learn: Crunchy Postgres for Kubernetes 5.0](https://www.youtube-nocookie.com/embed/IIf9WZO3K50) (vídeo)