Blog

Bereitstellung von Elasticsearch auf GCP GKE Autopilot

Erfahren Sie, wie Sie einen Elasticsearch-Cluster auf der Google Cloud Platform mit GKE Autopilot und ECK für eine teilweise verwaltete Elasticsearch-Konfiguration bereitstellen können.

In diesem Artikel lernen wir, wie Elasticsearch mithilfe von Autopilot auf Google Cloud Kubernetes (GKE) bereitgestellt wird.

Für Elasticsearch werden wir Elastic Cloud on Kubernetes (ECK) verwenden, den offiziellen Elasticsearch Kubernetes-Operator, der die Orchestrierung von Kubernetes-Deployments aller Elastic Stack-Komponenten vereinfacht.

Um mehr darüber zu erfahren, wie man Elasticsearch-Cluster auf verschiedenen Google-Cloud-Platform-Infrastrukturen bereitstellt, können Sie unsere Einstiegsartikel für Google Cloud Compute und Google Cloud Marketplace lesen.

Aufwand für die Bereitstellung von Elasticsearch

Aufwand für die Bereitstellung von Elasticsearch ECK.

Was ist GKE Autopilot?

Google Kubernetes Engine (GKE) Autopilot bietet ein vollständig verwaltetes Kubernetes-Erlebnis, bei dem Google die Clusterkonfiguration, das Node-Management, die Security und das Skalieren übernimmt, während Entwickler sich auf die Bereitstellung von Anwendungen konzentrieren, sodass Teams mit integrierten Best Practices in wenigen Minuten vom Code zur Produktion gelangen können.

GKE-Autopilot-Container.

Quelle: https://cloud.google.com/blog/products/containers-kubernetes/introducing-gke-autopilot

Wann sollte man ECK in Google Cloud nutzen?

Elastic Cloud on Kubernetes (ECK) eignet sich besonders für Unternehmen mit einer bestehenden Kubernetes-Infrastruktur, die Elasticsearch mit erweiterten Funktionen wie dedizierten Knotenrollen, hoher Verfügbarkeit und Automatisierung bereitstellen möchten.

Wie richtet man ECK in Google Cloud ein?

1. Melden Sie sich in der Google Cloud Console an.

2. Klicken Sie oben rechts auf die Cloud-Shell-Taste, um auf die Konsole zuzugreifen, und stellen Sie von dort aus den GKE-Cluster bereit. Alternativ können Sie auch gcloud CLI verwenden.

Denken Sie daran, die Projekt-ID während des Tutorials durch Ihre eigene zu ersetzen.

So richten Sie Elasticsearch auf Google Cloud Platform GKE Autopilot ein.

3. Aktivieren Sie die Google Kubernetes Engine API.

Aktivierung der Google Kubernetes Engine API.

Klicken Sie auf Next (Weiter).

Nun sollte die Kubernetes Engine API als aktiviert angezeigt werden, wenn nach der Kubernetes Engine API gesucht wird.

Die Kubernetes Engine-API.

4. In der Cloud Shell einen Autopilot-Cluster erstellen. Wir werden es „autopilot-cluster-1“ benennen und außerdem „autopilot-test“ durch die ID Ihres Projekts ersetzen.

gcloud beta container --project "autopilot-test-457216" clusters create-auto "autopilot-cluster-1" --region "us-central1" --release-channel "regular" --tier "standard" --enable-ip-access --no-enable-google-cloud-access --network "projects/autopilot-test-457216/global/networks/default" --subnetwork "projects/autopilot-test-457216/regions/us-central1/subnetworks/default" --cluster-ipv4-cidr "/17" --binauthz-evaluation-mode=DISABLED

5. Warten Sie, bis es bereit ist. Die Erstellung dauert etwa 10 Minuten.

Bild eines Autopilot-Cluster-Setups.

Nach der korrekten Einrichtung des Clusters wird eine Bestätigungsmeldung angezeigt.

6. Konfigurieren Sie den Zugriff auf die „kubectl“-Befehlszeile.

gcloud container clusters get-credentials autopilot-cluster-1 --region us-central1 --project autopilot-test-457216

Sie sollten sehen:

Für autopilot-cluster-1 wurde ein „kubeconfig“-Eintrag generiert.

7. Installieren Sie den Elastic Cloud on Kubernetes (ECK)-Operator.

# Install ECK Custom Resource Definitions
kubectl create -f https://download.elastic.co/downloads/eck/2.16.1/crds.yaml

# Install the ECK operator
kubectl apply -f https://download.elastic.co/downloads/eck/2.16.1/operator.yaml

8. Lassen Sie uns eine Elasticsearch-Instanz mit einem einzelnen Knoten und den Standardwerten erstellen.

Wenn Sie einige Rezepte für verschiedene Setups prüfen möchten, können Sie diesen Link besuchen.

Bitte beachten Sie, dass ECK, wenn Sie kein storageClass angeben, den standardmäßig festgelegten Wert verwendet, der für GKE standard-rwo ist und den Compute Engine Persistent Disk CSI Driver nutzt, und damit ein 1-GB-Volume erstellt.

cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 9.0.0
  nodeSets:
  - name: default
    count: 1
    config:
      node.store.allow_mmap: false
EOF

