监控部署与看板

在 Kubernetes 集群上从零部署 Prometheus/Grafana 监控体系,更新 Grafana 配置,或查看平台各类监控看板时阅读

运维管理 / 监控
监控monitoringprometheusprometheus-operatorgrafanaalertmanagernode-exporterkube-state-metricsservicemonitordcgmgpu监控prometheus-adapter看板dashboardconfigmap

监控部署与看板(Prometheus + Grafana)

CubeStudio 的监控体系基于 prometheus-operator 搭建,组件包含:

  • prometheus-operator:以 CRD 方式管理 Prometheus/Alertmanager 实例
  • Alertmanager:报警分发
  • node-exporter:采集节点(机器)层指标
  • kube-state-metrics:采集 K8s 对象状态指标
  • ServiceMonitor:声明 Prometheus 的采集目标
  • DCGM exporter:采集 GPU 指标
  • prometheus-adapter:把 Prometheus 指标暴露为 K8s custom metrics(供 HPA 使用)
  • Grafana:监控看板展示

所有部署文件位于 install/kubernetes/prometheus/ 目录下。下文所有 kubectl apply -f ./xxx 命令均以该目录为工作目录,执行前请先:

cd install/kubernetes/prometheus

注意:仓库中报警相关目录名为 alertmanater(拼写如此),下文命令保持与实际目录一致。

1. 前置准备

为需要部署监控组件(node-exporter、pushgateway 等)的机器打 label。监控组件通过 monitoring=true 的节点亲和性进行调度,机器准备/打 label 的相关说明见 02-部署安装(集群准备)。

kubectl label node xxx monitoring=true

创建命名空间:

kubectl create ns monitoring

2. 部署 prometheus-operator

kubectl apply -f ./operator/operator-rbac.yml
kubectl apply -f ./operator/operator-dp.yml
kubectl apply -f ./operator/operator-crd.yml

3. Alertmanager、node-exporter、kube-state-metrics

创建 Alertmanager 配置(定义报警方式)、node-exporter(节点指标)、kube-state-metrics(K8s 对象指标):

kubectl apply -f ./alertmanater/alertmanager-main-sa.yml
kubectl apply -f ./alertmanater/alertmanager-main-secret.yml
kubectl apply -f ./alertmanater/alertmanager-main-svc.yml
kubectl apply -f ./alertmanater/alertmanager-main.yml
kubectl apply -f ./node-exporter/node-exporter-sa.yml
kubectl apply -f ./node-exporter/node-exporter-rbac.yml
kubectl apply -f ./node-exporter/node-exporter-svc.yml
kubectl apply -f ./node-exporter/node-exporter-ds.yml
kubectl apply -f ./kube-state-metrics/kube-state-metrics-sa.yml
kubectl apply -f ./kube-state-metrics/kube-state-metrics-rbac.yml
kubectl apply -f ./kube-state-metrics/kube-state-metrics-svc.yml
kubectl apply -f ./kube-state-metrics/kube-state-metrics-dp.yml

配置报警接收方(邮件 / 企业微信)

上面 apply 的 alertmanager-main-secret.yml 里存的是 Alertmanager 配置(base64 编码)。要配置邮件或企业微信报警接收方,用仓库 install/kubernetes/prometheus/alertmanater/ 下的两个脚本生成这段 base64:

  • 邮件:编辑 make-alert-email-config.py 里的 config——全局 smtp_smarthost / smtp_from / smtp_auth_username / smtp_auth_password,以及 receiversemail_configs 的收件人 to;运行 python make-alert-email-config.py,把打印出的 base64 串填入 alertmanager-main-secret.yml 的 secret data,再 kubectl apply 一次。
  • 企业微信 / webhookmake-alert-wechat-config.py 同理,但用的是 webhook_configsurl 指向企业微信机器人或自建的报警转发 webhook);改好 url 后运行、取 base64、填 secret、apply。

route.routes 里的 match / match_re(如按 namespace 匹配)决定哪些告警走哪个 receiver;inhibit_rules 做告警抑制避免重复告警。改完重新 apply secret 后 Alertmanager 会重载配置。

4. 部署 Grafana

按照自己的分布式存储创建 PV,再部署 Grafana 相关资源(定义数据源、显示方式):

# 按照自己的分布式存储创建pv
kubectl apply -f ./grafana/pv-pvc-hostpath.yml
kubectl apply -f ./grafana/grafana-sa.yml
kubectl apply -f ./grafana/grafana-source.yml
kubectl apply -f ./grafana/grafana-datasources.yml
kubectl apply -f ./grafana/grafana-admin-secret.yml
kubectl apply -f ./grafana/grafana-svc.yml

创建 Grafana 配置与看板的 configmap,然后部署 Grafana 及服务发现 svc:

kubectl create configmap grafana-config --from-file=./grafana/grafana.ini --namespace=monitoring
kubectl create configmap all-grafana-dashboards --from-file=./grafana/dashboard --namespace=monitoring

kubectl apply -f ./grafana/grafana-dp.yml
kubectl apply -f ./service-discovery/kube-controller-manager-svc.yml
kubectl apply -f ./service-discovery/kube-scheduler-svc.yml

Grafana 默认管理员账号/密码均为 admin / admin(定义于 grafana/grafana-admin-secret.yml,base64 编码的 admin,通过 GF_SECURITY_ADMIN_USER/GF_SECURITY_ADMIN_PASSWORD 注入)。Service 端口为 8080;如需从集群外访问,可在 grafana/grafana-svc.yml 中放开 type: NodePortnodePort(默认被注释)。

