Introduzione
Elasticsearch è un motore di ricerca scalabile in tempo reale distribuito in cluster. Se combinato con l'orchestrazione Kubernetes, Elasticsearch è facile da configurare, gestire e scalare.
La distribuzione di un cluster Elasticsearch per impostazione predefinita crea tre pod. Ogni pod svolge tutte e tre le funzioni:master, dati e client. Tuttavia, la best practice sarebbe quella di distribuire manualmente più pod Elasticsearch dedicati per ciascun ruolo.
Questo articolo spiega come distribuire Elasticsearch su Kubernetes su sette pod manualmente e utilizzando un grafico Helm predefinito.

Prerequisiti
- Un cluster Kubernetes (abbiamo usato Minikube).
- Il gestore del pacchetto Helm.
- Lo strumento da riga di comando kubectl.
- Accesso alla riga di comando o al terminale.
Come distribuire Elasticsearch su Kubernetes manualmente
La best practice consiste nell'utilizzare sette pod nel cluster Elasticsearch:
- Tre master pod per la gestione del cluster.
- Due data pod per la memorizzazione dei dati e l'elaborazione delle query.
- Due pod client (o coordinati) per indirizzare il traffico.
La distribuzione manuale di Elasticsearch su Kubernetes con sette pod dedicati è un processo semplice che richiede l'impostazione dei valori Helm in base al ruolo.
Passaggio 1:configura Kubernetes
1. Il cluster richiede risorse significative. Imposta le CPU Minikube su un minimo di 4 e la memoria su 8192 MB:
minikube config set cpus 4
minikube config set memory 8192
2. Apri il terminale e avvia minikube con i seguenti parametri:
minikube start

L'istanza inizia con la memoria e le CPU configurate.
3. Minikube richiede un values.yaml file per eseguire Elasticsearch. Scarica il file con:
curl -O https://raw.githubusercontent.com/elastic/helm-charts/master/elasticsearch/examples/minikube/values.yaml

Il file contiene le informazioni utilizzate nel passaggio successivo per tutte e tre le configurazioni del pod.
Fase 2:imposta i valori in base al ruolo del pod
1. Copia il contenuto di values.yaml file utilizzando il cp
comando in tre diversi file di configurazione del pod:
cp values.yaml master.yaml
cp values.yaml data.yaml
cp values.yaml client.yaml
2. Controlla i quattro file YAML usando ls
comando:
ls -l *.yaml
3. Apri master.yaml file con un editor di testo e aggiungi la seguente configurazione all'inizio:
# master.yaml
---
clusterName: "elasticsearch"
nodeGroup: "master"
roles:
master: "true"
ingest: "false"
data: "false"
replicas: 3

La configurazione imposta il gruppo di nodi su master nella ricerca elastica cluster e imposta il ruolo principale su "true" . Inoltre, il master.yaml crea tre repliche del nodo principale.
Il master.yaml completo ha il seguente aspetto:
# master.yaml
---
clusterName: "elasticsearch"
nodeGroup: "master"
roles:
master: "true"
ingest: "false"
data: "false"
replicas: 3
# Permit co-located instances for solitary minikube virtual machines.
antiAffinity: "soft
# Shrink default JVM heap.
esJavaOpts: "-Xmx128m -Xms128m"
# Allocate smaller chunks of memory per pod.
resources:
requests:
cpu: "100m"
memory: "512M"
limits:
cpu: "1000m"
memory: "512M"
# Request smaller persistent volumes.
volumeClaimTemplate:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "standard"
resources:
requests:
storage: 100M
4. Salva il file e chiudi.
5. Apri data.yaml file e aggiungi le seguenti informazioni in alto per configurare i data pod:
# data.yaml
---
clusterName: "elasticsearch"
nodeGroup: "data"
roles:
master: "false"
ingest: "true"
data: "true"
replicas: 2

