Engineering

Tutorial sobre observabilidad de Kubernetes: Configuración de cluster de K8s y despliegue de app de demostración

En este blog, repasaremos cómo configurar el entorno que usarás para la serie de blogs de tutoriales sobre observabilidad en Kubernetes. Si no viste la Parte 1: Monitoreo de logs y análisis, comienza por allí, dado que este blog es complementario de la serie y no está pensado como un artículo independiente. Una vez que hayas echado un vistazo a ese blog, regresa para configurar tu entorno para el tutorial.

Paso 1: Activar un despliegue (gratuito) de Elasticsearch Service

La forma más fácil de poner en marcha el Elastic Stack para este tutorial es activar una prueba gratuita de 14 días de nuestro Elasticsearch Service en Elastic Cloud. Con algunos clics (sin tarjetas de crédito) tendrás el cluster en marcha. O, si lo prefieres, descarga el Elastic Stack e instálalo de forma local. Todas las instrucciones de este tutorial pueden modificarse con facilidad para que funcionen en un cluster de Elasticsearch independiente en tu propio hardware. 

Paso 2: Configurar cluster de Kubernetes de un solo nodo Minikube

Ahora que tu despliegue del Elastic Stack está listo, pongamos en marcha el entorno de Minikube.

Preparación de un entorno de Kubernetes

En este repaso configuraremos un entorno de Minikube de un solo nodo para ejecutar el resto de las actividades del tutorial, como capturar logs, métricas y datos de rendimiento de las aplicaciones. Si bien hay otras formas de crear un entorno que dé soporte para el tutorial, como clases Strigo.io, GKE y hosts independientes de AWS, en este ejemplo se describe la creación de un entorno de host Debian 9 con capturas de pantalla de Google Cloud.

Nota: Si tienes tu propio cluster de Kubernetes que se ejecuta en uno de los entornos en el cloud, o en tus propios servidores, no necesitas esta parte. Ejecuta estos pasos si no tienes tu propio cluster de Kubernetes a mano.

Configuración inicial

Crea un servidor Debian 9. Comienza con las especificaciones mínimas y después aumenta, si es necesario. Estas son las especificaciones requeridas:

  • 2 o 4 CPU
  • 8 o 16 GB de RAM
  • 100 GB de espacio en disco
  • SO Linux Debian 9 (Stretch)
  • Garantizar la conectividad externa con los puertos 30080-30085 en los servidores seleccionados. Esto puede requerir configurar las reglas del firewall para el servidor.

Ejemplo de configuración de Google Cloud:

Instala los paquetes de requisitos previos

Los pasos siguientes instalarán tu propio cluster de un solo nodo de Kubernetes en el servidor Debian 9. Comienza por ejecutar el comando siguiente:

$ sudo apt-get install -y git tmux

Echa un vistazo al código de mi repositorio de GitHub

Ejecuta el comando siguiente para clonar el código de ejemplo de mi repositorio de GitHub:

$ git clone https://github.com/michaelhyatt/k8s-o11y-workshop

Instala los requisitos previos

Ejecuta el comando siguiente para instalar kubectl, Minikube y Docker:

$ cd k8s-o11y-workshop
$ ./install/install-debian9.sh

Inicia Minikube y Kubernetes

Este comando iniciará el entorno de Minikube:

$ ./install/start_k8s.sh

Asegúrate de que el entorno esté en marcha y sin errores ejecutando el comando siguiente y observando los servicios con estado Running:

$ kubectl get pods --namespace=kube-system

La salida debería verse así:

NAME                                 READY   STATUS    RESTARTS   AGE
coredns-5644d7b6d9-jhjlm             1/1     Running   0          106s
coredns-5644d7b6d9-npwr7             1/1     Running   0          105s
etcd-minikube                        1/1     Running   0          55s
kube-addon-manager-minikube          1/1     Running   0          43s
kube-apiserver-minikube              1/1     Running   0          57s
kube-controller-manager-minikube     1/1     Running   0          47s
kube-proxy-fm476                     1/1     Running   0          105s
kube-scheduler-minikube              1/1     Running   0          50s
kube-state-metrics-57cd6fdf9-gfgl8   1/1     Running   0          102s
storage-provisioner                  1/1     Running   0          101s

Tu cluster de Kubernetes de un solo nodo Minikube ahora está en marcha.

Paso 3: Desplegar la aplicación de demostración

Ahora que tu cluster de Kubernetes está en marcha, despleguemos la aplicación de demostración.

Crea y actualiza los secretos y detalles de conexión

Verifica que el editor Theia esté en marcha. También puedes usar otros editores como vim y nano para editar el archivo install/create_secrets.sh.

$ kubectl get pods

La salida debería verse así:

NAME                     READY   STATUS    RESTARTS   AGE
theia-86d9888954-npk7l   1/1     Running   0          74s

Asegúrate de haber registrado los detalles siguientes de tu configuración del cluster de Elastic Cloud:

  • cloud_id: debería tener la forma “:”.
  • cloud_auth: debería tener la forma “elastic:
  • apm_url: la URL del servidor APM que comienza con https://.
  • apm_token: un token secreto para conectarse al servidor APM.

Estos detalles se usarán para crear secretos de Kubernetes que conecten los componentes que se ejecutan en este servidor con el cluster de Elastic Cloud.

Encuentra la dirección IP pública del servidor y abre una ventana del navegador en http://

En el editor, abre el archivo install/create_secrets.sh y actualiza los cuatro detalles, según lo anterior. Guarda el archivo cuando termines.

Crea los secretos ejecutando este comando en la ventana de la terminal:

$ ./install/create_secrets.sh

Ejecuta la configuración de Beats

