In dieser Anleitung erfahren Sie, wie Sie den Elastic Stack mit dem Elastic Cloud on Kubernetes (ECK)-Operator in GKE ausführen.
Elastic Stack ist eine beliebte Open-Source-Lösung, die zum Protokollieren, Überwachen und Analysieren von Daten in Echtzeit verwendet wird. Wenn Sie den Elastic Stack in GKE verwenden, profitieren Sie von der Skalierbarkeit und Zuverlässigkeit von GKE Autopilot und den leistungsstarken Elastic Stack-Funktionen.
Diese Anleitung richtet sich an Kubernetes-Administratoren oder Site Reliability Engineers.
Umgebung vorbereiten
In dieser Anleitung verwenden Sie Cloud Shell zum Verwalten von Ressourcen, die in Google Cloudgehostet werden. Die Software, die Sie für diese Anleitung benötigen, ist in Cloud Shell vorinstalliert, einschließlich kubectl
, Helm und der gcloud CLI.
So richten Sie Ihre Umgebung mit Cloud Shell ein:
Starten Sie eine Cloud Shell-Sitzung über die Google Cloud Console. Klicken Sie dazu in der Google Cloud Console auf
Cloud Shell aktivieren. Dadurch wird im unteren Bereich der Google Cloud Console eine Sitzung gestartet.
Fügen Sie ein Helm-Diagramm-Repository hinzu und aktualisieren Sie es:
helm repo add elastic https://helm.elastic.co helm repo update
Klonen Sie das GitHub-Repository:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
Wechseln Sie in das Arbeitsverzeichnis:
cd kubernetes-engine-samples/observability/elastic-stack-tutorial
GKE-Cluster erstellen
GKE-Cluster mit aktivierter Erfassung von Messwerten der Steuerungsebene erstellen:
gcloud container clusters create-auto elk-stack \
--location="us-central1" \
--monitoring="SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER"
ECK-Operator bereitstellen
Elastic Cloud on Kubernetes (ECK) ist eine Plattform zum Bereitstellen und Verwalten des Elastic Stack in Kubernetes-Clustern.
ECK automatisiert die Bereitstellung und Verwaltung von Elastic Stack-Clustern und vereinfacht so die Einrichtung und Wartung von Elastic Stack in Kubernetes. Es bietet eine Reihe von benutzerdefinierten Kubernetes-Ressourcen, mit denen Sie Elasticsearch, Kibana, Application Performance Management-Server und andere Elastic Stack-Komponenten in Kubernetes erstellen und konfigurieren können. So können Entwickler und DevOps-Teams Elastic Stack-Cluster in großem Umfang konfigurieren und verwalten.
ECK unterstützt mehrere Elasticsearch-Knoten, automatisches Anwendungs-Failover, nahtlose Upgrades und SSL-Verschlüsselung. ECK bietet auch Funktionen, mit denen Sie die Elasticsearch-Leistung überwachen und Fehler beheben können.
Installieren Sie das ECK-Helm-Diagramm:
helm upgrade --install "elastic-operator" "elastic/eck-operator" \ --version="2.8.0" \ --create-namespace \ --namespace="elastic-system" \ --set="resources.limits.cpu=250m" \ --set="resources.limits.memory=512Mi" \ --set="resources.limits.ephemeral-storage=1Gi" \ --set="resources.requests.cpu=250m" \ --set="resources.requests.memory=512Mi" \ --set="resources.requests.ephemeral-storage=1Gi"
Warten Sie, bis der Operator bereit ist:
watch kubectl get pods -n elastic-system
Die Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE elastic-operator-0 1/1 Running 0 31s
Wenn der Operator
STATUS
den WertRunning
hat, kehren Sie zur Befehlszeile zurück. Drücken Sie dazuCtrl+C
.
Elastic Stack mit ECK konfigurieren
Wenn Sie den Elastic Stack mit Elasticsearch, Kibana und Elastic Agent im Flottenmodus verwenden, können Sie eine leistungsstarke, skalierbare und vollständig verwaltete Lösung zum Verwalten und Visualisieren von Daten mit Kibana einrichten.
Kibana ist ein Open-Source-Tool für Datenanalyse und ‑visualisierung, mit dem Sie Daten in Elasticsearch suchen, analysieren und visualisieren können.
Elastic Agent ist ein leichter Datenversand, der Daten aus verschiedenen Quellen wie Logs oder Messwerten erfasst und automatisch an Elasticsearch sendet.
Elastic Fleet ist ein Betriebsmodus, in dem Elastic-Agents Informationen an einen zentralen Flottenserver senden, der für die Konfiguration und Verwaltung zuständig ist. Der Flottenserver vereinfacht die Bereitstellung, Konfiguration und Skalierung von Elastic Agents und erleichtert so die Verwaltung großer und komplexer Bereitstellungen.
Elasticsearch-Autoscaling ist eine Funktion zur Selbstüberwachung, die auf Grundlage einer vom Operator definierten Richtlinie melden kann, wenn zusätzliche Ressourcen erforderlich sind. Eine Richtlinie kann beispielsweise festlegen, dass eine bestimmte Ebene basierend auf dem verfügbaren Speicherplatz skaliert werden soll. Elasticsearch kann den Speicherplatz überwachen und eine Skalierung vorschlagen, wenn ein Engpass vorhergesagt wird. Es liegt jedoch weiterhin am Betreiber, die erforderlichen Ressourcen hinzuzufügen. Weitere Informationen zum Elasticsearch-Autoscaling finden Sie in der Elasticsearch-Dokumentation unter Autoscaling.
Elasticsearch-Cluster konfigurieren
Elasticsearch ist eine verteilte, RESTful-Such- und Analyse-Engine, die zum schnellen und effizienten Speichern und Suchen großer Datenmengen entwickelt wurde.
Wenn Sie den Elastic Stack in Kubernetes bereitstellen, sollten Sie die VM-Einstellungen verwalten, insbesondere vm.max_map_count setting
, das für Elasticsearch erforderlich ist. vm.max_map_count
gibt die Anzahl der Speicherbereiche an, die ein Prozess einer Datei zuweisen kann. In Elasticsearch muss dieser Wert auf mindestens 262144
festgelegt sein, damit die Software optimal ausgeführt werden kann. Weitere Informationen finden Sie in der ECK-Dokumentation unter Virtueller Speicher.
Prüfen Sie das folgende Manifest:
Dieses Manifest beschreibt ein DaemonSet, das die Kerneleinstellung direkt auf dem Host konfiguriert. Ein DaemonSet ist ein Kubernetes-Controller, der dafür sorgt, dass auf jedem Knoten in einem Cluster eine Kopie eines Pods ausgeführt wird.
Das vorherige Manifest befindet sich auf einer Zulassungsliste für die Ausführung auf Autopilot. Ändern Sie dieses Manifest nicht, auch nicht die Containerbilder.
Wenden Sie dieses Manifest auf Ihren Cluster an:
kubectl apply -f max-map-count-setter-ds.yaml
Prüfen Sie das folgende Manifest:
In diesem Manifest wird ein Elasticsearch-Cluster mit den folgenden Feldern definiert:
initContainers
: Wartet, bis sich die Kerneleinstellungen des virtuellen Arbeitsspeicherhosts ändern.podDisruptionBudget
: Gibt an, dass der Cluster während der Defragmentierung der Pods nicht zerstört wird.config.node.roles
: Konfiguration der Elasticsearch-Knotenrollen. Weitere Informationen zu Knotenrollen finden Sie in der Elasticsearch-Dokumentation unter Knoten.
Wenden Sie dieses Manifest auf Ihren Cluster an:
kubectl apply -f elasticsearch.yaml
Warten Sie, bis der Elasticsearch-Cluster bereit ist:
watch kubectl --namespace elastic-system get elasticsearches.elasticsearch.k8s.elastic.co
Die Ausgabe sieht in etwa so aus:
NAME HEALTH NODES VERSION PHASE AGE elasticsearch green 3 8.8.0 Ready 5m3s
Wenn der Elasticsearch-Cluster
HEALTH
den Wertgreen
undPHASE
den WertReady
hat, kehren Sie zur Befehlszeile zurück. Drücken Sie dazuCtrl+C
.
Kibana konfigurieren
Prüfen Sie das folgende Manifest:
Dieses Manifest beschreibt eine benutzerdefinierte Kibana-Ressource, mit der Agent-Richtlinien für den Flottenserver und die Agents konfiguriert werden.
Wenden Sie dieses Manifest auf Ihren Cluster an:
kubectl apply -f kibana.yaml
Warten Sie, bis die Pods bereit sind:
watch kubectl --namespace elastic-system get kibanas.kibana.k8s.elastic.co
Die Ausgabe sieht in etwa so aus:
NAME HEALTH NODES VERSION AGE kibana green 1 8.8.0 6m47s
Wenn die Pods-
HEALTH
den Wertgreen
hat, kehren Sie zur Befehlszeile zurück. Drücken Sie dazuCtrl+C
.
Load-Balancer für den Zugriff auf Kibana konfigurieren
Um auf Kibana zuzugreifen, erstellen Sie ein Kubernetes Ingress-Objekt, ein von Google verwaltetes Zertifikat, eine globale IP-Adresse und eine DNS-Zone.
Globale externe IP-Adresse erstellen:
gcloud compute addresses create "elastic-stack" --global
Verwaltete Zone und Datensatz in Cloud DNS erstellen:
gcloud dns managed-zones create "elk" \ --description="DNS Zone for Airflow" \ --dns-name="elk.BASE_DOMAIN" \ --visibility="public" gcloud dns record-sets create "elk.BASE_DOMAIN" \ --rrdatas="$(gcloud compute addresses describe "elastic-stack" --global --format="value(address)")" \ --ttl="300" \ --type="A" \ --zone="elk"
Delegieren Sie die DNS-Zone als Subdomain der Basisdomain, indem Sie einen NS-Eintragssatz mit einer Liste von Nameservern erstellen. Mit dem folgenden Befehl können Sie eine Liste der Nameserver abrufen:
gcloud dns record-sets describe elk.BASE_DOMAIN \ --type="NS" \ --zone="elk" \ --format="value(DATA)"
Prüfen Sie das folgende Manifest:
Dieses Manifest beschreibt ein ManagedCertificate, mit dem ein SSL-Zertifikat für die TLS-Verbindung bereitgestellt wird.
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f ingress.yaml
Elastic Agents konfigurieren
Prüfen Sie das folgende Manifest:
Dieses Manifest beschreibt einen Elastic Agent, der einen Flottenserver mit ECK konfiguriert.
Wenden Sie dieses Manifest auf Ihren Cluster an:
kubectl apply -f fleet-server-and-agents.yaml
Warten Sie, bis die Pods bereit sind:
watch kubectl --namespace elastic-system get agents.agent.k8s.elastic.co
Die Ausgabe sieht in etwa so aus:
NAME HEALTH AVAILABLE EXPECTED VERSION AGE elastic-agent green 5 5 8.8.0 14m fleet-server green 1 1 8.8.0 16m
Wenn die Pods-
HEALTH
den Wertgreen
hat, kehren Sie zur Befehlszeile zurück. Drücken Sie dazuCtrl+C
.
Logging und Monitoring konfigurieren
Der Elastic Stack kann den kube-state-metrics-Exporter verwenden, um Messwerte auf Clusterebene zu erfassen.
Installieren Sie Kube State Metrics:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install kube-state-metrics prometheus-community/kube-state-metrics --namespace elastic-system
Rufen Sie die Standardanmeldedaten für den Kibana-Nutzer
elastic
ab:kubectl get secret elasticsearch-es-elastic-user -o yaml -n elastic-system -o jsonpath='{.data.elastic}' | base64 -d
Öffnen Sie
https://elk.BASE_DOMAIN
in Ihrem Browser und melden Sie sich mit den Anmeldedaten in Kibana an.Wählen Sie im Menü Analytics und dann Dashboards aus.
Geben Sie in das Suchfeld Kubernetes-Übersicht ein und wählen Sie Übersichts-Dashboard aus, um die grundlegenden Messwerte aufzurufen.
In einigen Dashboard-Feldern werden möglicherweise keine Daten oder Fehlermeldungen angezeigt, da GKE den Zugriff auf einige der Steuerungsebenen-Endpunkte einschränkt, die Kibana zum Abrufen von Clustermesswerten verwendet.