Despliegue de sistema de monitoreo con Prometheus y Grafana en clústeres Kubernetes

Instalación persistente de Prometheus

Configuraremos Prometheus con almacenamiento en NFS y gestiones de configuración mediante ConfigMap. Todos los recursos se desplegarán en el namespace kube-system.

Generar ConfigMap para configuración principal

cat > prometheus-config.yaml <


</div>La configuración consta de tres secciones principales:

- **global**: Parámetros globales como intervalos de recolección
- **scrape\_configs**: Definición de objetivos de monitoreo
- **rule\_files**: Ubicación de reglas de alerta (se configurará después)

Aplicar la configuración:

<div>```
kubectl apply -f prometheus-config.yaml
kubectl get configmap -n kube-system prometheus-main-config

Implementaremos almacenamiento NFS para datos persistentes de Prometheus:

En nodos Kubernetes

mount -t nfs 192.168.1.100:/srv/nfs/prometheus-data /mnt/nfs-prometheus


</div>Crear recursos PersistentVolume y PersistentVolumeClaim:

<div>```
cat > prometheus-storage.yaml <<eof accessmodes:="" apiversion:="" capacity:="" eof="" kind:="" kube-system="" metadata:="" name:="" namespace:="" nfs:="" path:="" persistentvolume="" persistentvolumeclaim="" persistentvolumereclaimpolicy:="" pv-prometheus-01="" pvc-prometheus-data="" readwriteonce="" requests:="" resources:="" retain="" server:="" spec:="" storage:="" v1=""></eof>

Prometheus requiere acceso a recursos del clúster para descubrimiento automático:

Actualizar ConfigMap de Prometheus para descubrimiento automático de nodos:


</div>Monitoreo de contenedores con cAdvisor
--------------------------------------

Agregar configuración para métricas de contenedores:

<div>```
# Sección adicional en prometheus.yml
    - job_name: 'cadvisor-metrics'
      kubernetes_sd_configs:
        - role: node
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs:
      - target_label: __address__
        replacement: kubernetes.default.svc:443
      - source_labels: [__meta_kubernetes_node_name]
        regex: (.+)
        target_label: __metrics_path__
        replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor

Configurar alertas por correo electrónico:

Contenido de alert_rules.yml

groups:
- name: node-alerts
  rules:
  - alert: HighMemoryUsage
    expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 80
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "Alto uso de memoria en {{ $labels.instance }}"
      description: "Uso de memoria ha superado el 80% durante 5 minutos (valor actual: {{ $value }})"

</div>Instalación de Grafana para visualización
-----------------------------------------

<div>```
cat > grafana-deployment.yaml <<eof apiversion:="" app:="" apps="" claimname:="" containerport:="" containers:="" deployment="" env:="" eof="" gf_security_admin_password="" gf_security_admin_user="" grafana="" grafana-storage="" image:="" kind:="" kube-system="" labels:="" matchlabels:="" metadata:="" mountpath:="" name:="" namespace:="" persistentvolumeclaim:="" ports:="" pvc-grafana-data="" replicas:="" selector:="" spec:="" template:="" value:="" volumemounts:="" volumes:=""></eof>
  1. Acceder a Grafana en http://[nodo]:3000
  2. Configurar origen de datos Prometheus: http://prometheus-service.kube-system.svc.cluster.local:9090
  3. Importar dasbhoard con ID 15757 para métricas de Kubernetes

Verificación y consultas comunes

Consultar métricas de contenedores en Prometheus:

Uso de memoria por pod

sum(container_memory_working_set_bytes{pod!=""}) by (pod)

Tráfico de red

sum(rate(container_network_receive_bytes_total{name!=""}[1m])) by (pod)


</div>Para actualizar configuraciones sin reinicio:

<div>```
# Recargar configuración de Prometheus
curl -X POST http://localhost:9090/-/reload

# Verificar estado de alertas
kubectl exec -n kube-system [prometheus-pod] -- /bin/prometheus rules

Etiquetas: prometheus Grafana alertmanager node-exporter Kubernetes

Publicado el 6-8 02:46