Implemente un clúster de CockroachDB en Amazon EKS mediante Terraform - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Implemente un clúster de CockroachDB en Amazon EKS mediante Terraform

Sandip Gangapadhyay y Kalyan Senthilnathan, Amazon Web Services

Resumen

Este patrón proporciona un módulo HashiCorp Terraform para implementar un clúster CockroachDB de varios nodos en Amazon Elastic Kubernetes Service (Amazon EKS) mediante el operador CockroachDB. CockroachDB es una base de datos SQL distribuida que proporciona fragmentación horizontal automática, alta disponibilidad y un rendimiento uniforme en clústeres distribuidos geográficamente. Este patrón usa Amazon EKS como plataforma de Kubernetes administrada e implementa cert-manager para la comunicación de nodos segura por TLS. También utiliza un Network Load Balancer para la distribución del tráfico y crea CockroachDB StatefulSetscon módulos que replican automáticamente los datos para garantizar la tolerancia a los errores y el rendimiento.

Destinatarios previstos

Para implementar este patrón, le recomendamos que se familiarice con lo siguiente:

  • HashiCorp Conceptos y prácticas de infraestructura como código (IaC) de Terraform

  • Servicios de AWS, en particular Amazon EKS

  • Los aspectos básicos de Kubernetes StatefulSets, incluidos los operadores y las configuraciones de los servicios

  • Bases de datos SQL distribuidas

  • Conceptos de seguridad, como la gestión de certificados TLS.

  • DevOps prácticas, CI/CD flujos de trabajo y automatización de infraestructuras

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

Versiones de producto

  • CockroachDB versión 22.2.2

Arquitectura

Arquitectura de destino

El siguiente diagrama muestra una implementación de CockroachDB de alta disponibilidad en tres zonas de AWS disponibilidad dentro de una nube privada virtual (VPC). Los pods CockroachDB se administran a través de Amazon EKS. La arquitectura ilustra cómo los usuarios acceden a la base de datos a través de un Network Load Balancer, que distribuye el tráfico a los pods de CockroachDB. Los pods se ejecutan en instancias de Amazon Elastic Compute Cloud (Amazon EC2) en cada zona de disponibilidad, lo que proporciona resiliencia y tolerancia a errores.

Una implementación de CockroachDB de alta disponibilidad en tres zonas de disponibilidad de AWS dentro de una VPC.

Recursos creados

Al implementar el módulo Terraform utilizado en este patrón, se crean los siguientes recursos:

  1. Network Load Balancer: este recurso sirve como punto de entrada para las solicitudes de los clientes y distribuye el tráfico de manera uniforme entre las instancias de CockroachDB.

  2. CockroachDB StatefulSet: StatefulSet define el estado deseado de la implementación de CockroachDB dentro del clúster de Amazon EKS. Administra el despliegue ordenado, el escalado y las actualizaciones de los pods de CockroachDB.

  3. Módulos CockroachDB: estos pods son instancias de CockroachDB que se ejecutan como contenedores dentro de los pods de Kubernetes. Estos pods almacenan y administran los datos en el clúster distribuido.

  4. Base de datos CockroachDB: se trata de la base de datos distribuida que administra CockroachDB y que abarca varios módulos. Replica los datos para garantizar una alta disponibilidad, tolerancia a errores y rendimiento.

Tools (Herramientas)

Servicios de AWS

Otras herramientas

  • HashiCorp Terraform es una herramienta de infraestructura como código (IaC) que facilita usar el código para aprovisionar y administrar los recursos y la infraestructura en la nube.

  • kubectl: una interfaz de la línea de comandos que le ayuda en la ejecución de comandos en clústeres de Kubernetes.

Repositorio de código

El código de este patrón está disponible en el repositorio GitHub Deploy a CockroachDB en Amazon EKS mediante Terraform. El repositorio de código contiene los siguientes archivos y carpetas para Terraform:

  • modulescarpeta: esta carpeta contiene el módulo Terraform para CockroachDB

  • maincarpeta: esta carpeta contiene el módulo raíz que llama al módulo secundario de CockroachDB para crear el clúster de base de datos de CockroachDB.

Prácticas recomendadas

  • No reduzca la escala a menos de tres nodos. Esto se considera un antipatrón en CockroachDB y puede provocar errores. Para obtener más información, consulte el escalado de clústeres en la documentación de CockroachDB.

  • Implemente el escalado automático de Amazon EKS mediante Karpernter o Cluster Autoscaler. Esto permite que el clúster de CockroachDB se escale horizontalmente y que los nuevos nodos se creen automáticamente. Para más información, consulte Escalado de computación en clústeres´con Karpenter y Cluster Autoscaler en la documentación de Amazon EKS.

    nota

    Debido a la regla de programación de podAntiAffinity Kubernetes, solo se puede programar un pod de CockroachDB en un nodo de Amazon EKS.

  • Para conocer las prácticas recomendadas de seguridad de Amazon EKS, consulte Prácticas recomendadas de seguridad en la documentación de Amazon EKS.

  • Para conocer las prácticas recomendadas de rendimiento de SQL para CockroachDB, consulte las prácticas recomendadas de rendimiento de SQL en la documentación de CockroachDB.

  • Para obtener más información sobre cómo configurar un backend remoto de Amazon Simple Storage Service (Amazon S3) para el archivo de estado de Terraform, consulte Amazon S3 en la documentación de Terraform.

