Implementa un cluster CockroachDB in Amazon EKS utilizzando Terraform - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Implementa un cluster CockroachDB in Amazon EKS utilizzando Terraform

Sandip Gangapadhyay e Kalyan Senthilnathan, Amazon Web Services

Riepilogo

Questo modello fornisce un modulo HashiCorp Terraform per la distribuzione di un cluster CockroachDB multinodo su Amazon Elastic Kubernetes Service (Amazon EKS) utilizzando l'operatore CockroachDB. CockroachDB è un database SQL distribuito che fornisce sharding orizzontale automatico, alta disponibilità e prestazioni coerenti in cluster distribuiti geograficamente. Questo modello utilizza Amazon EKS come piattaforma Kubernetes gestita e implementa cert-manager per comunicazioni tra nodi protette da TLS. Utilizza anche un Network Load Balancer per la distribuzione del traffico e crea CockroachDB StatefulSetscon pod che replicano automaticamente i dati per la tolleranza ai guasti e le prestazioni.

Destinatari

Per implementare questo modello, ti consigliamo di conoscere quanto segue:

  • HashiCorp Concetti e pratiche di Terraform Infrastructure as Code (IaC)

  • Servizi AWS, in particolare Amazon EKS

  • Nozioni di base su Kubernetes, tra cui operatori e configurazioni dei StatefulSets servizi

  • Database SQL distribuiti

  • Concetti di sicurezza, come la gestione dei certificati TLS.

  • DevOps pratiche, CI/CD flussi di lavoro e automazione dell'infrastruttura

Prerequisiti e limitazioni

Prerequisiti

Limitazioni

Versioni del prodotto

  • CockroachDB versione 22.2.2

Architecture

Architettura Target

Il diagramma seguente mostra un'implementazione di CockroachDB ad alta disponibilità in tre zone di AWS disponibilità all'interno di un cloud privato virtuale (VPC). I pod CockroachDB sono gestiti tramite Amazon EKS. L'architettura illustra come gli utenti accedono al database tramite un Network Load Balancer, che distribuisce il traffico ai pod CockroachDB. I pod vengono eseguiti su istanze Amazon Elastic Compute Cloud EC2 (Amazon) in ogni zona di disponibilità, il che offre resilienza e tolleranza agli errori.

Una distribuzione CockroachDB ad alta disponibilità su tre zone di disponibilità AWS all'interno di un VPC.

Risorse create

L'implementazione del modulo Terraform utilizzato in questo modello crea le seguenti risorse:

  1. Network Load Balancer: questa risorsa funge da punto di ingresso per le richieste dei client e distribuisce uniformemente il traffico tra le istanze CockroachDB.

  2. CockroachDB StatefulSet: StatefulSet definisce lo stato desiderato della distribuzione di CockroachDB all'interno del cluster Amazon EKS. Gestisce la distribuzione ordinata, il ridimensionamento e gli aggiornamenti dei pod CockroachDB.

  3. Pods CockroachDB: questi pod sono istanze di CockroachDB in esecuzione come contenitori all'interno dei pod Kubernetes. Questi pod archiviano e gestiscono i dati in tutto il cluster distribuito.

  4. Database CockroachDB: questo è il database distribuito gestito da CockroachDB, che si estende su più pod. Replica i dati per garantire disponibilità, tolleranza agli errori e prestazioni elevate.

Tools (Strumenti)

Servizi AWS