El Elastic Stack ofrece varios Beats para enviar datos a Elasticsearch. Para seguir el final de los archivos de log k8s, usaremos Filebeat. Para recopilar métricas diversas de pods de sistemas y aplicaciones, incluido Kubernetes, usaremos Metricbeat.

La configuración de Beats requiere que crees todos los artefactos relacionados con la ingesta de datos: pipelines de ingesta, plantillas de índice y visualizaciones de Kibana listas para usar. Un comando ejecutado una vez se encargará de todo lo anterior y solo necesita ejecutarse una vez por Beat desplegado en el cluster de Kubernetes.

Para ejecutar los trabajos de configuración de Metricbeat y Filebeat, ejecuta los comandos de configuración siguientes:

$ kubectl create -f $HOME/k8s-o11y-workshop/filebeat/filebeat-setup.yml
$ kubectl create -f $HOME/k8s-o11y-workshop/metricbeat/metricbeat-setup.yml

Después, simplemente espera a que se finalice el trabajo; para lo cual debes observar el cambio de estado de ContainerCreation a Running y por último a Completed con el siguiente comando kubectl:

$ kubectl get pods --namespace=kube-system

Los estados resultantes de los pods deberían ser similares a lo siguiente:

NAME                                 READY   STATUS      RESTARTS   AGE
coredns-5644d7b6d9-jhjlm             1/1     Running     0          2d
coredns-5644d7b6d9-npwr7             1/1     Running     0          2d
etcd-minikube                        1/1     Running     0          2d
filebeat-init-nkghj                  0/1     Completed   0          2m
kube-addon-manager-minikube          1/1     Running     0          2d
kube-apiserver-minikube              1/1     Running     0          2d
kube-controller-manager-minikube     1/1     Running     0          2d
kube-proxy-fm476                     1/1     Running     0          2d
kube-scheduler-minikube              1/1     Running     0          2d
kube-state-metrics-57cd6fdf9-gfgl8   1/1     Running     0          2d
storage-provisioner                  1/1     Running     0          2d
metricbeat-init-gm6wj                0/1     Completed   0          2m

Por si olvidaste crear secretos...

El motivo más común de errores en esta etapa será el de credenciales de Elastic Cloud incorrectas. Solamente si ves errores que indiquen que no es posible conectarse al cluster en el cloud, procede con los pasos siguientes.

  1. Vuelve a verificar los cuatro valores de APM y el cloud, según lo indicado en la sección anterior.
  2. Elimina las credenciales y los trabajos de configuración de Beats, de la siguiente manera:
    $ kubectl delete secret cloud-secret --namespace=kube-system
    $ kubectl delete secret cloud-secret
    $ kubectl delete secret apm-secret
    
  3. Actualiza las credenciales en el editor web Theia, según lo indicado en la sección anterior o a través de los editores vim/nano.
  4. Recrea los secretos volviendo a ejecutar el comando:
    $ ./install/create_secrets.sh
    
  5. Vuelve a intentar los comandos de configuración de Beats.

Despliega tu Beats

Para desplegar Filebeat y Metricbeat, ejecuta los dos comandos siguientes:

$ kubectl create -f $HOME/k8s-o11y-workshop/filebeat/filebeat.yml
$ kubectl create -f $HOME/k8s-o11y-workshop/metricbeat/metricbeat.yml

Para validar que los Beats se estén ejecutando, ejecuta el comando siguiente:

$ kubectl get pods --namespace=kube-system

Debería haber tres pods de Kubernetes adicionales en ejecución, uno para Filebeat y dos para Metricbeat:

NAME                                 READY   STATUS      RESTARTS   AGE
coredns-5644d7b6d9-jhjlm             1/1     Running     0          2d
coredns-5644d7b6d9-npwr7             1/1     Running     0          2d
etcd-minikube                        1/1     Running     0          2d
filebeat-init-nkghj                  0/1     Completed   0          2d
filebeat-wnltr                       1/1     Running     0          4m
kube-addon-manager-minikube          1/1     Running     0          2d
kube-apiserver-minikube              1/1     Running     0          2d
kube-controller-manager-minikube     1/1     Running     0          2d
kube-proxy-fm476                     1/1     Running     0          2d
kube-scheduler-minikube              1/1     Running     0          2d
kube-state-metrics-57cd6fdf9-gfgl8   1/1     Running     0          2d
metricbeat-777d6c6c45-gzfwr          1/1     Running     0          4m
metricbeat-init-rjz4q                0/1     Completed   0          4m
metricbeat-vxbj5                     1/1     Running     0          4m
storage-provisioner                  1/1     Running     0          2d

Verifica que los Beats estén enviando datos a Elasticsearch

Para una verificación adicional de que los Beats se están conectando correctamente al cluster de Elastic Cloud y enviando datos, abre las apps Logs y Metrics en Kibana. Allí deberías ver un poco de acción.

Despliega los componentes de aplicaciones

Despliega MySQL:

$ kubectl create -f $HOME/k8s-o11y-workshop/mysql/mysql.yml

Para validar que el contenedor esté activo, comprueba que el pod esté en ejecución en la app Metrics y observa los logs de MySQL seleccionándolos en el menú de pods:

Espera a que aparezca la línea de log MySQL “ready for connections”:

Despliega la app petclinic y el proxy NGINX:

$ kubectl create -f $HOME/k8s-o11y-workshop/petclinic/petclinic.yml
$ kubectl create -f $HOME/k8s-o11y-workshop/nginx/nginx.yml

Verifica que todos los componentes estén en ejecución

Comprueba que todos los componentes se estén ejecutando en la app Metrics en Kibana:

Valida que la UI de petclinic esté disponible en http://

Ya tienes todo listo. Ahora puedes regresar al tutorial de programación regular: Tutorial sobre observabilidad de Kubernetes: Monitoreo de logs y análisis.