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-nodePaso 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/containersPaso 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: 5601Paso 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: kibanaEjercicio 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
