news 2026/6/4 5:56:06

保姆级教程:用K8s原生方式部署Prometheus监控全家桶(附完整YAML)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:用K8s原生方式部署Prometheus监控全家桶(附完整YAML)

Kubernetes原生部署Prometheus监控栈的深度实践指南

在云原生技术栈中,监控系统的构建一直是保障业务稳定性的关键环节。不同于简单的Helm一键安装,本文将从Kubernetes原生资源的角度,深入剖析如何通过DaemonSet、ConfigMap和ServiceAccount等核心API对象,搭建一套生产级可用的Prometheus监控体系。这种部署方式不仅能帮助您全面掌握各组件的运行机制,还能根据实际需求进行灵活定制。

1. 环境准备与架构设计

1.1 集群基础要求

在开始部署前,请确保您的Kubernetes集群满足以下条件:

  • Kubernetes版本 ≥ 1.18(推荐1.22+)
  • 每个工作节点至少2核CPU和4GB内存
  • 已配置默认StorageClass(如需持久化存储)
  • 集群内DNS服务正常运作

可以通过以下命令快速验证集群状态:

kubectl get nodes -o wide kubectl get cs

1.2 监控架构设计

我们采用的监控栈包含以下核心组件:

组件类型功能部署方式
node-exporterDaemonSet采集节点级指标每个节点部署1个Pod
kube-state-metricsDeployment采集K8s资源状态集群范围部署
prometheus-serverStatefulSet指标存储与告警支持水平扩展
alertmanagerDeployment告警通知路由高可用部署

提示:生产环境建议为prometheus-server配置持久化存储,避免历史数据丢失

2. Node-Exporter的DaemonSet部署

2.1 创建监控专用命名空间

首先为监控组件创建独立的命名空间:

kubectl create ns monitoring

2.2 精细化DaemonSet配置

node-exporter需要访问主机系统信息,因此需要特殊权限配置。以下是经过生产验证的DaemonSet模板:

apiVersion: apps/v1 kind: DaemonSet metadata: name: node-exporter namespace: monitoring labels: k8s-app: node-exporter spec: selector: matchLabels: k8s-app: node-exporter template: metadata: labels: k8s-app: node-exporter spec: hostNetwork: true hostPID: true hostIPC: true tolerations: - key: "node-role.kubernetes.io/master" operator: "Exists" effect: "NoSchedule" containers: - name: node-exporter image: prom/node-exporter:v1.8.0 args: - --path.procfs=/host/proc - --path.sysfs=/host/sys - --collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($|/) ports: - containerPort: 9100 hostPort: 9100 volumeMounts: - name: proc mountPath: /host/proc - name: sys mountPath: /host/sys volumes: - name: proc hostPath: path: /proc - name: sys hostPath: path: /sys

关键配置解析:

  • hostNetwork: 直接使用主机网络,避免网络性能损耗
  • hostPID/hostIPC: 访问主机进程和IPC命名空间
  • tolerations: 允许在master节点运行
  • volumeMounts: 挂载主机系统目录

部署后验证:

kubectl -n monitoring get pods -l k8s-app=node-exporter curl http://<node-ip>:9100/metrics

3. Prometheus Server的核心配置

3.1 RBAC权限配置

Prometheus需要访问Kubernetes API,因此需要创建合适的ServiceAccount和ClusterRole:

apiVersion: v1 kind: ServiceAccount metadata: name: prometheus namespace: monitoring --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus rules: - apiGroups: [""] resources: - nodes - services - endpoints - pods verbs: ["get", "list", "watch"] - apiGroups: ["extensions", "networking.k8s.io"] resources: - ingresses verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus subjects: - kind: ServiceAccount name: prometheus namespace: monitoring

3.2 智能抓取配置管理

通过ConfigMap管理Prometheus的抓取配置,可以实现动态更新:

apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: monitoring data: prometheus.yml: | global: scrape_interval: 30s evaluation_interval: 30s scrape_configs: - job_name: 'kubernetes-nodes' kubernetes_sd_configs: - role: node relabel_configs: - source_labels: [__address__] regex: '(.*):10250' replacement: '${1}:9100' target_label: __address__ - job_name: 'kubernetes-service-endpoints' kubernetes_sd_configs: - role: endpoints relabel_configs: - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+)

关键relabel配置说明:

  1. 将kubelet端口从10250重定向到9100
  2. 通过service注解自动发现监控目标
  3. 支持自定义metrics路径配置

3.3 StatefulSet部署方案

对于生产环境,推荐使用StatefulSet部署Prometheus:

apiVersion: apps/v1 kind: StatefulSet metadata: name: prometheus namespace: monitoring spec: serviceName: prometheus replicas: 2 selector: matchLabels: app: prometheus template: metadata: labels: app: prometheus spec: serviceAccountName: prometheus containers: - name: prometheus image: prom/prometheus:v2.51.1 args: - --config.file=/etc/prometheus/prometheus.yml - --storage.tsdb.path=/data - --web.enable-lifecycle ports: - containerPort: 9090 volumeMounts: - name: config mountPath: /etc/prometheus - name: data mountPath: /data volumes: - name: config configMap: name: prometheus-config volumeClaimTemplates: - metadata: name: data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 100Gi

高可用设计要点:

  • 使用volumeClaimTemplates实现持久化存储
  • 多个副本共享相同的配置
  • 通过--web.enable-lifecycle支持配置热加载

4. 服务暴露与访问控制

4.1 安全的Service暴露方式

推荐使用Ingress配合Basic Auth暴露服务:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: prometheus namespace: monitoring annotations: nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: prometheus-auth spec: rules: - host: prometheus.example.com http: paths: - path: / pathType: Prefix backend: service: name: prometheus port: number: 9090

创建认证secret:

htpasswd -c auth admin kubectl -n monitoring create secret generic prometheus-auth --from-file=auth

4.2 网络策略限制

只允许特定命名空间访问Prometheus:

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-prometheus-access namespace: monitoring spec: podSelector: matchLabels: app: prometheus ingress: - from: - namespaceSelector: matchLabels: name: grafana ports: - protocol: TCP port: 9090

5. 高级配置与优化技巧

5.1 长期存��方案

与Thanos或VictoriaMetrics集成实现长期存储:

# Thanos Sidecar配置示例 - name: thanos-sidecar image: thanosio/thanos:v0.35.0 args: - sidecar - --prometheus.url=http://localhost:9090 - --tsdb.path=/data ports: - containerPort: 10901 volumeMounts: - name: data mountPath: /data

5.2 资源限制与调优

建议的资源限制配置:

组件CPU请求内存请求CPU限制内存限制
node-exporter100m50Mi200m100Mi
prometheus24Gi48Gi
alertmanager1256Mi2512Mi
resources: requests: cpu: "2" memory: "4Gi" limits: cpu: "4" memory: "8Gi"

5.3 定期配置检查清单

为确保监控系统持续健康运行,建议每月检查:

  1. 存储空间使用情况(df -h /data)
  2. 抓取目标状态(up指标)
  3. 告警规则有效性
  4. 组件版本更新
  5. 资源使用率监控

在大型集群中,我们曾通过优化relabel配置将Prometheus内存使用降低40%。关键是将不必要

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 5:55:58

Gemini 3.1 Pro 实战指南:从生成器到执行器的推理范式升级

1. 这不是小修小补&#xff0c;是推理范式的悄然切换Gemini 3.1 Pro 这个名字刚出来的时候&#xff0c;我第一反应是点开日历确认下是不是愚人节提前了。毕竟去年11月 Gemini 3 Pro 才刚从 Preview 走进正式版&#xff0c;连用户反馈的“热身期”都还没过完&#xff0c;谷歌就甩…

作者头像 李华
网站建设 2026/6/4 5:43:19

Qwen3.6-Plus实战指南:Android并发问题识别与代码分析

1. 项目概述&#xff1a;一个Android开发者眼中的Qwen3.6-Plus实战初体验我是做智能穿戴设备固件与App协同开发的&#xff0c;日常在Android Studio里和BLE协议栈、低功耗调度、传感器融合算法打交道&#xff0c;代码库里光是健康数据模块就横跨Java/Kotlin/NDK三层&#xff0c…

作者头像 李华
网站建设 2026/6/4 5:38:42

Java Web 公寓报修管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着城市化进程的加速和公寓住宅的普及&#xff0c;传统的人工报修管理模式已难以满足高效、便捷的维修需求。公寓住户在报修过程中常面临响应慢、流程繁琐、信息不透明等问题&#xff0c;亟需一种智能化的管理系统来优化报修流程、提升管理效率。该系统旨在通过信息化手段…

作者头像 李华