Полный стек мониторинга K8s: kube-state-metrics, cAdvisor, node-exporter, сервис-дискавери
«Kubernetes без мониторинга — это черный ящик в production»
Мониторинг Kubernetes требует трёх уровней наблюдаемости:
Собирает метрики нод (хостов):
node_cpu_seconds_total — CPU время по режимамnode_memory_MemAvailable_bytes — доступная памятьnode_disk_free_bytes — свободное место на дискеnode_network_receive_bytes_total — сетевой трафикУстановка через Helm:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install node-exporter prometheus-community/prometheus-node-exporterВстроен в kubelet, собирает метрики контейнеров:
container_cpu_usage_seconds_total — CPU контейнераcontainer_memory_usage_bytes — использование памятиcontainer_fs_usage_bytes — использование дискаДоступ: https://<node-ip>:10250/metrics/cadvisor
Генерирует метрики о состоянии объектов K8s:
kube_pod_status_phase — фаза пода (Pending, Running...)kube_deployment_status_replicas_available — доступные репликиkube_service_info — информация о сервисахУстановка:
helm install ksm prometheus-community/kube-state-metricsscrape_configs:
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
# Скрапить только поды с аннотацией prometheus.io/scrape=true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
# Порт из аннотации
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: (.+)
replacement: $1scrape_configs:
- job_name: 'kubernetes-nodes'
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/tokensum by (pod, namespace) (
rate(container_cpu_usage_seconds_total{image!=""}[5m])
)sum by (pod, namespace) (
container_memory_usage_bytes{image!=""}
)kube_deployment_status_replicas_available
/
kube_deployment_spec_replicas
* 100sum by (pod, namespace) (
rate(kube_pod_container_status_restarts_total[1h])
)Импортируйте из Grafana:
- alert: KubernetesPodCrashLooping
expr: rate(kube_pod_container_status_restarts_total[15m]) * 60 * 5 > 0
for: 15m
severity: warning
- alert: KubernetesDeploymentReplicasMismatch
expr: |
kube_deployment_spec_replicas
>
kube_deployment_status_replicas_available
for: 15m
severity: warning
- alert: KubernetesNodeNotReady
expr: kube_node_status_condition{condition="Ready",status="true"} == 0
for: 15m
severity: criticalВопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.