Blog

Cómo desplegar Elasticsearch en Azure AKS Automatic

Aprende cómo desplegar Elasticsearch con Kibana en Azure usando AKS Automatic y ECK para una configuración parcialmente gestionada de Elasticsearch.

Este artículo forma parte de un serial en la que aprenderemos a instalar Elasticsearch usando diferentes infraestructuras.

Esfuerzos de despliegue de Elasticsearch

ECK requiere mucho más esfuerzo que las soluciones Elastic Cloud basadas en el Marketplace, pero es más automatizado que desplegar VMs por tu cuenta, porque el operador Kubernetes se encargará de la orquestación del sistema y el escalado de nodos.

Esta vez, vamos a trabajar con el Azure Kubernetes Service (AKS), usando Automático. En los otros artículos aprenderás a usar Azure VM y Azure Marketplace.

¿Qué es AKS Automático?

Azure Kubernetes Service (AKS) gestiona automáticamente la configuración del clúster, asigna dinámicamente los recursos e integra las mejores prácticas de seguridad mientras preserva la flexibilidad de Kubernetes, permitiendo a los desarrolladores pasar de la imagen del contenedor a la aplicación desplegada en cuestión de minutos.

AKS Automatic elimina la mayor parte de la gestión del cluster y logra un buen equilibrio entre simplicidad y flexibilidad. La elección correcta depende de tu caso de uso, pero la decisión es más fácil si planeas:

  • Despliega un entorno de pruebas: El despliegue es rápido y sencillo, lo que lo hace ideal para experimentos rápidos o clústeres de corta duración.

  • Trabajar sin requisitos estrictos de máquinas virtuales, almacenamiento o redes: AKS Automatic ofrece valores predeterminados, así que si esos se ajustan a tus necesidades, te ahorra más configuraciones.

  • Empieza por Kubernetes por primera vez: Al gestionar gran parte de la configuración del clúster, AKS Automatic reduce la curva de aprendizaje y permite a los equipos centrar en sus aplicaciones.

 Cómo crear un clúster automático de Azure Kubernetes Service (AKS)

Fuente: Quickstart: Crear un Azure Kubernetes Service (AKS) Clúster automático (vista previa)

Para Elasticsearch, vamos a usar Elastic Cloud on Kubernetes (ECK), que es el operador oficial de Elastic Kubernetes que simplifica la orquestación de despliegues de Kubernetes en Elastic Stack.

Cómo configurar AKS Automatic

1. Iniciar sesión en el Portal Microsoft Azure.

2. En la parte superior derecha, haz clic en el botón Cloud Shell para acceder a la consola y desplegar el clúster AKS desde allí. Alternativamente, puedes usar Azure Cloud Shell.

Recuerda actualizar el ID del proyecto con el tuyo durante el tutorial.

Abrir el AKS debería ver como en la captura de pantalla de arriba.

3. Instalar la extensión aks-preview de Azure CLI. Esta versión previa nos permitirá seleccionar --sku automatic en la creación del clúster, lo que habilita la función AKS Automática.

az extension add --name aks-preview

Si ves este mensaje, significa que la extensión AKS se instaló correctamente.

4. Registrar banderas de características usando el comando az feature register

az feature register --namespace Microsoft.ContainerService --name AutomaticSKUPreview

Veréis los detalles sobre la subscripción a la función que acabamos de crear:

Verifica el estado del registro hasta que cambie de "Registrado" a "Registrado". Puede tardar unos minutos en terminar el registro.

az feature show --namespace Microsoft.ContainerService --name AutomaticSKUPreview

Ejecuta az provider register para propagar los cambios.

az provider register --namespace Microsoft.ContainerService

5. Crear un grupo de recursos

Un grupo de recursos es un grupo lógico de recursos Azure que deben gestionar y desplegar.

az group create --name elastic-resource --location eastus

6. Crear un clúster de Autopilot. Lo llamaremos myAKSAutomaticCluster y usaremos el grupo de recursos que acabamos de crear. Cerciórate de tener disponibles 16 vCPUs en cualquiera de los siguientes tamaños de VM: Standard_D4pds_v5, Standard_D4lds_v5, Standard_D4ads_v5, Standard_D4ds_v5, Standard_D4d_v5, Standard_D4d_v4, Standard_DS3_v2 Standard_DS12_v2 para que AKS asigne recursos.

