Implemente um cluster CockroachDB no Amazon EKS usando o Terraform - Recomendações da AWS

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

Sandip Gangapadhyay e Kalyan Senthilnathan, da Amazon Web Services

Resumo

Esse padrão fornece um módulo HashiCorp Terraform para implantar um cluster CockroachDB de vários nós no Amazon Elastic Kubernetes Service (Amazon EKS) usando o operador CockroachDB. 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 para comunicação de nós protegida por TLS. Ele também usa um Network Load Balancer para distribuição de tráfego e cria o CockroachDB StatefulSetscom 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

Pré-requisitos

Limitações

Versões do produto

  • CockroachDB versão 22.2.2

Arquitetura

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.

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.

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

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

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

Serviços da AWS

Outras ferramentas

  • O HashiCorp Terraform é 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 é 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 o repositório Terraform. O repositório de código contém os seguintes arquivos e pastas para o Terraform:

  • modulespasta — Esta pasta contém o módulo Terraform para CockroachDB

  • mainpasta — 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

  • 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 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 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 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 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 na documentação do Terraform.

Épicos

TarefaDescriptionHabilidades necessárias

Clone o repositório de códigos.

Digite o comando a seguir para clonar o repositório:

git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git
DevOps engenheiro, Git

Atualize as variáveis do Terraform.

  1. Digite o comando a seguir para navegar até a pasta principal no repositório clonado:

    cd crdb-cluster-eks-terraform/main
  2. Abra o arquivo variável.tf.

  3. Configure o valor padrão para as seguintes variáveis:

    • region— Insira o alvo Região da AWS

    • eks_cluster_name— Insira o nome do cluster Amazon EKS de destino

    • number_of_nodes— Insira o número de nós a serem implantados

  4. Salve e feche o arquivo variável.tf.

DevOps engenheiro, Terraform
TarefaDescriptionHabilidades necessárias

Implantar a infraestrutura.

  1. Insira o comando a seguir para inicializar a implantação do Terraform:

    terraform init
  2. Insira o seguinte comando para gerar um plano de execução:

    terraform plan
  3. Revise o plano e valide os recursos e os componentes da infraestrutura que serão criados.

  4. Insira o seguinte comando para implantar a infraestrutura:

    terraform apply
  5. Quando solicitado, insira sim para confirmar a implantação.

  6. Espere até que a implantação seja concluída.

DevOps engenheiro, Terraform
TarefaDescriptionHabilidades necessárias

Verifique a criação do recurso.

  1. Insira o seguinte comando para definir o contexto do Amazon EKS usando o AWS CLI:

    aws eks update-kubeconfig —name <eks_cluster_name>
  2. Digite o comando a seguir para verificar o número de pods que estão usando o CockroachDB:

    kubectl get pods -n <namespace>

    Este é um exemplo de saída.

    NAME READY STATUS RESTARTS AGE cockroach-operator-655fbf7847-zn9v8 1/1 Running 0 30m cockroachdb-0 1/1 Running 0 24m cockroachdb-1 1/1 Running 0 24m cockroachdb-2 1/1 Running 0 24m
  3. Verifique se o número de pods corresponde ao valor definido no arquivo variável.tf.

DevOps engenheiro

(Opcional) Aumentar ou diminuir a escala.

  1. No arquivo variável.tf, aumente ou diminua o número de nós e salve o arquivo.

  2. Repita as etapas para implantar a infraestrutura por meio do Terraform. O Terraform adiciona ou remove cápsulas.

  3. Repita as etapas para verificar o número de pods que estão usando o Cockroach DB. Por exemplo, se você aumentou o número de nós de três para quatro, agora deverá ver quatro pods em execução.

DevOps engenheiro, Terraform
TarefaDescriptionHabilidades 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:

  1. Insira o seguinte comando para excluir a infraestrutura:

    terraform destroy
  2. Quando solicitado, digite sim para confirmar.

Terraform

Solução de problemas

ProblemaSolução

Erro ao validar as credenciais do provedor

Ao executar o Terraform apply ou o destroy comando, você pode encontrar o seguinte erro:

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.

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 na AWS CLI documentação.

Pods do CockroachDB em estado pendente

  1. Devido à regra de agendamento do podAntiAffinity Kubernetes, somente um pod do CockroachDB pode ser programado em um nó do Amazon EKS. Se o número de pods do CockroachDB exceder o número de nós disponíveis do Amazon EKS, os pods do CockroachDB poderão estar em estado pendente. Nesse caso, você precisa implementar o Cluster Autoscaler ou o Karpenter para que o nó do Amazon EKS seja escalado automaticamente. Para obter mais informações, consulte Dimensionar a computação do cluster com o Karpenter e o Cluster Autoscaler.

  2. Verifique se os nós de trabalho do Kubernetes têm node=cockroachdb rótulos digitando o seguinte comando:

    kubectl get nodes --show-labels

    Se não estiverem, você precisa garantir que todos os nós de trabalho estejam rotulados corretamente. Para obter mais informações, consulte Editar uma configuração de grupo de nós na documentação do Amazon EKS.

Recursos relacionados

Anexos

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: attachment.zip