Wir haben nmap deaktiviert, da die Standard-GKE-Maschine einen zu niedrigen Wert für vm.max_map_count hat. Für den Produktivbetrieb wird von einer Deaktivierung abgeraten; stattdessen sollte der Wert von vm.max_map_count erhöht werden. Mehr darüber, wie Sie das machen, können Sie hier lesen.

9. Lassen Sie uns außerdem einen Kibana-Cluster mit einem einzelnen Knoten bereitstellen. Für Kibana fügen wir einen LoadBalancer hinzu, der uns eine externe IP-Adresse bereitstellt, über die wir Kibana von unserem Gerät aus erreichen können.

cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 9.0.0
  http:
    service:
      metadata:
        annotations:
          cloud.google.com/l4-rbs: "enabled"
      spec:
        type: LoadBalancer
  count: 1
  elasticsearchRef:
    name: quickstart
EOF

Beachten Sie die Anmerkung:

cloud.google.com/l4-rbs: "enabled"

Das ist sehr wichtig, weil es Autopilot anweist, einen öffentlich zugänglichen LoadBalancer bereitzustellen. Falls nicht festgelegt, wird der LoadBalancer intern verwendet.

10. Prüfen Sie, ob Ihre Pods laufen

kubectl get pods

11. Sie können auch run kubectl get elasticsearch und kubectl get kibana für spezifischere Statistiken wie Elasticsearch-Version, Nodes und Health verwenden.

12. Greifen Sie auf Ihre Dienste zu.

kubectl get svc

Hier wird Ihnen die externe URL für Kibana unter EXTERNAL-IP angezeigt. Es kann einige Minuten dauern, bis der LoadBalancer bereitgestellt wird. Kopieren Sie den Wert von EXTERNAL-IP.

13. Ermitteln Sie das Elasticsearch-Passwort für den Nutzer „elastic“:

kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode

14. Greifen Sie über Ihren Browser auf Kibana zu:

  • URL: https://<EXTERNAL_IP>:5601

  • Benutzername:elastic

  • Passwort: 28Pao50lr2GpyguX470L2uj5 (aus dem vorherigen Schritt)

Elastic Begrüßungsbildschirm.

15. Wenn Sie von Ihrem Browser aus zugreifen, wird der Willkommensbildschirm angezeigt.

Elasticsearch-Startseite.

Wenn Sie die Spezifikationen des Elasticsearch-Clusters ändern möchten, z. B. Knoten ändern oder die Größe anpassen, können Sie das yml-Manifest mit den neuen Einstellungen erneut anwenden:

cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 9.0.0
  nodeSets:
    - name: default
      count: 2
      config:
        node.store.allow_mmap: false
      podTemplate:
        spec:
          containers:
            - name: elasticsearch
              resources:
                requests:
                  memory: 1.5Gi
                  cpu: 2
                limits:
                  memory: 1.5Gi
                  cpu: 2
EOF

In diesem Beispiel fügen wir einen weiteren Node hinzu und ändern RAM sowie CPU. Wie Sie sehen, zeigt kubectl get elasticsearch jetzt 2 Knoten:

Das Gleiche gilt für Kibana:

cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 9.0.0
  http:
    service:
      metadata:
        annotations:
          cloud.google.com/l4-rbs: "enabled"
      spec:
        type: LoadBalancer
  count: 1
  elasticsearchRef:
    name: quickstart
  podTemplate:
    spec:
      containers:
        - name: kibana
          env:
            - name: NODE_OPTIONS
              value: "--max-old-space-size=1024"
          resources:
            requests:
              memory: 0.5Gi
              cpu: 0.5
            limits:
              memory: 1Gi
              cpu: 1
EOF

Wir können die CPU/RAM des Containers sowie die Speichernutzung von Node.js (max-old-space-size) anpassen.

Denken Sie daran, dass bestehende Volumenbehauptungen nicht verkleinert werden können. Nach der Installation des Updates wird der Betreiber die Änderungen mit minimaler Ausfallzeit vornehmen.

Denken Sie daran, den Cluster nach dem Testen zu löschen, um unnötige Kosten zu vermeiden.

gcloud container clusters delete autopilot-cluster-1

Wie geht es weiter?

Wenn Sie mehr über Kubernetes und die Google Kubernetes Engine erfahren möchten, lesen Sie diese Artikel:

Zugehörige Inhalte

So migrieren Sie Daten zwischen verschiedenen Versionen von Elasticsearch und zwischen Clustern

Kofi Bartlett

Einführung der Elasticsearch-Abfrageregeln-Benutzeroberfläche in Kibana

Jhon Guzmán

Elasticsearch in JavaScript richtig anwenden, Teil II

Jeffrey Rengifo

Implementierung der semantischen Suche: Erstellen einer Rezeptsuche mit Elasticsearch

Andre Luiz

So stellen Sie Elasticsearch auf dem AWS Marketplace bereit

Eduard Martin

Sind Sie bereit, hochmoderne Sucherlebnisse zu schaffen?

Eine ausreichend fortgeschrittene Suche kann nicht durch die Bemühungen einer einzelnen Person erreicht werden. Elasticsearch wird von Datenwissenschaftlern, ML-Ops-Experten, Ingenieuren und vielen anderen unterstützt, die genauso leidenschaftlich an der Suche interessiert sind wie Sie. Lasst uns in Kontakt treten und zusammenarbeiten, um das magische Sucherlebnis zu schaffen, das Ihnen die gewünschten Ergebnisse liefert.

Probieren Sie es selbst aus