在kubernetes集群内部署prometheus需配置服务发现、rbac权限、配套exporter及grafana可视化:通过configmap管理prometheus.yml,启用kubernetes_sd_configs自动发现节点/pod/service等资源;创建serviceaccount与clusterrole授予nodes/pods等资源的get/list/watch权限;部署node exporter、kube-state-metrics和cadvisor采集主机、k8s对象及容器指标;最后在grafana中添加prometheus为数据源并导入标准仪表盘实现监控闭环。

直接在 Kubernetes 集群内部署 Prometheus 是最主流、最稳定的方式,核心在于让 Prometheus 能自动发现并采集 K8s 各类资源指标——节点、Pod、Service、API Server 等,而不是靠手动写死地址。
用 ConfigMap 管理 Prometheus 配置
配置文件是监控的起点,必须支持动态发现。不要只写静态 target,要启用 Kubernetes 服务发现机制:
- 在
prometheus.yml的scrape_configs中添加kubernetes_sd_configs,类型设为node、pod、service、endpoints等 - 配合
relabel_configs过滤不需要的指标(比如跳过 kube-system 中某些系统 Pod),或重写标签便于后续 PromQL 查询 - 把整个配置存为 ConfigMap,挂载到 Prometheus Pod 的
/etc/prometheus/目录下,方便后续热更新
配好 RBAC 权限才能访问集群数据
Prometheus 需要调用 Kubernetes API 获取节点列表、Pod 列表、Service 端点等信息,否则会报 403 错误:
- 创建 ServiceAccount(如
prometheus-sa) - 定义 ClusterRole,明确授予
get/list/watch权限,覆盖nodes、pods、services、endpoints、namespaces、configmaps等资源 - 用 ClusterRoleBinding 将该角色绑定到 ServiceAccount,作用域为整个集群
部署配套 Exporter 补齐关键指标
Prometheus 自身不产生指标,依赖 Exporter 暴露数据:
- Node Exporter:以 DaemonSet 方式部署,每个节点一个实例,采集 CPU、内存、磁盘、网络等主机级指标
- kube-state-metrics:独立 Deployment,监听 K8s API,将对象状态(如 Pod phase、Deployment replicas、Job status)转化为可抓取的指标
-
cAdvisor:已内嵌在 kubelet 中,默认暴露
/metrics/cadvisor,用于容器维度的 CPU/内存/网络/文件系统使用率
接入 Grafana 实现可视化闭环
Prometheus 提供查询能力,但不具备友好界面。Grafana 是标准搭配:
- 在 Grafana 中添加 Prometheus 为数据源,地址填 Prometheus Service 的 ClusterIP 或 DNS 名(如
http://prometheus.kube-pm.svc:9090) - 导入社区成熟仪表盘,例如:
Kubernetes Cluster Monitoring (via Prometheus)(ID: 3119)、Node Exporter Full(ID: 1860) - 仪表盘会自动识别 Prometheus 抓取到的标签(如
instance、job、namespace),无需额外配置











