

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á.

# Implemente um cluster CockroachDB no Amazon EKS usando o Terraform
<a name="deploy-cockroachdb-on-eks-using-terraform"></a>

*Sandip Gangapadhyay e Kalyan Senthilnathan, da Amazon Web Services*

## Resumo
<a name="deploy-cockroachdb-on-eks-using-terraform-summary"></a>

[Esse padrão fornece um módulo HashiCorp Terraform para implantar um cluster [CockroachDB](https://www.cockroachlabs.com/docs/stable/) de vários nós no Amazon Elastic Kubernetes Service (Amazon EKS) usando o operador CockroachDB.](https://www.cockroachlabs.com/docs/v25.4/cockroachdb-operator-overview) O CockroachDB é um banco de dados SQL distribuído que fornece fragmentação horizontal automática, alta disponibilidade e desempenho consistente em clusters distribuídos geograficamente. Esse padrão usa o Amazon EKS como plataforma gerenciada do Kubernetes e implementa o [cert-manager](https://cert-manager.io/docs/) para comunicação de nós protegida por TLS. Ele também usa um [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) para distribuição de tráfego e cria o CockroachDB [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)com pods que replicam dados automaticamente para tolerância a falhas e desempenho.

**Público-alvo**

Para implementar esse padrão, recomendamos que você esteja familiarizado com o seguinte:
+ HashiCorp Conceitos do Terraform e práticas de infraestrutura como código (IaC)
+ Serviços da AWS, especialmente o Amazon EKS
+ Fundamentos do Kubernetes, incluindo operadores e StatefulSets configurações de serviços
+ Bancos de dados SQL distribuídos
+ Conceitos de segurança, como gerenciamento de certificados TLS.
+ DevOps práticas, CI/CD fluxos de trabalho e automação da infraestrutura

## Pré-requisitos e limitações
<a name="deploy-cockroachdb-on-eks-using-terraform-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Permissões para implantar recursos em um cluster Amazon EKS
+ Um cluster Amazon EKS versão v1.23 ou posterior, com nós rotulados `node=cockroachdb`
+ [Driver Amazon Elastic Block Store Container Storage Interface (CSI)](https://github.com/kubernetes-sigs/aws-ebs-csi-driver) versão 1.19.0 ou posterior, instalado no cluster Amazon EKS
+ [Terraform CLI versão 1.0.0 ou posterior, instalada](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [kubectl, instalado](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ Git, [instalado](https://git-scm.com/install/)
+ AWS Command Line Interface [(AWS CLI) versão 2.9.18 ou posterior, [instalada](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**Limitações**
+ O operador CockroachDB Kubernetes não oferece suporte a vários clusters Kubernetes para implantações em várias regiões. [Para obter mais limitações, consulte [Orchestrate CockroachDB em vários clusters Kubernetes (documentação do CockroachDB) e CockroachDB Kubernetes](https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html#eks) Operator ().](https://github.com/cockroachdb/cockroach-operator) GitHub
+ A remoção automática de declarações de volume persistentes (PVCs) está atualmente desativada por padrão. Isso significa que depois de descomissionar e remover um nó, o operador não removerá o volume persistente que foi montado em seu pod. Para obter mais informações, consulte [Poda automática de PVC](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html#automatic-pvc-pruning) na documentação do CockroachDB.

**Versões do produto**
+ CockroachDB versão 22.2.2

## Arquitetura
<a name="deploy-cockroachdb-on-eks-using-terraform-architecture"></a>

**Arquitetura de destino**

O diagrama a seguir mostra uma implantação altamente disponível do CockroachDB em três zonas de AWS disponibilidade em uma nuvem privada virtual (VPC). Os pods do CockroachDB são gerenciados por meio do Amazon EKS. A arquitetura ilustra como os usuários acessam o banco de dados por meio de um Network Load Balancer, que distribui o tráfego para os pods do CockroachDB. Os pods são executados em instâncias do Amazon Elastic Compute Cloud EC2 (Amazon) em cada zona de disponibilidade, o que fornece resiliência e tolerância a falhas.

![Uma implantação altamente disponível do CockroachDB em três zonas de disponibilidade da AWS em uma VPC.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/images/4b163abf-6fdc-4310-840c-bda621ab25dd.png)


**Recursos criados**

A implantação do módulo Terraform usado nesse padrão cria os seguintes recursos:

1. **Network Load Balancer** — Esse recurso serve como ponto de entrada para solicitações de clientes e distribui uniformemente o tráfego pelas instâncias do CockroachDB.

1. **CockroachDB StatefulSet** — StatefulSet Define o estado desejado da implantação do CockroachDB no cluster Amazon EKS. Ele gerencia a implantação, o dimensionamento e as atualizações ordenadas dos pods do CockroachDB.

1. Pods do **CockroachDB — Esses pods** são instâncias do CockroachDB em execução como contêineres nos pods do Kubernetes. Esses pods armazenam e gerenciam os dados em todo o cluster distribuído.

1. Banco de dados **CockroachDB — Esse é o banco** de dados distribuído gerenciado pelo CockroachDB, abrangendo vários pods. Ele replica dados para alta disponibilidade, tolerância a falhas e desempenho.

## Ferramentas
<a name="deploy-cockroachdb-on-eks-using-terraform-tools"></a>

**Serviços da AWS**
+ [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.
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.

**Outras ferramentas**
+ O [HashiCorp Terraform](https://www.terraform.io/docs) é uma ferramenta de infraestrutura como código (IaC) que ajuda a provisionar e gerenciar recursos e infraestrutura de nuvem por meio de código.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/) é uma interface de linha de comando que ajuda você na execução de comandos em clusters do Kubernetes.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [Implantar um CockroachDB no Amazon EKS usando](https://github.com/aws-samples/crdb-cluster-eks-terraform) o repositório Terraform. O repositório de código contém os seguintes arquivos e pastas para o Terraform:
+ `modules`pasta — Esta pasta contém o módulo Terraform para CockroachDB
+ `main`pasta — Essa pasta contém o módulo raiz que chama o módulo filho CockroachDB para criar o cluster de banco de dados CockroachDB.

## Práticas recomendadas
<a name="deploy-cockroachdb-on-eks-using-terraform-best-practices"></a>
+ Não reduza para menos de três nós. Isso é considerado um antipadrão no CockroachDB e pode causar erros. Para obter mais informações, consulte [Cluster Scaling na documentação](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html) do CockroachDB.
+ Implemente o escalonamento automático do Amazon EKS usando o Karpernter ou o Cluster Autoscaler. Isso permite que o cluster CockroachDB seja escalado horizontalmente e que novos nós sejam escalados automaticamente. Para obter mais informações, consulte [Escalar a computação em cluster com o Karpenter e o Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) na documentação do Amazon EKS.
**nota**  
Devido à regra de agendamento do `podAntiAffinity` Kubernetes, somente um pod do CockroachDB pode ser programado em um nó do Amazon EKS.
+ Para obter as melhores práticas de segurança do Amazon EKS, consulte [Melhores práticas de segurança](https://docs.aws.amazon.com/eks/latest/best-practices/security.html) na documentação do Amazon EKS.
+ Para obter as melhores práticas de desempenho do SQL para o CockroachDB, consulte as [melhores práticas de desempenho do SQL](https://www.cockroachlabs.com/docs/stable/performance-best-practices-overview.html) na documentação do CockroachDB.
+ Para obter mais informações sobre como configurar um back-end remoto do Amazon Simple Storage Service (Amazon S3) para o arquivo de estado do Terraform, consulte Amazon [S3](https://developer.hashicorp.com/terraform/language/backend/s3) na documentação do Terraform.

## Épicos
<a name="deploy-cockroachdb-on-eks-using-terraform-epics"></a>

### Configurar o ambiente
<a name="set-up-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório de códigos. | Digite o comando a seguir para clonar o repositório:<pre>git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git</pre> | DevOps engenheiro, Git | 
| Atualize as variáveis do Terraform. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps engenheiro, Terraform | 

### Implantar os recursos
<a name="deploy-the-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implantar a infraestrutura. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps engenheiro, Terraform | 

### Verificar a implantação
<a name="verify-the-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique a criação do recurso. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps engenheiro | 
| (Opcional) Aumentar ou diminuir a escala. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps engenheiro, Terraform | 

### Limpeza
<a name="clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua a infraestrutura. | A escalabilidade de nós para `0` reduzirá os custos de computação. No entanto, você ainda incorrerá em cobranças pelos volumes persistentes do Amazon EBS que foram criados por esse módulo. Para eliminar os custos de armazenamento, siga estas etapas para excluir todos os volumes:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | Terraform | 

## Solução de problemas
<a name="deploy-cockroachdb-on-eks-using-terraform-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Erro ao validar as credenciais do provedor | Ao executar o Terraform `apply` ou o `destroy` comando, você pode encontrar o seguinte erro:<br />`Error: configuring Terraform AWS Provider: error validating provider  credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.`<br />Esse erro é causado pela expiração do token de segurança das credenciais usadas na configuração da sua máquina local. Para obter instruções sobre como resolver o erro, consulte [Definir e visualizar as configurações](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) na AWS CLI documentação. | 
| Pods do CockroachDB em estado pendente | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | 

## Recursos relacionados
<a name="deploy-cockroachdb-on-eks-using-terraform-resources"></a>
+ [Implante o CockroachDB em um único cluster Kubernetes](https://www.cockroachlabs.com/docs/dev/deploy-cockroachdb-with-kubernetes.html) (documentação do CockroachDB)
+ [Orquestre o CockroachDB em vários clusters Kubernetes (documentação do CockroachDB](https://www.cockroachlabs.com/docs/dev/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html))
+ [AWS Provedor](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentação do Terraform)

## Anexos
<a name="attachments-e22d81ab-b85c-4709-8579-4c9cdb4afdb6"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: [ attachment.zip](samples/p-attach/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/attachments/attachment.zip)