5. 部署 Prometheus

自定义配置文件,定义采集和报警规则:

kubectl apply -f ./prometheus/prometheus-secret.yml
kubectl apply -f ./prometheus/prometheus-rules.yml
kubectl apply -f ./prometheus/prometheus-rbac.yml
kubectl apply -f ./prometheus/prometheus-svc.yml

prometheus-operator 部署成功后才能成功创建 Prometheus 实例:

kubectl apply -f ./prometheus/pv-pvc-hostpath.yaml
kubectl apply -f ./prometheus/prometheus-main.yml

6. 配置监控目标 ServiceMonitor

ServiceMonitor 声明 Prometheus 的采集目标。注意:采集目标的 label 必须是 k8s-app,因为 Prometheus 按这个标签查找,否则采集不到该资源。

# kubelet监控,请先确保每个节点的kubelet 添加了 authentication-token-webhook=true 和 authorization-mode=Webhook 参数
kubectl apply -f ./servicemonitor/alertmanager-sm.yml
kubectl apply -f ./servicemonitor/coredns-sm.yml
kubectl apply -f ./servicemonitor/kube-apiserver-sm.yml
kubectl apply -f ./servicemonitor/kube-controller-manager-sm.yml
kubectl apply -f ./servicemonitor/kube-scheduler-sm.yml
kubectl apply -f ./servicemonitor/kubelet-sm.yml
kubectl apply -f ./servicemonitor/kubestate-metrics-sm.yml
kubectl apply -f ./servicemonitor/node-exporter-sm.yml
kubectl apply -f ./servicemonitor/prometheus-operator-sm.yml
kubectl apply -f ./servicemonitor/prometheus-sm.yml
kubectl apply -f ./servicemonitor/pushgateway-sm.yml

7. 部署 GPU 监控

GPU 指标由 DCGM exporter(DaemonSet)采集,配套的 Grafana GPU 看板模板为 install/kubernetes/prometheus/grafana/dashboard/dcgm.json

# 注意:源 readme 写的是 ./gpu/dcgm-exporter.yaml,但 prometheus/ 下并无 gpu 子目录,
# 实际部署文件在上一级的 install/kubernetes/gpu/dcgm-exporter.yaml,因此从 prometheus 目录执行时用 ../gpu
kubectl apply -f ../gpu/dcgm-exporter.yaml

DCGM exporter 部署详情(DaemonSet,命名空间 monitoring,镜像 nvidia/dcgm-exporter:3.1.7-3.1.4-ubuntu20.04)见 install/kubernetes/gpu/dcgm-exporter.yaml。GPU 节点接入与驱动准备见 02-部署安装/GPU与异构算力

8. 部署 prometheus-adapter

prometheus-adapter 将 Prometheus 指标转换为 K8s custom metrics,供 HPA 等组件按自定义指标扩缩容:

kubectl apply -f ./prometheus_adapter/metric_rule.yaml
kubectl apply -f ./prometheus_adapter/prometheus_adapter.yaml

adapter 目录还提供:

  • metric_rule.yaml:把 Prometheus 指标映射为 custom.metrics 的规则;metric_rule_more.yaml 是更多指标规则的扩展,按需追加 apply。
  • prometheus_adapter-arm64.yaml:arm64 架构的 adapter 部署变体(国产化/ARM 集群用它替代 prometheus_adapter.yaml)。
  • hpa-demo.yaml:基于自定义指标做 HPA 的示例——对一个 Deployment 按 Pods 指标 container_gpu_usage 扩缩容(所有 pod 该指标均值超过 targetAverageValue 就加一个副本)。

这样推理服务/任务就能按 GPU 利用率、QPS 等自定义指标弹性伸缩(与 平台架构-推理服务 的 HPA 一节配合)。custom.metrics 是否生效可用 kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1 验证。

9. Grafana 配置更新

修改 grafana.ini 后需要删除旧 configmap 再重建(在 install/kubernetes/prometheus/grafana/ 目录下执行),重建后重启 Grafana Deployment 生效:

cd install/kubernetes/prometheus/grafana

kubectl delete -n monitoring configmaps grafana-config
kubectl create configmap grafana-config --from-file=./grafana.ini --namespace=monitoring

kubectl delete -n monitoring configmaps grafana-defaults-config
kubectl create configmap grafana-defaults-config --from-file=./defaults.ini --namespace=monitoring

⚠️ 待核实:grafana-defaults-config --from-file=./defaults.ini 中的 defaults.ini 在仓库 grafana/ 目录下不存在,且 grafana-dp.yml 只挂载了 grafana-configgrafana-datasourcesgrafana-dashboardsall-grafana-dashboards 四个 configmap,未引用 grafana-defaults-config。该命令可能为历史遗留或可选项,见 install/kubernetes/prometheus/grafana/readme.md:4-5,请确认。

10. 看板查看

部署完成后,登录 Grafana 即可查看以下内置看板。

所有机器的负载情况

所有机器负载1

所有机器负载2

单个机器的资源和应用使用情况

单机资源1

单机资源2

GPU 资源的使用情况

GPU资源

Pod 的资源使用情况

Pod资源

推理服务的流量负载和资源使用情况

推理服务

相关文档

最后更新 2026-07-04完整文档以官方仓库为准:GitHub Wiki