En este tutorial se explica cómo ejecutar Elastic Stack en GKE mediante el operador Elastic Cloud on Kubernetes (ECK).
Elastic Stack es una solución de código abierto popular que se usa para registrar, monitorizar y analizar datos en tiempo real. Si usas Elastic Stack en GKE, puedes beneficiarte de la escalabilidad y la fiabilidad que ofrecen GKE Autopilot y las potentes funciones de Elastic Stack.
Este tutorial está dirigido a administradores de Kubernetes o ingenieros de fiabilidad de sitios.
Preparar el entorno
En este tutorial, usarás Cloud Shell para gestionar los recursos alojados en Google Cloud. Cloud Shell tiene preinstalado el software que necesitas para este tutorial, como kubectl
, Helm y la CLI de gcloud.
Para configurar tu entorno con Cloud Shell, sigue estos pasos:
Inicia una sesión de Cloud Shell desde la Google Cloud consola
haciendo clic en Activar Cloud Shell en la Google Cloud consola. Se iniciará una sesión en el panel inferior de la consola Google Cloud .
Añade un repositorio de gráficos de Helm y actualízalo:
helm repo add elastic https://helm.elastic.co helm repo update
Clona el repositorio de GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
Cambia al directorio de trabajo:
cd kubernetes-engine-samples/observability/elastic-stack-tutorial
Crear un clúster de GKE
Crea un clúster de GKE con la recogida de métricas del plano de control habilitada:
gcloud container clusters create-auto elk-stack \
--location="us-central1" \
--monitoring="SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER"
Desplegar el operador de ECK
Elastic Cloud on Kubernetes (ECK) es una plataforma para desplegar y gestionar Elastic Stack en clústeres de Kubernetes.
ECK automatiza el despliegue y la gestión de clústeres de Elastic Stack, lo que simplifica el proceso de configuración y mantenimiento de Elastic Stack en Kubernetes. Proporciona un conjunto de recursos personalizados de Kubernetes que puedes usar para crear y configurar Elasticsearch, Kibana, Application Performance Management Server y otros componentes de Elastic Stack en Kubernetes. Esto permite a los desarrolladores y a los equipos de DevOps configurar y gestionar clústeres de Elastic Stack a gran escala.
ECK admite varios nodos de Elasticsearch, conmutación por error automática de aplicaciones, actualizaciones fluidas y cifrado SSL. ECK también incluye funciones que te permiten monitorizar y solucionar problemas de rendimiento de Elasticsearch.
Instala el gráfico de Helm de 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"
Espera a que el operador esté preparado:
watch kubectl get pods -n elastic-system
El resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE elastic-operator-0 1/1 Running 0 31s
Si el operador
STATUS
esRunning
, vuelve a la línea de comandos pulsandoCtrl+C
.
Configurar Elastic Stack con ECK
Si usas Elastic Stack con Elasticsearch, Kibana y Elastic Agent en modo Fleet, puedes configurar una solución potente, escalable y totalmente gestionada para gestionar y visualizar datos con Kibana.
Kibana es una herramienta de código abierto de análisis y visualización de datos que te permite buscar, analizar y visualizar datos en Elasticsearch.
Elastic Agent es un transportador de datos ligero que recoge datos de diferentes fuentes, como registros o métricas, y los envía automáticamente a Elasticsearch.
Elastic Fleet es un modo de funcionamiento en el que los agentes de Elastic envían informes a un servidor de flota central, que gestiona su configuración. El servidor de flota simplifica el despliegue, la configuración y el escalado de los agentes de Elastic, lo que facilita la gestión de despliegues grandes y complejos.
El autoescalado de Elasticsearch es una función de automonitorización que puede informar cuando se necesitan recursos adicionales en función de una política definida por el operador. Por ejemplo, una política puede especificar que un determinado nivel debe escalarse en función del espacio de disco disponible. Elasticsearch puede monitorizar el espacio en disco y sugerir un escalado si predice una escasez, aunque sigue siendo responsabilidad del operador añadir los recursos necesarios. Para obtener más información sobre el autoescalado de Elasticsearch, consulta Autoescalado en la documentación de Elasticsearch.
Configurar un clúster de Elasticsearch
Elasticsearch proporciona un motor de búsqueda y analíticas distribuido basado en REST diseñado para almacenar y buscar grandes volúmenes de datos de forma rápida y eficiente.
Cuando despliegues Elastic Stack en Kubernetes, debes gestionar la configuración de la VM, en concreto la vm.max_map_count setting
, que es necesaria para Elasticsearch. vm.max_map_count
especifica el número de áreas de memoria que un proceso puede asignar a un archivo. Elasticsearch debe tener este valor definido en 262144
como mínimo para funcionar de forma óptima. Para obtener más información, consulta Memoria virtual en la documentación de ECK.
Revisa el siguiente archivo de manifiesto:
Este manifiesto describe un DaemonSet que configura directamente el ajuste del kernel en el host. Un DaemonSet es un controlador de Kubernetes que se asegura de que se ejecute una copia de un Pod en cada nodo de un clúster.
El manifiesto anterior está en una lista de permitidos para ejecutarse en Autopilot. No modifiques este archivo de manifiesto, incluidas las imágenes del contenedor.
Aplica este manifiesto a tu clúster:
kubectl apply -f max-map-count-setter-ds.yaml
Revisa el siguiente archivo de manifiesto:
Este manifiesto define un clúster de Elasticsearch con los siguientes campos:
initContainers
: espera a que cambie la configuración del kernel del host de memoria virtual.podDisruptionBudget
: especifica que el clúster no se destruirá durante el proceso de desfragmentación de los pods.config.node.roles
: configuración de los roles de los nodos de Elasticsearch. Para obtener más información sobre los roles de los nodos, consulta Nodo en la documentación de Elasticsearch.
Aplica este manifiesto a tu clúster:
kubectl apply -f elasticsearch.yaml
Espera a que el clúster de Elasticsearch esté listo:
watch kubectl --namespace elastic-system get elasticsearches.elasticsearch.k8s.elastic.co
El resultado debería ser similar al siguiente:
NAME HEALTH NODES VERSION PHASE AGE elasticsearch green 3 8.8.0 Ready 5m3s
Cuando el clúster de Elasticsearch
HEALTH
estégreen
yPHASE
estéReady
, vuelve a la línea de comandos pulsandoCtrl+C
.
Configurar Kibana
Revisa el siguiente archivo de manifiesto:
Este manifiesto describe un recurso personalizado de Kibana que configura las políticas de agente para el servidor de flota y los agentes.
Aplica este manifiesto a tu clúster:
kubectl apply -f kibana.yaml
Espera a que los pods estén listos:
watch kubectl --namespace elastic-system get kibanas.kibana.k8s.elastic.co
El resultado debería ser similar al siguiente:
NAME HEALTH NODES VERSION AGE kibana green 1 8.8.0 6m47s
Cuando el estado de los pods
HEALTH
seagreen
, vuelve a la línea de comandos pulsandoCtrl+C
.
Configurar un balanceador de carga para acceder a Kibana
Para acceder a Kibana, crea un objeto Ingress de Kubernetes, un certificado gestionado por Google, una dirección IP global y una zona DNS.
Crea una dirección IP externa global:
gcloud compute addresses create "elastic-stack" --global
Crea una zona gestionada y un conjunto de registros en 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 como subdominio del dominio base creando un conjunto de registros NS con una lista de servidores de nombres. Puedes obtener una lista de servidores de nombres con el siguiente comando:
gcloud dns record-sets describe elk.BASE_DOMAIN \ --type="NS" \ --zone="elk" \ --format="value(DATA)"
Revisa el siguiente archivo de manifiesto:
Este manifiesto describe un ManagedCertificate que aprovisiona un certificado SSL para establecer la conexión TLS.
Aplica el manifiesto a tu clúster:
kubectl apply -f ingress.yaml
Configurar agentes elásticos
Revisa el siguiente archivo de manifiesto:
Este manifiesto describe un agente de Elastic que configura un servidor de flota con ECK.
Aplica este manifiesto a tu clúster:
kubectl apply -f fleet-server-and-agents.yaml
Espera a que los pods estén listos:
watch kubectl --namespace elastic-system get agents.agent.k8s.elastic.co
El resultado debería ser similar al siguiente:
NAME HEALTH AVAILABLE EXPECTED VERSION AGE elastic-agent green 5 5 8.8.0 14m fleet-server green 1 1 8.8.0 16m
Cuando el estado de los pods
HEALTH
seagreen
, vuelve a la línea de comandos pulsandoCtrl+C
.
Configurar el almacenamiento de registros y la monitorización
Elastic Stack puede usar el exportador kube-state-metrics para recoger métricas a nivel de clúster.
Instala 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
Obtén las credenciales de usuario predeterminadas de Kibana
elastic
:kubectl get secret elasticsearch-es-elastic-user -o yaml -n elastic-system -o jsonpath='{.data.elastic}' | base64 -d
Abre
https://elk.BASE_DOMAIN
en tu navegador e inicia sesión en Kibana con las credenciales.En el menú, selecciona Estadísticas y, a continuación, Paneles de control.
En el campo de texto de búsqueda, introduce Resumen de Kubernetes y selecciona Panel de control de resumen para ver las métricas básicas.
Es posible que algunos paneles de control no muestren datos o que muestren mensajes de error porque GKE limita el acceso a algunos de los endpoints del plano de control que Kibana usa para obtener métricas de clúster.