

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
<a name="deploy-cockroachdb-on-eks-using-terraform"></a>

*Sandip Gangapadhyay y Kalyan Senthilnathan, Amazon Web Services*

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

[Este patrón proporciona un módulo HashiCorp Terraform para implementar un clúster [CockroachDB](https://www.cockroachlabs.com/docs/stable/) de varios nodos en Amazon Elastic Kubernetes Service (Amazon EKS) mediante el operador CockroachDB.](https://www.cockroachlabs.com/docs/v25.4/cockroachdb-operator-overview) 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](https://cert-manager.io/docs/) para la comunicación de nodos segura por TLS. También utiliza un [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) para la distribución del tráfico y crea CockroachDB [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)con 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
<a name="deploy-cockroachdb-on-eks-using-terraform-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Permisos para implementar recursos en un clúster de Amazon EKS
+ Un clúster de Amazon EKS versión 1.23 o posterior, con los nodos etiquetados `node=cockroachdb`
+ [Controlador de la interfaz de almacenamiento de contenedores (CSI) de Amazon Elastic Block Store](https://github.com/kubernetes-sigs/aws-ebs-csi-driver), versión 1.19.0 o posterior, instalado en el clúster Amazon EKS
+ [Terraform CLI versión 1.0.0 o 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 [https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)

**Limitaciones**
+ El operador Kubernetes de CockroachDB no admite varios clústeres de Kubernetes para despliegues en varias regiones. [Para más limitaciones, consulte Cómo organizar CockroachDB en varios clústeres de Kubernetes (documentación de CockroachDB) [y CockroachDB Kubernetes Operator](https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html#eks) ().](https://github.com/cockroachdb/cockroach-operator) GitHub
+ Actualmente, la eliminación automática PVCs de las notificaciones por volumen persistentes () está deshabilitada de forma predeterminada. Esto significa que, tras desmantelar y retirar un nodo, el operador no eliminará el volumen persistente que estaba montado en su módulo. Para obtener más información, consulte Eliminación [automática de PVC en la documentación](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html#automatic-pvc-pruning) de CockroachDB.

**Versiones de producto**
+ CockroachDB versión 22.2.2

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

**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.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/images/4b163abf-6fdc-4310-840c-bda621ab25dd.png)


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

1. **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.

1. **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.

1. **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)
<a name="deploy-cockroachdb-on-eks-using-terraform-tools"></a>

**Servicios de AWS**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le ayuda a interactuar Servicios de AWS mediante comandos en su shell de línea de comandos.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.

**Otras herramientas**
+ [HashiCorp Terraform](https://www.terraform.io/docs) 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](https://kubernetes.io/docs/tasks/tools/): 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](https://github.com/aws-samples/crdb-cluster-eks-terraform) Terraform. El repositorio de código contiene los siguientes archivos y carpetas para Terraform:
+ `modules`carpeta: esta carpeta contiene el módulo Terraform para CockroachDB
+ `main`carpeta: 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
<a name="deploy-cockroachdb-on-eks-using-terraform-best-practices"></a>
+ 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](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html) 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](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) 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](https://docs.aws.amazon.com/eks/latest/best-practices/security.html) 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](https://www.cockroachlabs.com/docs/stable/performance-best-practices-overview.html) 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](https://developer.hashicorp.com/terraform/language/backend/s3) en la documentación de Terraform.

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

### Configure su entorno
<a name="set-up-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio de código. | Introduzca el siguiente comando para clonar el repositorio:<pre>git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git</pre> | DevOps ingeniero, Git | 
| Actualice las variables de Terraform. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingeniero, Terraform | 

### Implementación de recursos
<a name="deploy-the-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la infraestructura. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingeniero, Terraform | 

### Verifique la implementación
<a name="verify-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verificar la creación de recursos. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingeniero | 
| (Opcional) Amplíe o reduzca la escala. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingeniero, Terraform | 

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


| Tarea | Descripción | Habilidades 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:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | Terraform | 

## Resolución de problemas
<a name="deploy-cockroachdb-on-eks-using-terraform-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Error al validar las credenciales del proveedor | Al ejecutar Terraform `apply` o el `destroy` comando, es posible que aparezca el siguiente error:<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 />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](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) en la AWS CLI documentación. | 
| Los pods de CockroachDB están en estado pendiente | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | 

## Recursos relacionados
<a name="deploy-cockroachdb-on-eks-using-terraform-resources"></a>
+ [Implemente CockroachDB en un único clúster de Kubernetes](https://www.cockroachlabs.com/docs/dev/deploy-cockroachdb-with-kubernetes.html) (documentación de CockroachDB)
+ [Organice CockroachDB](https://www.cockroachlabs.com/docs/dev/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html) en varios clústeres de Kubernetes (documentación de CockroachDB)
+ [AWS Proveedor](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentación de Terraform)

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

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/attachments/attachment.zip)