El stack EFK (Elasticsearch, Fluentd y Kibana) es una solución popular para la gestión de registros en Kubernetes. Este stack permite recolectar, almacenar y visualizar logs de manera eficiente, facilitando el monitoreo y la depuración de aplicaciones en un clúster de Kubernetes.
¿Qué es EFK?
- Elasticsearch: Un motor de búsqueda y análisis distribuido que almacena y permite consultas rápidas sobre grandes volúmenes de datos.
- Fluentd: Un colector de logs que unifica la recolección y el consumo de datos de registro de diferentes fuentes.
- Kibana: Una herramienta de visualización que se integra con Elasticsearch para explorar y visualizar datos de registro.
Arquitectura del Stack EFK
- Fluentd recolecta logs de los nodos y contenedores en el clúster de Kubernetes.
- Elasticsearch almacena estos logs y permite realizar búsquedas y análisis sobre ellos.
- Kibana proporciona una interfaz gráfica para visualizar y explorar los logs almacenados en Elasticsearch.
Configuración del Stack EFK en Kubernetes
Paso 1: Desplegar Elasticsearch
Primero, necesitamos desplegar Elasticsearch en nuestro clúster de Kubernetes. A continuación, se muestra un ejemplo de un archivo de configuración para desplegar Elasticsearch:
apiVersion: apps/v1 kind: StatefulSet metadata: name: elasticsearch namespace: logging spec: serviceName: "elasticsearch" replicas: 1 selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: containers: - name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1 ports: - containerPort: 9200 name: http - containerPort: 9300 name: transport env: - name: discovery.type value: single-node
Paso 2: Desplegar Fluentd
Fluentd se utiliza para recolectar y enviar logs a Elasticsearch. Aquí hay un ejemplo de configuración para desplegar Fluentd como un DaemonSet:
apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd namespace: logging spec: selector: matchLabels: app: fluentd template: metadata: labels: app: fluentd spec: containers: - name: fluentd image: fluent/fluentd-kubernetes-daemonset:v1.11.2-debian-elasticsearch7-1.0 env: - name: FLUENT_ELASTICSEARCH_HOST value: "elasticsearch.logging.svc.cluster.local" - name: FLUENT_ELASTICSEARCH_PORT value: "9200" volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers
Paso 3: Desplegar Kibana
Finalmente, desplegamos Kibana para visualizar los logs almacenados en Elasticsearch:
apiVersion: apps/v1 kind: Deployment metadata: name: kibana namespace: logging spec: replicas: 1 selector: matchLabels: app: kibana template: metadata: labels: app: kibana spec: containers: - name: kibana image: docker.elastic.co/kibana/kibana:7.10.1 ports: - containerPort: 5601
Paso 4: Exponer Kibana
Para acceder a Kibana desde fuera del clúster, podemos crear un servicio de tipo LoadBalancer o NodePort:
apiVersion: v1 kind: Service metadata: name: kibana namespace: logging spec: type: LoadBalancer ports: - port: 5601 targetPort: 5601 selector: app: kibana
Ejercicio Práctico
Ejercicio 1: Desplegar el Stack EFK
-
Configura un namespace llamado
logging
:kubectl create namespace logging
-
Despliega Elasticsearch:
kubectl apply -f elasticsearch.yaml
-
Despliega Fluentd:
kubectl apply -f fluentd.yaml
-
Despliega Kibana:
kubectl apply -f kibana.yaml
-
Exponer Kibana:
kubectl apply -f kibana-service.yaml
Ejercicio 2: Visualizar Logs en Kibana
- Accede a Kibana: Utiliza la IP del servicio LoadBalancer o el puerto del NodePort para acceder a Kibana desde tu navegador.
- Configura un índice en Kibana: Navega a la sección de "Management" en Kibana y configura un índice para visualizar los logs recolectados por Fluentd.
Soluciones
Solución al Ejercicio 1
-
Namespace
logging
:kubectl create namespace logging
-
Despliegue de Elasticsearch:
# Guardar el contenido del archivo de configuración en elasticsearch.yaml kubectl apply -f elasticsearch.yaml
-
Despliegue de Fluentd:
# Guardar el contenido del archivo de configuración en fluentd.yaml kubectl apply -f fluentd.yaml
-
Despliegue de Kibana:
# Guardar el contenido del archivo de configuración en kibana.yaml kubectl apply -f kibana.yaml
-
Exposición de Kibana:
# Guardar el contenido del archivo de configuración en kibana-service.yaml kubectl apply -f kibana-service.yaml
Solución al Ejercicio 2
- Acceso a Kibana: Utiliza la IP del servicio LoadBalancer o el puerto del NodePort para acceder a Kibana desde tu navegador.
- Configuración del índice en Kibana:
- Navega a "Management" > "Kibana" > "Index Patterns".
- Crea un nuevo índice con el patrón
fluentd-*
.
Conclusión
En esta sección, hemos aprendido cómo desplegar y configurar el stack EFK (Elasticsearch, Fluentd y Kibana) en un clúster de Kubernetes. Este stack es esencial para la gestión de logs, permitiendo recolectar, almacenar y visualizar logs de manera eficiente. Con esta configuración, podrás monitorear y depurar tus aplicaciones de manera más efectiva.
En el próximo módulo, exploraremos las verificaciones de salud y sondas en Kubernetes, que son cruciales para asegurar que tus aplicaciones estén funcionando correctamente.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Módulo 2: Componentes Principales de Kubernetes
Módulo 3: Gestión de Configuración y Secretos
Módulo 4: Redes en Kubernetes
Módulo 5: Almacenamiento en Kubernetes
Módulo 6: Conceptos Avanzados de Kubernetes
Módulo 7: Monitoreo y Registro
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster