跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言

Kubernetes 中部署 Prometheus 实战指南

综述由AI生成本文介绍了在 Kubernetes 环境中部署 Prometheus 的完整流程。内容涵盖 K8s 原生监控与 Prometheus 的关系,重点讲解了 Relabel 重命名规则及 Kubernetes Service Discovery 的 Node 和 Pod 角色配置。通过 YAML 示例展示了如何配置 ConfigMap、Deployment 和 Service 来运行 Prometheus,以及如何利用 Annotations 实现应用自动发现。此外,还补充了外部 Prometheus 通过 Federate 模式同步 K8s 内部指标的配置方法,帮助构建统一的监控架构。

CodeArtist发布于 2025/2/23更新于 2026/6/922 浏览
Kubernetes 中部署 Prometheus 实战指南

Kubernetes 中部署 Prometheus 实战指南

之前介绍过 Prometheus,这次重点聊聊如何在 K8s 中落地使用。在此之前,先简单梳理一下 K8s 自带的监控体系。

K8s 的监控背景

K8s 默认以及推荐的监控体系是它自己的一套东西:Heapster + cAdvisor + Influxdb + Grafana。包括 K8s 自身的 HPA (Horizontal Pod Autoscaler),默认从 Heapster 中获取数据进行自动伸缩。

顺便提一句,当你部署完 K8s 集群之后,如果从 Dashboard 中看不到监控数据,往往就是因为你没有部署 Heapster,或者网络层有问题,Dashboard 无法访问 Heapster。

那,这跟我们介绍的 Prometheus 有什么关系?

首先,它们都是一套监控解决方案。而 K8s 没有把 Prometheus 作为默认监控,因此,如果你想直接使用 HPA,你还是需要部署 Heapster。

其次,kubelet 中的 cAdvisor 其实是支持 Prometheus 作为存储的后端的,只是相对于 Prometheus 自己的 SD(Service Discovery)解决方案来说,太弱了点。

最后,K8s 1.6 之后,在 annotations 中配置 custom metrics 的方式已经被移除了,而根据 Prometheus 的监控数据来进行自动伸缩还是很有可操作性的。

核心配置详解

其实部署很简单,关键是配置,因此这里着重介绍下,如何配置。

Relabel 重命名

首先,先来了解下什么是 relabel_configs。

就如字面意思而言,它的作用是 Prometheus 抓取 metrics 之前,就将对象相关的 labels 重写。下面是它几个重要的 label:

  • __address__:默认为 host:port,也是之后抓取之后 instance 的值;
  • __scheme__:http or https?;
  • __metrics_path__:就是 metrics path,默认为 /metrics;
  • __param_${name}:用来作为 URL parameter,比如 http://…/metrics?name=value;
  • __meta_:这个开头的配置都是 SD 相关的配置;

Kubernetes Service Discovery

其次,上次提到,我们可以用到 Service Discovery 这个功能,其中就包含 Kubernetes SD。

它包含四种角色:node、service、pod、endpoints。由于篇幅所限,这里只是简单介绍下其中的 node 还有 pod 角色。

Node 角色配置
- job_name: 'kubernetes-nodes'
  scheme: https
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token

  kubernetes_sd_configs:
  - role: node

  
    
    
     

    
    
     

    
   
     
     
     
     
relabel_configs:
# 即从 __meta_kubernetes_node_label_<labelname> 这个配置中取出 labelname 以及 value
-
action:
labelmap
regex:
__meta_kubernetes_node_label_(.+)
# 配置 address 为 k8s api 的地址,相关的 ca 证书以及 token 在上面配置
-
target_label:
__address__
replacement:
kubernetes.default.svc:443
# 取出所有的 node,然后设置 /api/v1/nodes/<node_name>/proxy/metrics 为 metrics path
-
source_labels:
-
__meta_kubernetes_node_name
regex:
(.+)
target_label:
__metrics_path__
replacement:
/api/v1/nodes/${1}/proxy/metrics
Pod 角色配置

接下来的这个 pod 角色挺重要,它是采集应用指标的关键:

- job_name: 'kubernetes-pods'

  kubernetes_sd_configs:
  - role: pod

  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    action: keep
    regex: true
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
    action: replace
    target_label: __metrics_path__
    regex: (.+)
  - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
    action: replace
    regex: ([^:]+)(?::\d+)?;(\d+)
    replacement: $1:$2
    target_label: __address__
  - action: labelmap
    regex: __meta_kubernetes_pod_label_(.+)
  - source_labels: [__meta_kubernetes_namespace]
    action: replace
    target_label: kubernetes_namespace
  - source_labels: [__meta_kubernetes_pod_name]
    action: replace
    target_label: kubernetes_pod_name

在定义了这个角色之后,你只要在你部署的应用 Pod 描述中,加入以下 annotations 就能让 Prometheus 自动发现此 Pod 并采集监控数据了:

annotations:
  prometheus.io/scrape: "true"
  prometheus.io/port: "<your app port>"

其它详细配置请看官方文档。

Kubernetes Deployment 部署

最后,部署 Prometheus,需要注意的是,我们已经在 k8s 之外单独部署了一套,为了统一处理,在这里是打算作为中转的。

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus
  namespace: kube-system
  labels:
    app: prometheus
data:
  prometheus.yml: |-
    # 省略,在这里定义你需要的配置
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: prometheus
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
      - name: prometheus
        image: prom/prometheus:latest
        args:
          - '-config.file=/prometheus-data/prometheus.yml'
          # 显然,这里没有用 Stateful Sets,存储时间不用太长
          - '-storage.local.retention=48h0m0s'
        ports:
        - name: prometheus
          containerPort: 9090
        volumeMounts:
        - name: data-volume
          mountPath: /prometheus-data
      volumes:
      - name: data-volume
        configMap:
          name: prometheus
---
# 简单处理,直接使用 NodePort 暴露服务,你也可以使用 Ingress
apiVersion: v1
kind: Service
metadata:
  name: prometheus
  namespace: kube-system
spec:
  selector:
    app: prometheus
  ports:
  - name: prometheus
    protocol: TCP
    port: 9090
    nodePort: 30090
  type: NodePort

Prometheus Federate 联邦配置

而在我们外部单独的 Prometheus 中,需要配置 Federate,将 k8s 中 Prometheus 采集的 metrics 全部同步出来。

- job_name: 'federate'
  scrape_interval: 15s

  honor_labels: true
  metrics_path: '/federate'

  params:
    'match[]':
      - '{job=~".+"}' # 取 k8s 里面部署的 Prometheus 中所有的 job 数据

  static_configs:
    - targets:
      - '<k8s-node1>:30090'
      - '<k8s-node2>:30090'
      - '<k8s-node3>:30090'

这样配置后,外部 Prometheus 就能拉取到 K8s 集群内部的监控数据了。

目录

  1. Kubernetes 中部署 Prometheus 实战指南
  2. K8s 的监控背景
  3. 核心配置详解
  4. Relabel 重命名
  5. Kubernetes Service Discovery
  6. Node 角色配置
  7. Pod 角色配置
  8. Kubernetes Deployment 部署
  9. 简单处理,直接使用 NodePort 暴露服务,你也可以使用 Ingress
  10. Prometheus Federate 联邦配置
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • AI 时代如何脱颖而出:商业认知与实战策略
  • 2026 年 AI 大模型学习路线:从入门到精通
  • Python 五大核心特性提升开发效率
  • AI Agent(智能体)基础概念与核心架构详解
  • ComfyUI 按需部署方案:低成本玩转 AI 绘画
  • C++ 数据结构:用链表实现队列
  • 前端虚拟列表实现原理与优化实践
  • 在 Zed 编辑器中集成 Web MCP 实现实时信息访问
  • 大模型项目实战:多领域智能应用开发
  • 基于 Python 的阿布量化交易框架
  • 文心大模型 4.5 系列评测:千亿 MoE 架构技术与性能分析
  • 麒麟 V10 ARM64 环境下部署 WebLogic 12.2.1.4 实战
  • React Router 页面跳转的三种实现方式
  • Python 数据分析学习路线总结
  • 从零构建智能语音交互:Python 语音客户端实战指南
  • 基于 AI 辅助开发的高并发在线考试系统实践
  • Neo4j 数据导入实战:LOAD CSV、MATCH 与 MERGE 语法详解
  • C++ 栈 (Stack) 的基本用法与经典例题
  • 小米智能家居 Miloco 分离式部署实战
  • C++微服务架构下的好友管理子服务设计与实现

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online