Blog
Wie man ElasticSearch mit Terraform und Helm auf GKE einsetzt

Vor kurzem wurde ich damit beauftragt, ElasticSearch mit Terraform und Helm auf GKE zu implementieren, und zwar auf eine möglichst lesbare Weise. Da ich mit Helm nicht sehr vertraut war, habe ich einige Nachforschungen angestellt, um einen Ansatz zu finden, der die Anforderungen erfüllt. In diesem Beitrag werde ich Ihnen die Terraform-Konfiguration vorstellen, die ich für eine erfolgreiche Bereitstellung verwendet habe.
Was ist Helm?
Helm ist im Grunde genommen eine Template-Engine, die Sie bei der Definition, Installation und Aktualisierung von Anwendungen unter Kubernetes unterstützt. Mit Helm können Sie die Funktion Charts nutzen , bei der es sich einfach um Kubernetes YAML-Konfigurationsdateien (die weiter konfiguriert und erweitert werden können) handelt, die in einem einzigen Paket zusammengefasst sind, das für die Bereitstellung von Anwendungen in einem Kubernetes-Cluster verwendet werden kann. Um Helm über Terraform nutzen zu können, müssen wir den entsprechenden Provider definieren und die für die Verbindung mit dem GKE-Cluster erforderlichen Anmeldeinformationen übergeben.
provider "helm" {
kubernetes {
token = data.google_client_config.client.access_token
host = data.google_container_cluster.gke.endpoint
cluster_ca_certificate = base64decode(data.google_container_cluster.gke.master_auth[0].cluster_ca_certificate)
}
}
Terraform Konfiguration
Ich definiere eine helm_release Ressource mit Terraform, die den ElasticSearch-Cluster bereitstellen wird, wenn sie angewendet wird. Da ich ein Helm-Diagramm für den Cluster verwende, ist dies unglaublich einfach. Alles, was ich tun musste, war, Helm den Namen des zu verwendenden Diagramms und seinen Speicherort (Repository) mitzuteilen, zusammen mit der Version von ElasticSearch, die ich verwenden möchte.
Mit den set Blöcken kann ich stattdessen die Standardwerte aus der Vorlage außer Kraft setzen: Das macht es einfach, eine geeignete Speicherklasse, die Speichermenge und im Allgemeinen jeden anderen Teil der Konfiguration, der geändert werden kann (Sie müssen in der Dokumentation des Diagramms selbst nachsehen, welche Werte außer Kraft gesetzt werden können), direkt von Terraform aus zu wählen.
resource "helm_release" "elasticsearch" {
name = "elasticsearch"
repository = "https://helm.elastic.co"
chart = "elasticsearch"
version = "6.8.14"
timeout = 900
set {
name = "volumeClaimTemplate.storageClassName"
value = "elasticsearch-ssd"
}
set {
name = "volumeClaimTemplate.resources.requests.storage"
value = "5Gi"
}
set {
name = "imageTag"
value = "6.8.14"
}
}
Erstellen einer neuen Speicherklasse
Anschließend musste ich eine neue Speicherklasse einrichten, die vom ElasticSearch-Cluster zum Speichern von Daten verwendet wird. Die folgende Konfiguration richtet die SSD (SSD wird für diesen Zweck empfohlen, da sie schneller ist als eine normale HDD) ein, auf die ich in der Hauptkonfiguration oben verwiesen habe.
resource "kubernetes_storage_class" "elasticsearch_ssd" {
metadata {
name = "elasticsearch-ssd"
}
storage_provisioner = "kubernetes.io/gce-pd"
reclaim_policy = "Retain"
parameters = {
type = "pd-ssd"
}
allow_volume_expansion = true
}
Zusammenfassung
In diesem Blogbeitrag habe ich Ihnen gezeigt, wie Sie ElasticSearch auf GKE mit Terraform und Helm bereitstellen können. Die erforderliche Konfiguration ist einfach und sehr gut lesbar und senkt die Hürde, Ihre gesamte Infrastruktur über Terraform zu verwalten, anstatt beispielsweise Cloud Marketplace, Managed Services oder andere benutzerdefinierte Lösungen zu nutzen. Credits: Header-Bild von Luca Cavallin auf nylavak.com
Verfasst von
Luca Cavallin
Luca is a Software Engineer and Trainer with full-stack experience ranging from distributed systems to cross-platform apps. He is currently interested in building modern, serverless solutions on Google Cloud using Golang, Rust and React and leveraging SRE and Agile practices. Luca holds 3 Google Cloud certifications, he is part of the Google Developers Experts community and he is the co-organizer of the Google Cloud User Group that Binx.io holds with Google.
Unsere Ideen
Weitere Blogs
Contact



