Questo tutorial mostra come eseguire Elastic Stack su GKE utilizzando l'operatore Elastic Cloud on Kubernetes (ECK).
Elastic Stack è una soluzione open source molto diffusa utilizzata per il logging, il monitoraggio e l'analisi dei dati in tempo reale. Utilizzando Elastic Stack su GKE, puoi usufruire della scalabilità e dell'affidabilità fornite da GKE Autopilot e delle potenti funzionalità di Elastic Stack.
Questo tutorial è rivolto agli amministratori di Kubernetes o ai site reliability engineer.
Obiettivi
- Creare un cluster GKE.
- Esegui il deployment dell'operatore ECK.
- Configura i cluster Elasticsearch e Kibana utilizzando l'operatore ECK.
- Esegui il deployment di uno stack Elastic completo utilizzando l'operatore ECK.
- Scalare automaticamente i cluster Elasticsearch ed eseguire l'upgrade del deployment di Elastic Stack.
- Utilizza Elastic Stack per monitorare gli ambienti Kubernetes.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per ulteriori informazioni, vedi Pulizia.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
gcloud services enable container.googleapis.com
-
Install the Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
gcloud services enable container.googleapis.com
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.clusterAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Devi essere proprietario di un nome di dominio. Il nome di dominio non deve contenere più di 63 caratteri. Puoi utilizzare Cloud Domains o un altro registrar.
Avvia una sessione di Cloud Shell dalla console Google Cloud facendo clic su
Attiva Cloud Shell nella consoleGoogle Cloud . Viene avviata una sessione nel riquadro inferiore della console Google Cloud .
Aggiungi un repository di grafici Helm e aggiornalo:
helm repo add elastic https://helm.elastic.co helm repo update
Clona il repository GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
Passa alla directory di lavoro:
cd kubernetes-engine-samples/observability/elastic-stack-tutorial
Installa il grafico Helm ECK:
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"
Attendi che l'operatore sia pronto:
watch kubectl get pods -n elastic-system
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE elastic-operator-0 1/1 Running 0 31s
Quando l'operatore
STATUS
èRunning
, torna alla riga di comando premendoCtrl+C
.Esamina il seguente manifest:
Questo manifest descrive un DaemonSet che configura l'impostazione del kernel direttamente sull'host. Un DaemonSet è un controller Kubernetes che garantisce che una copia di un pod venga eseguita su ogni nodo di un cluster.
Il manifest precedente è presente in una lista consentita per l'esecuzione su Autopilot. Non modificare questo manifest, incluse le immagini del contenitore.
Applica questo manifest al tuo cluster:
kubectl apply -f max-map-count-setter-ds.yaml
Esamina il seguente manifest:
Questo manifest definisce un cluster Elasticsearch con i seguenti campi:
initContainers
: attende la modifica delle impostazioni del kernel dell'host di memoria virtuale.podDisruptionBudget
: specifica che il cluster non verrà eliminato durante il processo di deframmentazione dei pod.config.node.roles
: la configurazione dei ruoli dei nodi Elasticsearch. Per saperne di più sui ruoli dei nodi, consulta la sezione Nodo nella documentazione di Elasticsearch.
Applica questo manifest al tuo cluster:
kubectl apply -f elasticsearch.yaml
Attendi che il cluster Elasticsearch sia pronto:
watch kubectl --namespace elastic-system get elasticsearches.elasticsearch.k8s.elastic.co
L'output è simile al seguente:
NAME HEALTH NODES VERSION PHASE AGE elasticsearch green 3 8.8.0 Ready 5m3s
Quando il cluster Elasticsearch
HEALTH
ègreen
ePHASE
èReady
, torna alla riga di comando premendoCtrl+C
.Esamina il seguente manifest:
Questo manifest descrive una risorsa personalizzata Kibana che configura i criteri dell'agente per il server fleet e gli agenti.
Applica questo manifest al tuo cluster:
kubectl apply -f kibana.yaml
Attendi che i pod siano pronti:
watch kubectl --namespace elastic-system get kibanas.kibana.k8s.elastic.co
L'output è simile al seguente:
NAME HEALTH NODES VERSION AGE kibana green 1 8.8.0 6m47s
Quando i pod
HEALTH
sonogreen
, torna alla riga di comando premendoCtrl+C
.Crea un indirizzo IP esterno globale:
gcloud compute addresses create "elastic-stack" --global
Crea una zona gestita e un insieme di record in Cloud DNS:
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"
Delega la zona DNS come sottodominio del dominio di base creando un insieme di record NS con un elenco di server dei nomi. Puoi ottenere un elenco di server dei nomi utilizzando il seguente comando:
gcloud dns record-sets describe elk.BASE_DOMAIN \ --type="NS" \ --zone="elk" \ --format="value(DATA)"
Esamina il seguente manifest:
Questo manifest descrive un ManagedCertificate che esegue il provisioning di un certificato SSL per stabilire la connessione TLS.
Applica il manifest al cluster:
kubectl apply -f ingress.yaml
Esamina il seguente manifest:
Questo manifest descrive un Elastic Agent che configura un server fleet con ECK.
Applica questo manifest al tuo cluster:
kubectl apply -f fleet-server-and-agents.yaml
Attendi che i pod siano pronti:
watch kubectl --namespace elastic-system get agents.agent.k8s.elastic.co
L'output è simile al seguente:
NAME HEALTH AVAILABLE EXPECTED VERSION AGE elastic-agent green 5 5 8.8.0 14m fleet-server green 1 1 8.8.0 16m
Quando i pod
HEALTH
sonogreen
, torna alla riga di comando premendoCtrl+C
.Installa 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
Recupera le credenziali utente predefinite di Kibana
elastic
:kubectl get secret elasticsearch-es-elastic-user -o yaml -n elastic-system -o jsonpath='{.data.elastic}' | base64 -d
Apri
https://elk.BASE_DOMAIN
nel browser e accedi a Kibana con le credenziali.Nel menu, seleziona Analytics, poi Dashboard.
Nel campo di testo di ricerca, inserisci Panoramica di Kubernetes e seleziona Dashboard Panoramica per visualizzare le metriche di base.
Alcuni pannelli della dashboard potrebbero non mostrare dati o messaggi di errore perché GKE limita l'accesso ad alcuni endpoint del control plane che Kibana utilizza per ottenere le metriche del cluster.
Elimina i componenti di Elastic Stack, l'operatore ECK e kube-state-metrics:
kubectl --namespace elastic-system delete ingresses.networking.k8s.io elastic-stack kubectl --namespace elastic-system delete managedcertificates.networking.gke.io elastic-stack kubectl --namespace elastic-system delete frontendconfigs.networking.gke.io elastic-stack kubectl --namespace elastic-system delete agents.agent.k8s.elastic.co elastic-agent kubectl --namespace elastic-system delete agents.agent.k8s.elastic.co fleet-server kubectl --namespace elastic-system delete kibanas.kibana.k8s.elastic.co kibana kubectl --namespace elastic-system delete elasticsearches.elasticsearch.k8s.elastic.co elasticsearch kubectl --namespace elastic-system delete daemonsets.apps max-map-count-setter kubectl --namespace elastic-system delete pvc --selector='elasticsearch.k8s.elastic.co/cluster-name=elasticsearch' helm --namespace elastic-system uninstall kube-state-metrics helm --namespace elastic-system uninstall elastic-operator
Elimina il set di record DNS, l'indirizzo IP, la zona gestita DNS e il cluster GKE:
gcloud dns record-sets delete "elk.BASE_DOMAIN" \ --type="A" \ --zone="elk" \ --quiet gcloud compute addresses delete "elastic-stack" \ --global \ --quiet gcloud dns managed-zones delete "elk" --quiet gcloud container clusters delete "elk-stack" \ --location="us-central1" \ --quiet
- Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.
Prepara l'ambiente
In questo tutorial utilizzerai Cloud Shell per gestire le risorse ospitate
su Google Cloud. Cloud Shell è preinstallato con il software
necessario per questo tutorial, tra cui
kubectl
,
Helm e gcloud CLI.
Per configurare l'ambiente con Cloud Shell:
Crea un cluster GKE
Crea un cluster GKE con la raccolta delle metriche del control plane attivata:
gcloud container clusters create-auto elk-stack \
--location="us-central1" \
--monitoring="SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER"
Esegui il deployment dell'operatore ECK
Elastic Cloud on Kubernetes (ECK) è una piattaforma per il deployment e la gestione di Elastic Stack sui cluster Kubernetes.
ECK automatizza il deployment e la gestione dei cluster Elastic Stack, semplificando la procedura di configurazione e manutenzione di Elastic Stack su Kubernetes. Fornisce un insieme di risorse personalizzate Kubernetes che puoi utilizzare per creare e configurare Elasticsearch, Kibana, Application Performance Management Server e altri componenti di Elastic Stack in Kubernetes. Ciò consente agli sviluppatori e ai team DevOps di configurare e gestire i cluster Elastic Stack su larga scala.
ECK supporta più nodi Elasticsearch, il failover automatico delle applicazioni, gli upgrade senza interruzioni e la crittografia SSL. ECK include anche funzionalità che ti consentono di monitorare e risolvere i problemi relativi alle prestazioni di Elasticsearch.
Configura Elastic Stack con ECK
Utilizzando Elastic Stack con Elasticsearch, Kibana ed Elastic Agent in modalità Fleet, puoi configurare una soluzione potente, scalabile e completamente gestita per la gestione e la visualizzazione dei dati utilizzando Kibana.
Kibana è uno strumento di analisi e visualizzazione dei dati open source che ti consente di cercare, analizzare e visualizzare i dati in Elasticsearch.
Elastic Agent è un leggero shipper di dati che raccoglie dati da diverse origini, come log o metriche, e li invia automaticamente a Elasticsearch.
Elastic Fleet è una modalità di funzionamento in cui gli agenti Elastic inviano report a un server di gestione centrale, che gestisce la loro configurazione. Il server fleet semplifica il deployment, la configurazione e lo scaling degli agenti Elastic, rendendo più semplice la gestione di deployment di grandi dimensioni e complessi.
La scalabilità automatica di Elasticsearch è una funzionalità di automonitoraggio che può segnalare quando sono necessarie risorse aggiuntive in base a una policy definita dall'operatore. Ad esempio, un criterio potrebbe specificare che un determinato livello deve essere scalato in base allo spazio su disco disponibile. Elasticsearch può monitorare lo spazio su disco e suggerire lo scaling se prevede una carenza, anche se spetta comunque all'operatore aggiungere le risorse necessarie. Per ulteriori informazioni sulla scalabilità automatica di Elasticsearch, consulta Scalabilità automatica nella documentazione di Elasticsearch.
Configura un cluster Elasticsearch
Elasticsearch fornisce un motore di ricerca e analisi distribuito e RESTful progettato per archiviare e cercare grandi volumi di dati in modo rapido ed efficiente.
Quando esegui il deployment di Elastic Stack su Kubernetes, devi gestire le impostazioni della VM,
in particolare vm.max_map_count setting
, che è richiesto da
Elasticsearch. vm.max_map_count
specifica il numero di aree di memoria che un processo può allocare a un file. Per un funzionamento ottimale, Elasticsearch deve avere questo valore impostato
almeno su 262144
. Per saperne di più, consulta la sezione
Memoria virtuale
nella documentazione di ECK.
Configura Kibana
Configura un bilanciatore del carico per accedere a Kibana
Per accedere a Kibana, crea un oggetto Ingress di Kubernetes, un certificato gestito da Google, un indirizzo IP globale e una zona DNS.
Configura gli agenti elastici
Configurazione di logging e monitoraggio
Elastic Stack può utilizzare l'esportatore kube-state-metrics per raccogliere metriche a livello di cluster.
Esegui la pulizia
Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Elimina le singole risorse
Se hai utilizzato un progetto esistente e non vuoi eliminarlo, elimina le singole risorse.