En este instructivo, se muestra cómo ejecutar Elastic Stack en GKE con el operador de Elastic Cloud on Kubernetes (ECK).
Elastic Stack es una solución de código abierto popular que se usa para registrar, supervisar y analizar datos en tiempo real. Cuando usas Elastic Stack en GKE, puedes beneficiarte de la escalabilidad y la confiabilidad que proporcionan Autopilot de GKE y las potentes funciones de Elastic Stack.
Este instructivo está dirigido a los administradores de Kubernetes o ingenieros de confiabilidad de sitios.
Prepare el entorno
En este instructivo, usarás Cloud Shell para administrar recursos alojados en Google Cloud. Cloud Shell tiene preinstalado el software que necesitas para este instructivo, incluidos kubectl
, Helm y la CLI de gcloud.
Para configurar tu entorno con Cloud Shell, sigue estos pasos:
Para iniciar una sesión de Cloud Shell desde la Google Cloud consola, haz clic en
Activar Cloud Shell en la Google Cloud consola. Esto inicia una sesión en el panel inferior de la consola de Google Cloud .
Agrega 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
Crea un clúster de GKE
Crea un clúster de GKE con la recopilación 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"
Implementar el operador de ECK
Elastic Cloud on Kubernetes (ECK) es una plataforma para implementar y administrar Elastic Stack en clústeres de Kubernetes.
ECK automatiza la implementación y administració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, el servidor de administración del rendimiento de las aplicaciones y otros componentes de Elastic Stack en Kubernetes. Esto permite que los desarrolladores y los equipos de DevOps configuren y administren clústeres de Elastic Stack a gran escala.
ECK admite varios nodos de Elasticsearch, conmutación por error automática de aplicaciones, actualizaciones sin interrupciones y encriptación SSL. ECK también incluye funciones que te permiten supervisar y solucionar problemas de rendimiento de Elasticsearch.
Instala el gráfico de Helm para 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 la aplicación esté lista:
watch kubectl get pods -n elastic-system
El resultado es similar al siguiente:
NAME READY STATUS RESTARTS AGE elastic-operator-0 1/1 Running 0 31s
Cuando el operador
STATUS
seaRunning
, presionaCtrl+C
para volver a la línea de comandos.
Configura Elastic Stack con ECK
Si usas Elastic Stack con Elasticsearch, Kibana y Elastic Agent en modo de flota, puedes configurar una solución potente, escalable y completamente administrada para administrar y visualizar datos mediante Kibana.
Kibana es una herramienta de visualización y análisis de datos de código abierto que te permite buscar, analizar y visualizar datos en Elasticsearch.
Elastic Agent es un transportador de datos liviano que recopila datos de diferentes fuentes, como registros o métricas, y los envía de forma automática a Elasticsearch.
Elastic Fleet es un modo de operación en el que los agentes de Elastic se informan a un servidor de flota central, que controla su configuración y administración. El servidor de flota simplifica la implementación, la configuración y el escalamiento de los agentes de Elastic, lo que facilita la administración de implementaciones grandes y complejas.
El ajuste de escala automático de Elasticsearch es una función de autosupervisión que puede informar cuando se necesitan recursos adicionales según una política definida por el operador. Por ejemplo, una política puede especificar que un nivel determinado debe escalar en función del espacio disponible en el disco. Elasticsearch puede supervisar el espacio en el disco y sugerir escalamiento si predice una escasez, aunque todavía depende del operador agregar los recursos necesarios. Para obtener más información sobre el ajuste de escala automático de Elasticsearch, consulta Ajuste de escala automático en la documentación de Elasticsearch.
Configura un clúster de Elasticsearch
Elasticsearch proporciona un motor distribuido de búsqueda y estadísticas RESTful diseñado para almacenar y buscar grandes volúmenes de datos con rapidez y eficiencia.
Cuando implementas Elastic Stack en Kubernetes, debes administrar la configuración de la VM, en particular el vm.max_map_count setting
, que requiere Elasticsearch. vm.max_map_count
especifica la cantidad de áreas de memoria que un proceso puede asignar a un archivo. Elasticsearch debe tener este valor configurado como al menos 262144
para ejecutarse de manera óptima. Para obtener más información, consulta Memoria virtual en la documentación de ECK.
Revisa el siguiente manifiesto:
En este manifiesto, se describe un DaemonSet que configura la configuración del kernel directamente en el host. Un DaemonSet es un controlador de Kubernetes que garantiza que se ejecute una copia de un Pod en cada nodo de un clúster.
El manifiesto anterior está en una lista de anunciantes permitidos para ejecutarse en Autopilot. No modifiques este 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 manifiesto:
En este manifiesto, se 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 roles del nodo de Elasticsearch. Para obtener más información sobre los roles del nodo, 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 es similar al siguiente:
NAME HEALTH NODES VERSION PHASE AGE elasticsearch green 3 8.8.0 Ready 5m3s
Cuando el clúster de Elasticsearch
HEALTH
seagreen
yPHASE
seaReady
, presionaCtrl+C
para volver a la línea de comandos.
Configura Kibana
Revisa el siguiente manifiesto:
En este manifiesto, se describe un recurso personalizado de Kibana que configura las políticas de agentes para el servidor de la 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 es similar al siguiente:
NAME HEALTH NODES VERSION AGE kibana green 1 8.8.0 6m47s
Cuando
HEALTH
de los Pods seagreen
, vuelve a la línea de comandos presionandoCtrl+C
.
Configura un balanceador de cargas para acceder a Kibana
Para acceder a Kibana, crea un objeto Ingress de Kubernetes, un certificado administrado por Google, una dirección IP global y una zona de DNS.
Crea una dirección IP externa global:
gcloud compute addresses create "elastic-stack" --global
Crea una zona administrada 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"
Para delegar la zona DNS como un subdominio del dominio base, crea 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 manifiesto:
Este manifiesto describe un ManagedCertificate que aprovisiona un certificado SSL para establecer la conexión TLS.
Aplica el manifiesto al clúster:
kubectl apply -f ingress.yaml
Configura los agentes de Elastic
Revisa el siguiente manifiesto:
En este manifiesto, se 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 es 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
HEALTH
de los Pods seagreen
, vuelve a la línea de comandos presionandoCtrl+C
.
Configurar el registro y la supervisión
Elastic Stack puede usar el exportador de kube-state-metrics para recopilar 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
elastic
de Kibana predeterminadas: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 y accede a Kibana con las credenciales.En el menú, selecciona Analytics y, luego, Paneles.
En el campo de texto de búsqueda, ingresa Descripción general de Kubernetes y selecciona Panel de descripción general para ver las métricas básicas.
Es posible que algunos de los paneles del panel no muestren datos ni mensajes de error porque GKE limita el acceso a algunos de los extremos del plano de control que Kibana usa para obtener métricas del clúster.