如何用Kubernetes部署Prometheus

浅浩同学_7743

浅浩同学_7743

2026-09-11

165人浏览

原创

kube-prometheus-stack是当前最省心、最接近生产可用的Prometheus部署方案,它封装了prometheus-operator、预置CRD及默认监控组件,避免手写YAML导致的架构缺失问题。

如何用kubernetes部署prometheus

kube-prometheus-stack 是当前最省心、也最接近生产可用的部署方式。手写 YAML 虽然能跑起来,但 ServiceMonitor、RBAC、存储卷、Alertmanager 配置、Grafana 仪表盘联动——这些加起来不是“部署 Prometheus”,而是“从零搭一套监控运维平台”。

别从 Deployment + ConfigMap 开始

你确实可以用几个 YAML 文件把 prom/prometheus 镜像跑起来,但很快会遇到这些问题:

  • scrape_configs 里写死 static_configs,根本没法自动发现新 Pod 或 Service
  • 想监控 kube-apiserver、etcd、kube-scheduler 这些组件?它们用的是 TLS 双向认证,prometheus.yml 里得手动配 tls_config 和 service_account,且每次证书轮换都要改
  • 没 PrometheusRule,告警规则只能塞进容器里挂载,改一次就得重启 Pod
  • 没 ServiceMonitor,你自己的应用暴露了 /metrics,但 Prometheus 压根不知道该去哪拉

这些不是“配置问题”,是架构缺失。硬补只会让 YAML 越来越长、越来越难维护。

用 Helm 安装 kube-prometheus-stack 的关键动作

它本质是 prometheus-operator + 一整套预置 CRD + 默认监控目标(node-exporter、kube-state-metrics 等)的封装。执行前确保:

  • Helm CLI 已安装,且 kubectl 能连上集群
  • 集群有默认 StorageClass(否则 Prometheus 启不来,报 Pending 状态)
  • 命名空间 monitoring 已创建:kubectl create namespace monitoring

安装命令示例:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --set prometheus.prometheusSpec.retention="30d" \
  --set grafana.enabled=true \
  --set alertmanager.enabled=true

注意几个易错点:

  • --set prometheus.prometheusSpec.storageSpec 如果要持久化,必须显式指定 volumeClaimTemplate,不能只靠默认值
  • 如果集群启用了 PodSecurityPolicy 或 PodSecurity Admission,需额外加 --set prometheus.prometheusSpec.securityContext.fsGroup=2000 类似参数,否则启动失败
  • grafana.adminPassword 默认是随机生成的,想自定义就加 --set grafana.adminPassword="xxx"

部署后第一件事:验证 ServiceMonitor 是否生效

Operator 不是装完就自动干活的。它只监听自己 CRD 的变更。你自己的应用要被监控,得自己写一个 ServiceMonitor 并 apply 进集群。

Kubernetes RBAC Audit
Kubernetes RBAC Audit

审计 Kubernetes 集群 RBAC 配置,识别过度宽松的角色、通配符权限、危险的 ClusterRoleBinding 及服务账号滥用

下载

比如你的应用 Service 名叫 my-app,端口是 http-metrics,且 Pod 注解了 prometheus.io/scrape: "true":

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: my-app-monitor
  namespace: monitoring
  labels:
    release: prometheus
spec:
  selector:
    matchLabels:
      app: my-app
  namespaceSelector:
    matchNames:
    - default
  endpoints:
  - port: http-metrics
    interval: 15s

重点看三处:

  • selector.matchLabels 必须和你应用 Service 的 labels 对得上,不是 Pod 的 label
  • namespaceSelector.matchNames 写错会导致 Operator 根本不扫描那个命名空间
  • endpoints.port 是 Service 的 port 名(不是 targetPort),必须和 Service 定义里 ports[].name 一致

写完之后,进 Prometheus UI → Status → Targets,搜 my-app,看到状态是 UP 才算真正接入成功。

数据存哪?别信 emptyDir 或默认 PVC

很多教程用 emptyDir 演示,这在生产环境等于没存——Pod 重建,所有指标全丢。而 Helm Chart 默认的 PVC 配置依赖 StorageClass 自动供给,但实际中:

  • 某些集群(如阿里云 ACK 托管版)默认 StorageClass 是 alicloud-disk-efficiency,但 kube-prometheus-stack Chart 默认用 standard,导致 PVC 卡在 Pending
  • 如果你用 hostPath,跨节点调度时数据不一致,且无法扩容
  • 长期运行必须考虑 retention:默认是 10 天,磁盘爆满后 Prometheus 会拒绝写入,整个监控中断

稳妥做法是显式指定存储:

--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.storageClassName="alicloud-disk-ssd" \
--set prometheus.prometheusSpec.retention="30d" \
--set prometheus.prometheusSpec.resources.requests.storage="100Gi"

最后提醒一句:Prometheus 本身不是长期存储方案。超过 30 天的数据,该上 Thanos 或对接 MetricStore,别指望单实例扛住半年指标。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

2025.12.22

116

5

Go云原生应用与Kubernetes服务部署实战
Go云原生应用与Kubernetes服务部署实战

本专题围绕 Go 语言在云原生环境中的应用展开,讲解容器化部署、Kubernetes 编排、服务发现、健康检查与弹性扩缩容机制。通过真实云端案例,帮助开发者构建可扩展的云原生微服务架构。

2026.06.29

228

19

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

0

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

0

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

20

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

40

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

20

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

40

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

40

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kubernetes官方教程手册
Kubernetes官方教程手册

共0课时 | 0人学习

Kubernetes官方中文文档
Kubernetes官方中文文档

共0课时 | 0人学习