Blog

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

Esfuerzo de despliegue de Elasticsearch ECK.

¿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.

Contenedores de GKE Autopilot.

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.

¿Cómo configurar Elasticsearch en GCP GKE Autopilot?

3. Habilita la API de Google Kubernetes Engine.

Habilitar 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.

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=DISABLED

5. Espera hasta que esté listo. Tarda unos 10 minutos en crearse.

Imagen de una configuración de cluster de Autopilot.

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-457216

Deberí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.yaml

8. 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
EOF

Deshabilitamos 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
EOF

Nota 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)

Pantalla de bienvenida de Elastic.

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

Página de inicio de Elasticsearch.

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
EOF

En 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
EOF

Podemos 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-1

Pasos siguientes

Si quieres saber más sobre Kubernetes y el motor de Google Kubernetes, consulta estos artículos:

Contenido relacionado

Cómo migrar datos entre diferentes versiones de Elasticsearch y entre clusters

Kofi Bartlett

Introducción de la interfaz de reglas de consulta Elasticsearch en Kibana

Jhon Guzmán

Elasticsearch en JavaScript de la manera correcta, parte II

Jeffrey Rengifo

Implementación de búsqueda semántica: Construcción de una búsqueda de recetas con Elasticsearch

Andre Luiz

Cómo desplegar Elasticsearch en AWS Marketplace

Eduard Martin

¿Estás listo para crear experiencias de búsqueda de última generación?

No se logra una búsqueda suficientemente avanzada con los esfuerzos de uno. Elasticsearch está impulsado por científicos de datos, operaciones de ML, ingenieros y muchos más que son tan apasionados por la búsqueda como tú. Conectemos y trabajemos juntos para crear la experiencia mágica de búsqueda que te dará los resultados que deseas.

Pruébalo tú mismo