Altri strumenti

  • HashiCorp Terraform è uno strumento Infrastructure as Code (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.

  • kubectl è un'interfaccia a riga di comando che ti aiuta a eseguire comandi sui cluster Kubernetes.

Archivio di codice

Il codice per questo pattern è disponibile nel cluster GitHub Deploy a CockroachDB in Amazon EKS utilizzando il repository Terraform. L'archivio di codice contiene i seguenti file e cartelle per Terraform:

  • modulesfolder — Questa cartella contiene il modulo Terraform per CockroachDB

  • mainfolder: questa cartella contiene il modulo root che chiama il modulo secondario CockroachDB per creare il cluster di database CockroachDB.

Best practice

  • Non ridimensionare a meno di tre nodi. Questo è considerato un anti-pattern su CockroachDB e può causare errori. Per ulteriori informazioni, consulta Cluster Scaling nella documentazione di CockroachDB.

  • Implementa la scalabilità automatica di Amazon EKS utilizzando Karpernter o Cluster Autoscaler. Ciò consente al cluster CockroachDB di scalare orizzontalmente e di aggiungere nuovi nodi automaticamente. Per ulteriori informazioni, consulta Scale cluster compute with Karpenter e Cluster Autoscaler nella documentazione di Amazon EKS.

    Nota

    Grazie alla regola di pianificazione podAntiAffinity Kubernetes, è possibile pianificare un solo pod CockroachDB in un nodo Amazon EKS.

  • Per le best practice di sicurezza di Amazon EKS, consulta Best Practices for Security nella documentazione di Amazon EKS.

  • Per le best practice relative alle prestazioni SQL per CockroachDB, consulta SQL Performance Best Practices nella documentazione di CockroachDB.

  • Per ulteriori informazioni sulla configurazione di un backend remoto Amazon Simple Storage Service (Amazon S3) per il file di stato Terraform, consulta Amazon S3 nella documentazione di Terraform.

Epiche

OperazioneDescriptionCompetenze richieste

Clona il repository del codice.

Inserisci il seguente comando per clonare il repository:

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

Aggiorna le variabili Terraform.

  1. Inserisci il seguente comando per navigare nella cartella principale del repository clonato:

    cd crdb-cluster-eks-terraform/main
  2. Apri il file variable.tf.

  3. Configura il valore predefinito per le seguenti variabili:

    • region— Inserire l'obiettivo Regione AWS

    • eks_cluster_name— Inserisci il nome del cluster Amazon EKS di destinazione

    • number_of_nodes— Inserisci il numero di nodi da implementare

  4. Salvate e chiudete il file Variable.tf.

DevOps ingegnere, Terraform
OperazioneDescriptionCompetenze richieste

Implementa l'infrastruttura.

  1. Inserisci il seguente comando per inizializzare la distribuzione di Terraform:

    terraform init
  2. Immettere il seguente comando per generare un piano di esecuzione:

    terraform plan
  3. Rivedi il piano e convalida le risorse e i componenti dell'infrastruttura che verranno creati.

  4. Immettere il seguente comando per distribuire l'infrastruttura:

    terraform apply
  5. Quando richiesto, inserisci yes per confermare la distribuzione.

  6. Attendi il completamento della distribuzione.

DevOps ingegnere, Terraform
OperazioneDescriptionCompetenze richieste

Verifica la creazione di risorse.

  1. Immetti il seguente comando per impostare il contesto Amazon EKS utilizzando AWS CLI:

    aws eks update-kubeconfig —name <eks_cluster_name>
  2. Inserisci il seguente comando per verificare il numero di pod che utilizzano CockroachDB:

    kubectl get pods -n <namespace>

    Di seguito è riportato un output di esempio.

    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. Verifica che il numero di pod corrisponda al valore definito nel file variable.tf.

DevOps ingegnere

(Facoltativo) Scalabilità verso l'alto o verso il basso.

  1. Nel file variable.tf, aumentate o diminuite il numero di nodi, quindi salvate il file.

  2. Ripeti i passaggi per implementare l'infrastruttura tramite Terraform. Terraform aggiunge o rimuove i pod.

  3. Ripeti i passaggi per verificare il numero di pod che utilizzano Cockroach DB. Ad esempio, se hai aumentato il numero di nodi da tre a quattro, ora dovresti vedere quattro pod in esecuzione.

DevOps ingegnere, Terraform
OperazioneDescriptionCompetenze richieste

Eliminare l'infrastruttura.

La scalabilità dei nodi 0 ridurrà i costi di elaborazione. Tuttavia, continueranno a essere addebitati costi per i volumi Amazon EBS persistenti creati da questo modulo. Per eliminare i costi di archiviazione, segui questi passaggi per eliminare tutti i volumi:

  1. Inserisci il seguente comando per eliminare l'infrastruttura:

    terraform destroy
  2. Quando richiesto, inserisci yes per confermare.

Terraform

risoluzione dei problemi

ProblemaSoluzione

Errore durante la convalida delle credenziali del provider

Quando esegui il destroy comando apply o il comando Terraform, potresti riscontrare il seguente errore:

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.

Questo errore è causato dalla scadenza del token di sicurezza per le credenziali utilizzate nella configurazione del computer locale. Per istruzioni su come risolvere l'errore, consulta Impostare e visualizzare le impostazioni di configurazione nella AWS CLI documentazione.

I pod di CockroachDB sono in sospeso

  1. Grazie alla regola di pianificazione podAntiAffinity Kubernetes, è possibile pianificare un solo pod CockroachDB in un nodo Amazon EKS. Se il numero di pod CockroachDB supera il numero di nodi Amazon EKS disponibili, i pod CockroachDB potrebbero essere in sospeso. In tal caso, devi implementare Cluster Autoscaler o Karpenter in modo che il nodo Amazon EKS si ridimensioni automaticamente. Per ulteriori informazioni, consulta Scale cluster compute with Karpenter e Cluster Autoscaler.

  2. Verifica se i nodi di lavoro Kubernetes hanno etichette inserendo il seguente comando: node=cockroachdb

    kubectl get nodes --show-labels

    Se non lo sono, devi assicurarti che tutti i nodi di lavoro siano etichettati correttamente. Per ulteriori informazioni, consulta Modificare la configurazione di un gruppo di nodi nella documentazione di Amazon EKS.

Risorse correlate

Allegati

Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip