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>
- Acceder a Grafana en
http://[nodo]:3000 - Configurar origen de datos Prometheus:
http://prometheus-service.kube-system.svc.cluster.local:9090 - 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