az aks create \
    --resource-group elastic-resource \
    --name myAKSAutomaticCluster \
    --sku automatic \
    --generate-ssh-keys

* Si aparecen MissingSubscriptionRegistration errores, vuelve al paso 4 con las subscripciones que faltan. Por ejemplo, The subscription is not registered to use namespace 'microsoft.insights' requiere correr az provider register --namespace Microsoft.Insights.

Sigue el inicio de sesión interactivo:

Aparecerá un mensaje pidiendo ejecutar "az login". Tienes que ejecutar ese comando y luego esperar.

7. Esperar a que esté listo. Tarda unos 10 minutos en crear.

8. Configurar el acceso en línea de comandos de kubectl.

az aks get-credentials --resource-group elastic-resource --name myAKSAutomaticCluster

Ten en cuenta que la extensión que instalamos está habilitando AKS Automatic.

9. Confirmar que los nodos se desplegaron.

kubectl get nodes

Verás un mensaje de error prohibido; copia el ID de usuario del error.

10. Agregar a tu usuario al control de acceso de AKS.

Consigue el ID AKS. Copia la salida del comando.

az aks show --resource-group elastic-resource  --name myAKSAutomaticCluster --query id --output tsv

Crea una asignación de roles usando el ID AKS y el ID principal de tu usuario.

az role assignment create --role "Azure Kubernetes Service RBAC Cluster Admin" --assignee <PRINCIPAL_ID> --scope <AKS_ID>

11. Intenta confirmar que los nodos se desplegaron de nuevo.

kubectl get nodes

12. Instalar la Nube Elástica en el operador 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

13. Vamos a crear una instancia de Elasticsearch de un solo nodo con los valores predeterminados.

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

Desactivamos nmap porque la máquina AKS predeterminada tiene un valor de 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í.

14. Desplieguemos también un clúster Kibana de un solo nodo. Para Kibana, agregaremos un balanceador de carga, que nos dará una IP externa que podremos usar para llegar 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:
      spec:
        type: LoadBalancer
  count: 1
  elasticsearchRef:
    name: quickstart
EOF

Por defecto, AKS Automatic configurará el balanceador de carga como público; Puedes cambiar el comportamiento configurando la anotación de metadatos:

service.beta.kubernetes.io/azure-load-balancer-internal: "true"

15. Comprueba que tus cápsulas estén funcionando.

kubectl get pods

16. También puedes ejecutar kubectl get elasticsearch y kubectl get kibana para estadísticas más específicas como la versión de Elasticsearch, nodos y salud.

17. Accede a tus servicios.

kubectl get svc

Esto te mostrará la URL externa de Kibana bajo EXTERNAL-IP. Puede que el balanceador de carga tarde unos minutos en provisionarse. Copia el valor de EXTERNAL-IP.

18. Consigue la contraseña de Elasticsearch para el usuario 'elastic':

kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode

19. Accede a Kibana desde tu navegador:

a. URL: https://<EXTERNAL_IP>:5601

b. Nombre de usuario:elastic

c. Contraseña:c44A295CaEt44D6xIzN6Zs5m (del paso anterior)

20. Al acceder a Elastic Cloud 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 manifiesto YML con la nueva configuración:

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 ocurre con Kibana:

cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 9.0.0
  http:
    service:
      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 Node.js memoria (máximo-tamaño de espacio antiguo)

Ten en cuenta que las reclamaciones de volumen existentes no pueden reducir. Tras aplicar la actualización, el operador realizará los cambios con un tiempo de interrupción mínimo.

Recuerda eliminar el clúster cuando termines de hacer pruebas para evitar costos innecesarios.

az aks delete --name myAKSAutomaticCluster --resource-group elastic-resource

Conclusión

Emplear Azure AKS Automatic con ECK proporciona una solución equilibrada para desplegar Elasticsearch y Kibana: reduce la complejidad operativa, garantiza escalado y actualizaciones automatizadas, y aprovecha la flexibilidad de Kubernetes. Este enfoque es ideal para equipos que buscan un proceso de despliegue fiable, repetible y manteniendo sin gestionar manualmente cada detalle de la infraestructura, lo que lo convierte en una opción práctica tanto para entornos de pruebas como de producción.

Pasos siguientes

Si quieres leer más sobre Kubernetes, puedes consultar la documentación oficial aquí:

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