Stellen Sie mithilfe von Terraform einen CockroachDB-Cluster in Amazon EKS bereit - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Stellen Sie mithilfe von Terraform einen CockroachDB-Cluster in Amazon EKS bereit

Sandip Gangapadhyay und Kalyan Senthilnathan, Amazon Web Services

Zusammenfassung

Dieses Muster bietet ein HashiCorp Terraform-Modul für die Bereitstellung eines CockroachDB-Clusters mit mehreren Knoten auf Amazon Elastic Kubernetes Service (Amazon EKS) mithilfe des CockroachDB-Operators. CockroachDB ist eine verteilte SQL-Datenbank, die automatisches horizontales Sharding, hohe Verfügbarkeit und konsistente Leistung über geografisch verteilte Cluster hinweg bietet. Dieses Muster verwendet Amazon EKS als verwaltete Kubernetes-Plattform und implementiert Cert-Manager für TLS-gesicherte Knotenkommunikation. Es verwendet auch einen Network Load Balancer für die Verteilung des Datenverkehrs und erstellt CockroachDB StatefulSetsmit Pods, die Daten aus Gründen der Fehlertoleranz und Leistung automatisch replizieren.

Zielpublikum

Um dieses Muster zu implementieren, empfehlen wir, dass Sie mit den folgenden Informationen vertraut sind:

  • HashiCorp Terraform-Konzepte und IaC-Praktiken (Infrastructure-as-Code)

  • AWS-Services, insbesondere Amazon EKS

  • Grundlagen von Kubernetes StatefulSets, einschließlich Betreiber und Servicekonfigurationen

  • Verteilte SQL-Datenbanken

  • Sicherheitskonzepte wie die Verwaltung von TLS-Zertifikaten.

  • DevOps Praktiken, CI/CD Workflows und Infrastrukturautomatisierung

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

Produktversionen

  • CockroachDB Version 22.2.2

Architektur

Zielarchitektur

Das folgende Diagramm zeigt eine hochverfügbare CockroachDB-Bereitstellung in drei AWS Availability Zones innerhalb einer Virtual Private Cloud (VPC). Die CockroachDB-Pods werden über Amazon EKS verwaltet. Die Architektur veranschaulicht, wie Benutzer über einen Network Load Balancer auf die Datenbank zugreifen, der den Datenverkehr auf die CockroachDB-Pods verteilt. Die Pods werden auf Amazon Elastic Compute Cloud (Amazon EC2) -Instances in jeder Availability Zone ausgeführt, was Stabilität und Fehlertoleranz bietet.

Eine hochverfügbare CockroachDB-Bereitstellung in drei AWS-Verfügbarkeitszonen innerhalb einer VPC.

Ressourcen erstellt

Durch die Bereitstellung des in diesem Muster verwendeten Terraform-Moduls werden die folgenden Ressourcen erstellt:

  1. Network Load Balancer — Diese Ressource dient als Einstiegspunkt für Client-Anfragen und verteilt den Verkehr gleichmäßig auf die CockroachDB-Instanzen.

  2. CockroachDB StatefulSet — StatefulSet Definiert den gewünschten Status der CockroachDB-Bereitstellung innerhalb des Amazon EKS-Clusters. Es verwaltet die geordnete Bereitstellung, Skalierung und Aktualisierung von CockroachDB-Pods.

  3. CockroachDB-Pods — Diese Pods sind Instanzen von CockroachDB, die als Container innerhalb von Kubernetes-Pods ausgeführt werden. Diese Pods speichern und verwalten die Daten im gesamten verteilten Cluster.

  4. CockroachDB-Datenbank — Dies ist die verteilte Datenbank, die von CockroachDB verwaltet wird und sich über mehrere Pods erstreckt. Sie repliziert Daten für hohe Verfügbarkeit, Fehlertoleranz und Leistung.

Tools

AWS-Services

