Blog

Wie man ElasticSearch mit Terraform und Helm auf GKE einsetzt

Luca Cavallin

Aktualisiert Oktober 20, 2025
3 Minuten

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.

Contact

Let’s discuss how we can support your journey.