Cómo desplegar Elasticsearch en GCP GKE Autopilot
Aprende cómo desplegar un clúster de Elasticsearch en GCP usando GKE Autopilot y ECK para una configuración parcialmente gestionada de Elasticsearch.
En este artículo, vamos a aprender cómo desplegar Elasticsearch en Google Cloud Kubernetes (GKE) usando Autopilot.
Para Elasticsearch, vamos a emplear Elastic Cloud on Kubernetes (ECK), que es el operador oficial de Elasticsearch Kubernetes que simplifica la orquestación de despliegues de Kubernetes de todos los componentes de Elastic Stack.
Para obtener más información sobre cómo desplegar clústeres de Elasticsearch en diferentes infraestructuras de GCP, puedes leer nuestros artículos de introducción sobre Google Cloud Compute y Google Cloud Marketplace.
Esfuerzo de despliegue de Elasticsearch

¿Qué es GKE Autopilot?
Google Kubernetes Engine (GKE) Autopilot ofrece una experiencia Kubernetes totalmente gestionada donde Google se encarga de la configuración del clúster, la gestión de nodos, la seguridad y el escalado, mientras los desarrolladores se centran en desplegar aplicaciones, lo que les permite a los equipos pasar del código a la producción en minutos con las mejores prácticas integradas.

Fuente: https://cloud.google.com/blog/products/containers-kubernetes/introducing-gke-autopilot
¿Cuándo usar el ECK en Google Cloud?
Elastic Cloud on Kubernetes (ECK) es el más adecuado para organizaciones con infraestructura existente de Kubernetes que buscan desplegar Elasticsearch con características avanzadas como roles de nodo dedicados, alta disponibilidad y automatización.
¿Cómo configurar ECK en Google Cloud?
1. Inicia sesión en Google Cloud Console.
2. En la parte superior derecha haz clic en el botón Cloud Shell para acceder a la consola y desplegar el clúster de GKE desde allí. Alternativamente, puedes usar la CLI de gcloud.
Recuerda actualizar el identificador del proyecto con el tuyo durante el tutorial.

3. Habilita la API de Google Kubernetes Engine.

Haz clic en Siguiente.
Ahora, la API de Kubernetes Engine debería mostrarse habilitada al buscar la API de Kubernetes Engine.

4. En Cloud Shell, crea un clúster de Autopilot. Lo llamaremos autopilot-cluster-1, y también reemplazaremos autopilot-test por el id de tu proyecto.
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=DISABLED5. Espera hasta que esté listo. Tarda unos 10 minutos en crearse.

Aparecerá un mensaje de confirmación después de configurar correctamente el clúster.
6. Configura el acceso a la línea de comandos de kubectl.
gcloud container clusters get-credentials autopilot-cluster-1 --region us-central1 --project autopilot-test-457216Deberías ver:

Entrada de kubeconfig generada para autopilot-cluster-1.
7. Instala el operador Elastic Cloud on Kubernetes (ECK).
# 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.yaml8. Creemos una instancia de Elasticsearch de un solo nodo con los valores por defecto.
Si deseas consultar algunas recetas para diferentes configuraciones, puedes visitar este enlace.
Ten en cuenta que si no especificas un storageClass, ECK usará el que se configura por defecto, que para GKE es standard-rwo y usa el controlador CSI de disco persistente de Compute Engine, y creará un volumen de 1GB con él.
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
EOFDeshabilitamos nmap porque la máquina GKE predeterminada tiene un valor vm.max_map_count demasiado bajo. No se recomienda desactivarlo para la producción, pero sí aumentar el valor de vm.max_map_count. Puedes leer más sobre cómo hacerlo aquí.
9. También despleguemos un clúster de un solo nodo Kibana. Para Kibana, agregaremos un LoadBalancer que nos dará una IP externa que podemos usar para acceder a Kibana desde nuestro dispositivo.
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
EOFNota la anotación:
cloud.google.com/l4-rbs: "enabled"
Es muy importante porque le indica a Autopilot que proporcione un LoadBalancer orientado al público. Si no se configura, el LoadBalancer será interno.
10. Verifica que tus pods estén en ejecución
kubectl get pods
11. También puedes run kubectl get elasticsearch y kubectl get kibana para obtener estadísticas más específicas como la versión de Elasticsearch, nodos y salud.


12. Accede a tus servicios.
kubectl get svc
Esto te mostrará la URL externa de Kibana bajo EXTERNAL-IP. Puede que el LoadBalancer tarde unos minutos en provisionar. Copia el valor de EXTERNAL-IP.
13 Obtén la contraseña de Elasticsearch para el usuario ‘elastic’:
kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode
14. Accede a Kibana desde tu navegador:
URL:<EXTERNAL_IP> https://:5601
Nombre de usuario: elastic
Contraseña: 28Pao50lr2GpyguX470L2uj5 (del paso anterior)

15. Al acceder desde tu navegador, verás la pantalla de bienvenida.

Si quieres cambiar las especificaciones del clúster de Elasticsearch, como cambiar o redimensionar nodos, puedes volver a aplicar el manifesto yml con los nuevos ajustes:
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
EOFEn este ejemplo, vamos a agregar un nodo más y modificar la RAM y la CPU. Como puedes ver, ahora kubectl get elasticsearch muestra 2 nodos:

Lo mismo aplica para 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
EOFPodemos ajustar la CPU/RAM del contenedor y también el uso de memoria de Node.js (max-old-space-size).
Ten en cuenta que las solicitudes de volumen existentes no pueden reducirse. Después de aplicar la actualización, el operador realizará los cambios con el mínimo tiempo de interrupción.
Recuerda eliminar el clúster cuando termines de probar para evitar costos innecesarios.
gcloud container clusters delete autopilot-cluster-1Pasos siguientes
Si quieres saber más sobre Kubernetes y el motor de Google Kubernetes, consulta estos artículos:




