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.
- Vuelve a verificar los cuatro valores de APM y el cloud, según lo indicado en la sección anterior.
- 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
- 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.
- Recrea los secretos volviendo a ejecutar el comando:
$ ./install/create_secrets.sh
- 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.