Epics

TareaDescripciónHabilidades requeridas

Clone el repositorio de código.

Introduzca el siguiente comando para clonar el repositorio:

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

Actualice las variables de Terraform.

  1. Ingresa el siguiente comando para navegar a la carpeta principal del repositorio clonado:

    cd crdb-cluster-eks-terraform/main
  2. Abre el archivo variable.tf.

  3. Configure el valor predeterminado para las siguientes variables:

    • region— Introduzca el objetivo Región de AWS

    • eks_cluster_name— Introduzca el nombre del clúster Amazon EKS de destino

    • number_of_nodes— Introduzca el número de nodos que se van a implementar

  4. Guarde y cierre el archivo variable.tf.

DevOps ingeniero, Terraform
TareaDescripciónHabilidades requeridas

Implemente la infraestructura.

  1. Ingresa el siguiente comando para inicializar el despliegue de Terraform:

    terraform init
  2. Introduzca el comando siguiente para generar un plan de ejecución:

    terraform plan
  3. Revise el plan y valide los recursos y los componentes de infraestructura que se van a crear.

  4. Introduzca el siguiente comando para implementar la infraestructura:

    terraform apply
  5. Cuando se le solicite, introduzca para confirmar la implementación.

  6. Espere hasta que se complete la implementación.

DevOps ingeniero, Terraform
TareaDescripciónHabilidades requeridas

Verificar la creación de recursos.

  1. Introduzca el siguiente comando para configurar el contexto de Amazon EKS mediante AWS CLI:

    aws eks update-kubeconfig —name <eks_cluster_name>
  2. Introduzca el siguiente comando para verificar el número de pods que utilizan CockroachDB:

    kubectl get pods -n <namespace>

    A continuación, se muestra un ejemplo de la salida.

    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. Compruebe que la cantidad de pods coincida con el valor que definió en el archivo variable.tf.

DevOps ingeniero

(Opcional) Amplíe o reduzca la escala.

  1. En el archivo variable.tf, aumente o disminuya el número de nodos y, a continuación, guarde el archivo.

  2. Repita los pasos para implementar la infraestructura a través de Terraform. Terraform agrega o elimina cápsulas.

  3. Repita los pasos para verificar la cantidad de cápsulas que utilizan Cockroach DB. Por ejemplo, si aumentaste el número de nodos de tres a cuatro, ahora deberías ver cuatro pods en ejecución.

DevOps ingeniero, Terraform
TareaDescripciónHabilidades requeridas

Configurar la infraestructura.

Escalar los nodos para 0 reducir los costos de cómputo. Sin embargo, seguirá incurriendo en cargos por los volúmenes persistentes de Amazon EBS que creó este módulo. Para eliminar los costes de almacenamiento, siga estos pasos para eliminar todos los volúmenes:

  1. Introduzca el siguiente comando para eliminar la infraestructura:

    terraform destroy
  2. Cuando se le solicite, introduzca para confirmar.

Terraform

Resolución de problemas

ProblemaSolución

Error al validar las credenciales del proveedor

Al ejecutar Terraform apply o el destroy comando, es posible que aparezca el siguiente error:

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.

Este error se debe a la caducidad del token de seguridad de las credenciales usadas en la configuración de la máquina local. Para obtener instrucciones sobre cómo resolver el error, consulte Establecer y ver los ajustes de configuración en la AWS CLI documentación.

Los pods de CockroachDB están en estado pendiente

  1. Debido a la regla de programación de podAntiAffinity Kubernetes, solo se puede programar un pod de CockroachDB en un nodo de Amazon EKS. Si el número de pods de CockroachDB supera el número de nodos de Amazon EKS disponibles, es posible que los pods de CockroachDB estén en estado pendiente. En ese caso, debe implementar Cluster Autoscaler o Karpenter para que el nodo de Amazon EKS se escale automáticamente. Para obtener más información, consulte Escalar la computación en clústeres con Karpenter y Cluster Autoscaler.

  2. Para comprobar si los nodos de trabajo de Kubernetes tienen node=cockroachdb etiquetas, introduce el siguiente comando:

    kubectl get nodes --show-labels

    Si no lo están, asegúrate de que todos los nodos de trabajo estén correctamente etiquetados. Para obtener más información, consulte Editar la configuración de un grupo de nodos en la documentación de Amazon EKS.

Recursos relacionados

Conexiones

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: attachment.zip