Andere Tools

  • HashiCorp Terraform ist ein Infrastructure-as-Code-Tool (IaC), mit dem Sie mithilfe von Code Cloud-Infrastruktur und -Ressourcen bereitstellen und verwalten können.

  • kubectl ist eine Befehlszeilenschnittstelle, mit der Sie Befehle für Kubernetes-Cluster ausführen können.

Code-Repository

Der Code für dieses Muster ist im Repository GitHub Deploy a CockroachDB in Amazon EKS using Terraform verfügbar. Das Code-Repository enthält die folgenden Dateien und Ordner für Terraform:

  • modulesOrdner — Dieser Ordner enthält das Terraform-Modul für CockroachDB

  • mainOrdner — Dieser Ordner enthält das Root-Modul, das das untergeordnete CockroachDB-Modul aufruft, um den CockroachDB-Datenbankcluster zu erstellen.

Best Practices

  • Skalieren Sie nicht auf weniger als drei Knoten herunter. Dies wird auf CockroachDB als Anti-Pattern angesehen und kann zu Fehlern führen. Weitere Informationen finden Sie unter Cluster Scaling in der CockroachDB-Dokumentation.

  • Implementieren Sie Amazon EKS-Autoscaling mithilfe von Karpernter oder Cluster Autoscaler. Dadurch kann der CockroachDB-Cluster horizontal skaliert und neue Knoten automatisch hinzugefügt werden. Weitere Informationen finden Sie unter Skalieren von Cluster-Berechnungen mit Karpenter und Cluster Autoscaler in der Amazon EKS-Dokumentation.

    Anmerkung

    Aufgrund der podAntiAffinity Kubernetes-Planungsregel kann nur ein CockroachDB-Pod in einem Amazon EKS-Knoten geplant werden.

  • Bewährte Sicherheitsmethoden für Amazon EKS finden Sie unter Bewährte Sicherheitsmethoden in der Amazon EKS-Dokumentation.

  • Bewährte Methoden zur SQL-Leistung für CockroachDB finden Sie unter Bewährte Methoden zur SQL-Leistung in der CockroachDB-Dokumentation.

  • Weitere Informationen zur Einrichtung eines Amazon Simple Storage Service (Amazon S3) -Remote-Backends für die Terraform-Statusdatei finden Sie unter Amazon S3 in der Terraform-Dokumentation.

Epen

AufgabeDescriptionErforderliche Fähigkeiten

Klonen Sie das Code-Repository.

Geben Sie den folgenden Befehl ein, um das Repository zu klonen:

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

Aktualisieren Sie die Terraform-Variablen.

  1. Geben Sie den folgenden Befehl ein, um zum Hauptordner im geklonten Repository zu navigieren:

    cd crdb-cluster-eks-terraform/main
  2. Öffnen Sie die Datei variable.tf.

  3. Konfigurieren Sie den Standardwert für die folgenden Variablen:

    • region— Geben Sie das Ziel ein AWS-Region

    • eks_cluster_name— Geben Sie den Namen für den Amazon EKS-Zielcluster ein

    • number_of_nodes— Geben Sie die Anzahl der bereitzustellenden Knoten ein

  4. Speichern und schließen Sie die Datei variable.tf.

DevOps Ingenieur, Terraform
AufgabeDescriptionErforderliche Fähigkeiten

Stellen Sie die Infrastruktur bereit.

  1. Geben Sie den folgenden Befehl ein, um die Terraform-Bereitstellung zu initialisieren:

    terraform init
  2. Geben Sie den folgenden Befehl ein, um einen Ausführungsplan zu generieren:

    terraform plan
  3. Überprüfen Sie den Plan und validieren Sie die Ressourcen und Infrastrukturkomponenten, die erstellt werden sollen.

  4. Geben Sie den folgenden Befehl ein, um die Infrastruktur bereitzustellen:

    terraform apply
  5. Wenn Sie dazu aufgefordert werden, geben Sie Ja ein, um die Bereitstellung zu bestätigen.

  6. Warten Sie, bis die Bereitstellung abgeschlossen ist.