L'installazione crea due repliche di pod di dati. Imposta i ruoli dei dati e di importazione su "true" . Salva il file e chiudi.
6. Apri il client.yaml file e aggiungi le seguenti informazioni di configurazione in alto:
# client.yaml
---
clusterName: "elasticsearch"
nodeGroup: "client"
roles:
master: "false"
ingest: "false"
data: "false"
replicas: 2
service:
type: "LoadBalancer"

7. Salva il file e chiudi.
Il client ha tutti i ruoli impostati su "false" poiché il cliente gestisce le richieste di servizio. Il tipo di servizio è designato come "LoadBalancer" per bilanciare le richieste di servizio in modo uniforme su tutti i nodi.
Fase 3:distribuisci i pod Elasticsearch in base al ruolo
1. Aggiungi il repository Helm:
helm repo add elastic https://helm.elastic.co

2. Usa helm install
comando tre volte, una per ogni file YAML personalizzato creato nel passaggio precedente:
helm install elasticsearch-multi-master elastic/elasticsearch -f ./master.yaml
helm install elasticsearch-multi-data elastic/elasticsearch -f ./data.yaml
helm install elasticsearch-multi-client elastic/elasticsearch -f ./client.yaml

L'output stampa i dettagli della distribuzione.
3. Attendere la distribuzione dei membri del cluster. Utilizzare il comando seguente per controllare lo stato di avanzamento e confermare il completamento:
kubectl get pods

L'output mostra PRONTO colonna con valori 1/1 una volta completata la distribuzione per tutti e sette i pod.
Fase 4:verifica della connessione
1. Per accedere a Elasticsearch in locale, inoltra la porta 9200 utilizzando il kubectl
comando:
kubectl port-forward service/elasticsearch-master

Il comando inoltra la connessione e la mantiene aperta. Lascia aperta la finestra del terminale e procedi al passaggio successivo.
2. In un'altra scheda del terminale, verifica la connessione con:
curl localhost:9200
L'output stampa le informazioni sulla distribuzione.

In alternativa, accedi a localhost:9200 dal browser.

L'output mostra i dettagli del cluster in formato JSON, a indicare che la distribuzione è riuscita.
Come distribuire Elasticsearch con sette pod utilizzando un grafico Helm predefinito
Un grafico Helm predefinito per la distribuzione di Elasticsearch su sette pod dedicati è disponibile nel repository Bitnami. L'installazione del grafico in questo modo evita di creare file di configurazione manualmente.
Passaggio 1:configura Kubernetes
1. Assegna almeno 4 CPU e 8192 MB di memoria:
minikube config set cpus 4
minikube config set memory 8192
2. Avvia Minikube:
minikube start
L'istanza Minikube inizia con la configurazione specificata.
Fase 2:aggiungi il repository Bitnami e distribuisci il grafico Elasticsearch
1. Aggiungi il repository Bitnami Helm con:
helm repo add bitnami https://charts.bitnami.com/bitnami

2. Installa il grafico eseguendo:
helm install elasticsearch --set master.replicas=3,coordinating.service.type=LoadBalancer bitnami/elasticsearch

Il comando ha le seguenti opzioni:
- Elasticsearch viene installato con il nome della versione
elasticsearch
. master.replicas=3
aggiunge tre repliche master al cluster. Ti consigliamo di restare con tre nodi master.coordinating.service.type=LoadBalancer
imposta i nodi client per bilanciare le richieste di servizio in modo uniforme su tutti i nodi.
3. Monitora la distribuzione con:
kubectl get pods

I sette pod mostrano 1/1 nel PRONTO colonna quando Elasticsearch viene distribuito completamente.
Fase 3:verifica la connessione
1. Inoltra la connessione alla porta 9200 :
kubectl port-forward svc/elasticsearch-master 9200
Lascia la connessione aperta e procedi al passaggio successivo.
2. In un'altra scheda del terminale, verifica la connessione con:
curl localhost:9200

In alternativa, accedi allo stesso indirizzo dal browser per visualizzare le informazioni sulla distribuzione in formato JSON.