Ingeniería

Primeros pasos con Elastic Cloud en Kubernetes: Despliegue

A pesar de que aún se encuentra en versión alfa, el reciente anuncio de Elastic Cloud en Kubernetes (ECK) ha generado un importante interés tanto en la comunidad de Elasticsearch como en la de Kubernetes. Desarrollado y soportado por el creador del Elastic Stack, ECK es la mejor manera de desplegar Elastic en Kubernetes. El objetivo de esta serie de dos blogs es guiarte en el proceso paso a paso de lo siguiente:

  1. Despliegue de ECK en un cluster de Kubernetes (Minikube o GKE)
  2. Despliegue del Elastic Stack en ECK
  3. Escalado y actualización de Elasticsearch y Kibana en ECK
  4. Despliegue de una aplicación de muestra instrumentada con Elastic APM y envío de datos de APM al cluster de Elasticsearch administrado con ECK
  5. Despliegue de Metricbeat en Kubernetes como DaemonSet y conexión segura de Metricbeat al cluster de Elasticsearch administrado con ECK

Al finalizar este blog, tendrás un sistema como el que se muestra en el diagrama siguiente. En este primer blog, nos enfocamos en desplegar ECK y el Elastic Stack.

Diagrama de despliegue de ECK

También puedes consultar la página de inicio rápido o la página del producto para obtener más información actualizada sobre ECK.

Creación de tu cluster k8s

Antes de desplegar ECK y tu Elastic Stack, debes tener un cluster de Kubernetes listo. Para este blog, Minikube o Google Kubernetes Engine (GKE) servirán. También soportamos otras distribuciones de Kubernetes como OpenShift, Amazon EKS y Microsoft AKS. Como vamos a desplegar ECK, Elasticsearch, Kibana, APM Server y una aplicación de muestra, recomendamos asignar 16 GB de RAM y 4 cores a tu cluster. También puedes asignar 12 GB de RAM a tu cluster de Kubernetes, pero 16 GB definitivamente te brindarán una experiencia sin problemas.

Minikube

Si usarás Minikube, sigue las instrucciones de instalación para instalarlo. Una vez instalado, configura Minikube con los recursos necesarios e inícialo:

minikube config set memory 16384 
minikube config set cpus 4
minikube start

El dashboard de Kubernetes es sumamente conveniente para monitorear y administrar tu cluster de Kubernetes. Puedes habilitar el dashboard para Minikube con un comando:

minikube dashboard

Se abre de forma automática una ventana del navegador que muestra el dashboard de Kubernetes. Eso es todo; estás listo para comenzar.

Google Kubernetes Engine (GKE)

Si usarás GKE, sigue la documentación de Google para configurar tu cluster. Nuestro cluster de GKE consiste en un nodo de 15 GB de RAM y 4 vCPU. Puedes elegir un cluster más pequeño, pero no de menos de 12 GB de RAM. Además, para trabajar con GKE, necesitas la herramienta de línea de comandos gcloud.

Una vez que el cluster GKE esté listo y funcionando, usa los comandos siguientes para conectarte a tu cluster y configurar los privilegios requeridos. Con GKE, debes tener permisos de administrador del cluster. Asegúrate de reemplazar el nombre del proyecto, nombre de la zona, nombre del cluster e ID de usuario con tus datos:

gcloud config set project elastic-sa 
gcloud config set compute/zone us-central1-a
gcloud config set container/cluster aquan
gcloud auth login
gcloud container clusters get-credentials aquan --zone us-central1-a --project elastic-sa
kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=adam.quan@elastic.co
kubectl create clusterrolebinding adam.quan-cluster-admin-binding --clusterrole=cluster-admin --user=adam.quan@elastic.co

Por último, usaremos la herramienta de línea de comandos de Kubernetes para interactuar con Minikube o GKE. Sigue las instrucciones para instalar kubectl. Asegúrate de tener instalada la versión 1.11 o posterior de kubectl.

Los artefactos usados en este blog se pueden descargar desde este repositorio de GitHub.

Despliegue del operador de Elasticsearch

¿Puedes creer que solo necesitas un comando para desplegar ECK? Es cierto, solo ejecuta el comando siguiente para desplegar el ECK más reciente (0.9.0 al momento de esta publicación). Simple y sencillo.

kubectl apply -f https://download.elastic.co/downloads/eck/0.9.0/all-in-one.yaml

Una vez desplegado, puedes usar el comando siguiente para monitorear logs del operador y asegurarte de que todo funcione bien. Solo le toma unos instantes a ECK para estar listo y en funcionamiento.

kubectl -n elastic-system logs -f statefulset.apps/elastic-operator

Despliegue del Elastic Stack

Ahora que ECK está funcionando, estamos listos para desplegar el Elastic Stack, que también se hace con un solo comando. Echa un vistazo a apm_es_kibana.yaml y ve lo sencillo que es configurar Kibana y el servidor APM de modo que puedan comunicarse entre sí usando elasticsearchRef.

Existen varias maneras de personalizar tu despliegue, como:

  • Plantilla de pods
  • Configuración de nodos
  • Memoria virtual
  • Certificado HTTP personalizado
  • Configuración segura

Despliega el stack con el comando siguiente:

kubectl apply -f apm_es_kibana.yaml

Comprueba el estado de Elasticsearch, Kibana y APM Server con kubectl o el dashboard de Kubernetes y asegúrate de que todos estén en verde y listos:

kubectl get elasticsearch,kibana,apmserver

Cuando los tres componentes estén en verde, tu cluster de Elasticsearch estará en funcionamiento y listo para el ingreso de datos. ECK realiza muchas tareas por nosotros. Antes de continuar, veamos lo que hizo en realidad ECK para nuestro cluster:

  • La seguridad está activada para ECK. Todos los recursos del Elastic Stack desplegados por ECK se aseguran de forma predeterminada. Se provisionó el usuario de autenticación básico integrado elastic, y el tráfico de red hacia, desde y dentro de tu cluster de Elastic se asegura con TLS.
  • Certificados: de forma predeterminada, se usa un certificado de CA autofirmado para cada cluster. Se pueden configurar certificados HTTPS personalizados.
  • Exposición de servicio predeterminada: se crea de forma automática un ClusterIP Service para tu cluster y Kibana. Claramente puedes configurarlos para que sean del tipo LoadBalancer, si es necesario.

Con Elasticsearch, Kibana y APM Server en funcionamiento, veámoslo desde Kibana.

Acceso a Kibana

De forma predeterminada, Kibana está expuesto como un servicio con una IP de cluster accesible desde el cluster, pero no expuesto a internet. Sin embargo, puedes usar el comando de reenvío de puerto siguiente para que Kibana sea accesible desde tu laptop:

kubectl port-forward service/kibana-sample-kb-http 5601

Para poder iniciar sesión en Kibana, debemos obtener las credenciales del usuario elastic predeterminado. Puedes ejecutar kubectl get secrets y luego inspeccionar el secreto para encontrar la ruta JSON del secreto. Este es el secreto y la ruta correctos de nuestro caso:

echo `kubectl get secret elasticsearch-sample-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode`

Se muestra la contraseña para el usuario elastic. Cópiala y guárdala en un bloc de notas.

Ahora, abre el navegador y conéctate a https://localhost:5601. Como estamos usando un certificado autofirmado, necesitarás aceptar la advertencia de seguridad del navegador. Inicia sesión en Kibana con el usuario elastic y la contraseña que acabas de recuperar. Se te dirigirá a la página de inicio de Kibana. ¡El cluster está totalmente listo!

Escalado y actualización

Escalar y actualizar tu cluster de Elasticsearch en ECK es tan simple como modificar la configuración de despliegue y aplicarla con kubectl.

Escalado

Modifica tu manifiesto de despliegue apm_es_kibana.yaml cambiando el tamaño de la memoria de tu contenedor elasticsearch a 3 GB de 2 GB en la sección siguiente:

        containers: 
- name: elasticsearch
resources:
limits:
memory: 3Gi

Guarda el archivo y escala el nodo con este comando:

kubectl apply -f apm_es_kibana.yaml

De inmediato, cambia a tu consola de Kubernetes, allí verás que se está creando un pod de Elasticsearch nuevo. ECK está escalando tu nodo de Elasticsearch sin tiempo de inactividad. En unos momentos, verás el pod nuevo en funcionamiento, y el pod original desaparecerá. Los datos del pod anterior también se pasaron aquí sin problemas.

Por supuesto que puedes escalar tu cluster de otras maneras, como agregándole más nodos. Sin importar cómo lo hagas, es un comando kubectl apply simple.

Pod de Elasticsearch en proceso de creación

Actualización

Ahora, actualicemos el cluster a la versión 7.2.0 simplemente cambiando la versión de Elasticsearch, Kibana y APM Server de 7.1.0 a 7.2.0 en el archivo de manifiesto de despliegue apm_es_kibana.yaml. Guarda y aplica la actualización con el comando siguiente:

kubectl apply -f apm_es_kibana.yaml

Del mismo modo, desde la consola de Kubernetes, puedes ver que ECK actualiza sin problemas Elasticsearch, Kibana y APM Server sin tiempo de inactividad.

Una vez completado el proceso de actualización, verifica que estés ejecutando la versión 7.2.0 del Elastic Stack. ¿Ya estás convencido de que ECK es bastante poderoso? Esperamos que sí.

Resumen

Esperamos que hayas disfrutado de esta experiencia de primeros pasos rápida con Elastic Cloud en Kubernetes y que veas lo sencillo que es en realidad. En la parte 2 de este blog, desplegaremos una aplicación simple instrumentada con APM y haremos que envíe datos de APM a nuestro cluster administrado con ECK. También desplegaremos Metricbeat en Kubernetes para enviar datos de métricas al cluster.