DevOps Ingenieur, Terraform
AufgabeDescriptionErforderliche Fähigkeiten

Überprüfen Sie die Erstellung von Ressourcen.

  1. Geben Sie den folgenden Befehl ein, um den Amazon EKS-Kontext mit dem festzulegen AWS CLI:

    aws eks update-kubeconfig —name <eks_cluster_name>
  2. Geben Sie den folgenden Befehl ein, um die Anzahl der Pods zu überprüfen, die CockroachDB verwenden:

    kubectl get pods -n <namespace>

    Dies ist eine Beispielausgabe.

    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. Stellen Sie sicher, dass die Anzahl der Pods dem Wert entspricht, den Sie in der Datei variable.tf definiert haben.

DevOps Ingenieur

(Optional) Skalieren Sie nach oben oder unten.

  1. Erhöhen oder verringern Sie in der Datei variable.tf die Anzahl der Knoten und speichern Sie dann die Datei.

  2. Wiederholen Sie die Schritte, um die Infrastruktur über Terraform bereitzustellen. Terraform fügt Pods hinzu oder entfernt sie.

  3. Wiederholen Sie die Schritte, um die Anzahl der Pods zu überprüfen, die Cockroach DB verwenden. Wenn Sie beispielsweise die Anzahl der Knoten von drei auf vier erhöht haben, sollten jetzt vier Pods laufen.

DevOps Ingenieur, Terraform
AufgabeDescriptionErforderliche Fähigkeiten

Löschen Sie die Infrastruktur.

Durch die Skalierung der Knoten auf 0 werden die Rechenkosten gesenkt. Es fallen jedoch weiterhin Gebühren für die persistenten Amazon EBS-Volumes an, die mit diesem Modul erstellt wurden. Um Speicherkosten zu vermeiden, gehen Sie wie folgt vor, um alle Volumes zu löschen:

  1. Geben Sie den folgenden Befehl ein, um die Infrastruktur zu löschen:

    terraform destroy
  2. Wenn Sie dazu aufgefordert werden, geben Sie zur Bestätigung Ja ein.

Terraform

Fehlerbehebung

ProblemLösung

Fehler beim Überprüfen der Anbieteranmeldedaten

Wenn Sie den Terraform apply - oder destroy Befehl ausführen, tritt möglicherweise der folgende Fehler auf:

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.

Dieser Fehler wird durch den Ablauf des Sicherheitstokens für die in der Konfiguration Ihres lokalen Computers verwendeten Anmeldeinformationen verursacht. Anweisungen zur Behebung des Fehlers finden Sie in der AWS CLI Dokumentation unter Konfigurationseinstellungen einrichten und anzeigen.

CockroachDB-Pods befinden sich im Status „Ausstehend“

  1. Aufgrund der podAntiAffinity Kubernetes-Planungsregel kann nur ein CockroachDB-Pod in einem Amazon EKS-Knoten geplant werden. Wenn die Anzahl der CockroachDB-Pods die Anzahl der verfügbaren Amazon EKS-Knoten übersteigt, befinden sich die CockroachDB-Pods möglicherweise im Status Ausstehend. In diesem Fall müssen Sie Cluster Autoscaler oder Karpenter implementieren, damit der Amazon EKS-Knoten automatisch skaliert wird. Weitere Informationen finden Sie unter Skalieren der Cluster-Datenverarbeitung mit Karpenter und Cluster Autoscaler.

  2. Überprüfen Sie, ob die Kubernetes-Worker-Knoten node=cockroachdb Labels haben, indem Sie den folgenden Befehl eingeben:

    kubectl get nodes --show-labels

    Wenn dies nicht der Fall ist, müssen Sie sicherstellen, dass alle Worker-Knoten korrekt beschriftet sind. Weitere Informationen finden Sie unter Bearbeiten einer Knotengruppenkonfiguration in der Amazon EKS-Dokumentation.

Zugehörige Ressourcen

Anlagen

Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip