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

  1. Fluentd recolecta logs de los nodos y contenedores en el clúster de Kubernetes.
  2. Elasticsearch almacena estos logs y permite realizar búsquedas y análisis sobre ellos.
  3. 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

  1. Configura un namespace llamado logging:

    kubectl create namespace logging
    
  2. Despliega Elasticsearch:

    kubectl apply -f elasticsearch.yaml
    
  3. Despliega Fluentd:

    kubectl apply -f fluentd.yaml
    
  4. Despliega Kibana:

    kubectl apply -f kibana.yaml
    
  5. Exponer Kibana:

    kubectl apply -f kibana-service.yaml
    

Ejercicio 2: Visualizar Logs en Kibana

  1. Accede a Kibana: Utiliza la IP del servicio LoadBalancer o el puerto del NodePort para acceder a Kibana desde tu navegador.
  2. 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

  1. Namespace logging:

    kubectl create namespace logging
    
  2. Despliegue de Elasticsearch:

    # Guardar el contenido del archivo de configuración en elasticsearch.yaml
    kubectl apply -f elasticsearch.yaml
    
  3. Despliegue de Fluentd:

    # Guardar el contenido del archivo de configuración en fluentd.yaml
    kubectl apply -f fluentd.yaml
    
  4. Despliegue de Kibana:

    # Guardar el contenido del archivo de configuración en kibana.yaml
    kubectl apply -f kibana.yaml
    
  5. 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

  1. Acceso a Kibana: Utiliza la IP del servicio LoadBalancer o el puerto del NodePort para acceder a Kibana desde tu navegador.
  2. 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

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

Módulo 8: Seguridad en Kubernetes

Módulo 9: Escalado y Rendimiento

Módulo 10: Ecosistema y Herramientas de Kubernetes

Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real

Módulo 12: Preparación para la Certificación de Kubernetes

© Copyright 2024. Todos los derechos reservados