讲解了K8S集群中资源监控系统Prometheus的原理和部署方法。
Prometheus资源监控
节点资源监控
节点资源主要包括 CPU 使用率、CPU
核心数、内存使用量和总量、磁盘使用量和
I/O、网络流量以及节点状态(Ready/NotReady)。 Prometheus 主要通过
node_exporter
采集操作系统层面的指标,通过 Kubelet 的
/metrics/cadvisor
或 /metrics/resource
提供节点级别的 CPU、内存、Pod 等信息。
常用 Prometheus 查询示例:
node_cpu_seconds_total{mode="idle"}
查询 CPU 空闲时间node_memory_MemAvailable_bytes
查询可用内存node_filesystem_avail_bytes
查询磁盘可用空间
Pod / 容器资源监控
Pod 和容器资源包括
CPU/内存使用率、容器重启次数、容器状态(Running/CrashLoopBackOff)以及容器内磁盘和网络
I/O。 采集来源主要是 Kubelet 内置的 cAdvisor
,以及
kube-state-metrics
提供 Pod
和容器的状态信息(不提供实时使用率)。
常用 Prometheus 查询示例:
container_cpu_usage_seconds_total{pod="nginx"}
查询容器 CPU 使用container_memory_usage_bytes{pod="nginx"}
查询容器内存使用kube_pod_container_status_restarts_total
查询容器重启次数
Kubernetes 资源对象状态
关注 Pod、Deployment、DaemonSet、StatefulSet 的数量及状态,以及
ReplicaSet 副本数和 Service/Ingress 状态。 Prometheus 通过
kube-state-metrics
获取 Kubernetes API
对象状态,非常适合用于告警和指标统计。
常用 Prometheus 查询示例:
kube_deployment_status_replicas_available{deployment="nginx"}
kube_pod_status_phase{phase="Running"}
集群资源和调度
监控集群层面的资源包括节点负载、Pod 分布、调度失败事件和 PVC/Storage
使用情况。 数据来源主要是 kube-state-metrics
、Kubelet 以及
cAdvisor。
常用 Prometheus 查询示例:
kube_node_status_capacity_cpu
kube_node_status_allocatable_memory_bytes
kube_persistentvolumeclaim_status_phase
应用层指标
应用层指标可选,用于监控具体业务性能,如数据库或 Web 服务性能。 常用方式是通过各类 Exporter 或自定义 metrics 提供指标,例如 MySQL exporter、NGINX exporter 等。
常用 Prometheus 查询示例:
mysql_global_status_threads_connected
nginx_http_requests_total
安装Prometheus
1 | helm repo add prometheus-community https://prometheus-community.github.io/helm-charts |
安装成功后会有以下资源
alertmanager-operated
- 类型:ClusterIP(Headless)
- 作用:提供 Alertmanager 内部通信(例如集群模式下的节点发现),Prometheus 可以通过它发送告警。
kube-prometheus-grafana
- 类型:NodePort
- 作用:外部访问 Grafana 的入口,映射了集群外端口(如 32117)到 Pod 内部端口 80。
kube-prometheus-kube-prome-alertmanager
- 类型:ClusterIP
- 作用:Prometheus 用来发送告警的服务入口。
kube-prometheus-kube-prome-operator
- 类型:ClusterIP
- 作用:Prometheus Operator 对外提供的 API 接口,用于管理 Prometheus、Alertmanager、ServiceMonitor 等资源。
kube-prometheus-kube-prome-prometheus
- 类型:ClusterIP
- 作用:Prometheus 对外的访问入口,抓取指标时可以用它的 IP/Service Name。
kube-prometheus-kube-state-metrics
- 类型:ClusterIP
- 作用:暴露 kube-state-metrics 采集的 Kubernetes 状态指标给 Prometheus 抓取。
kube-prometheus-prometheus-node-exporter
- 类型:ClusterIP
- 作用:暴露 node-exporter 指标给 Prometheus 抓取。
prometheus-operated
- 类型:ClusterIP(Headless)
- 作用:Prometheus StatefulSet 内部访问和服务发现用,不对外提供单独访问。
alertmanager-kube-prometheus-kube-prome-alertmanager-0
- 作用:运行 Alertmanager,负责接收 Prometheus 的告警(alerts),并按规则发送通知(邮件、Slack、Webhook 等)。
- 特点:通常 StatefulSet 部署,有持久化存储,保证告警状态不会丢失。
kube-prometheus-grafana-ccf7c8676-hq2ln
- 作用:运行 Grafana,用于可视化展示 Prometheus 收集的数据。
- 特点:提供 Dashboard,可自定义图表和告警,可通过 NodePort 暴露访问。
kube-prometheus-kube-prome-operator-5d598c7448-7zp4f
- 作用:Prometheus Operator,负责在 Kubernetes 上管理 Prometheus、Alertmanager 和相关 CRD(Custom Resource)对象。
- 特点:通过 Operator,创建 Prometheus 实例、规则、告警等,都可以 declarative(声明式)管理。
kube-prometheus-kube-state-metrics-56c6895446-dfvr5
- 作用:kube-state-metrics,从 Kubernetes API Server 获取集群状态信息(Pod、Deployment、Node、Namespace 等),并以 Prometheus 指标形式暴露。
- 特点:它不采集系统指标,只采集 Kubernetes 对象状态。
kube-prometheus-prometheus-node-exporter-5g94w / 7hpfr / w7qkj
- 作用:node-exporter,运行在每个节点上,采集节点级别的系统指标(CPU、内存、磁盘、网络等)。
- 特点:DaemonSet 部署,确保每个节点都有一个 Pod。
prometheus-kube-prometheus-kube-prome-prometheus-0
- 作用:运行 Prometheus 实例,负责抓取各种指标数据(node-exporter、kube-state-metrics、应用指标等)并存储。
- 特点:StatefulSet 部署,支持持久化存储,保证指标数据不会丢失。
同样要在外部浏览器访问kube-prometheus-grafana这个svc,需要将其类型改为NodePort或者给它加一个ingress暴露服务
获取密码:将对应字段用base64解码即可
1 | kl get secret -n prometheus kube-prometheus-grafana -o yaml |
最终,在浏览器访问可以查看资源使用,Explorer里已经内置很多资源模版。