使用Kubernetes搭建性能监控系统

简介: Kubernetes是一个强大的容器编排平台,能大幅简化大规模、容器化应用的部署和管理。通过它搭建性能监控系统,可以实现高度的自动化和弹性。

大家好,我是小悟。

Kubernetes是一个强大的容器编排平台,能大幅简化大规模、容器化应用的部署和管理。通过它搭建性能监控系统,可以实现高度的自动化和弹性。

下面是详细的步骤和说明,帮你从零开始,在Kubernetes上建立一个基于Prometheus、Grafana和Alertmanager的现代化性能监控系统。

第一步:部署 Prometheus 和 Alertmanager

Prometheus 是核心的监控数据抓取、存储和告警引擎。

1. 创建命名空间 将监控相关组件隔离到一个独立的命名空间中。

# 01-namespace.yaml apiVersion: v1 kind: Namespace metadata:   name: monitoring

2. 部署 Prometheus 这里使用一个简化配置的Deployment示例。实际生产应使用StatefulSet管理数据持久化。

# 02-prometheus-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:   name: prometheus-server   namespace: monitoring spec:   replicas: 1   selector:     matchLabels:       app: prometheus   template:     metadata:       labels:         app: prometheus     spec:       containers:       - name: prometheus         image: prom/prometheus:latest         args:           - "--config.file=/etc/prometheus/prometheus.yml"           - "--storage.tsdb.path=/prometheus/data"         ports:         - containerPort: 9090         volumeMounts:         - name: prometheus-config-volume           mountPath: /etc/prometheus         - name: prometheus-storage-volume           mountPath: /prometheus/data       volumes:       - name: prometheus-config-volume         configMap:           name: prometheus-config       - name: prometheus-storage-volume         emptyDir: {} --- apiVersion: v1 kind: ConfigMap metadata:   name: prometheus-config   namespace: monitoring data:   prometheus.yml: |     global:       scrape_interval: 15s     scrape_configs:       - job_name: 'kubernetes-pods'         kubernetes_sd_configs:         - role: pod         relabel_configs:         - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]           action: keep           regex: true

3. 部署 Alertmanager Alertmanager负责处理Prometheus发送的告警,并进行分组、抑制和路由。

# 03-alertmanager-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:   name: alertmanager   namespace: monitoring spec:   replicas: 1   selector:     matchLabels:       app: alertmanager   template:     metadata:       labels:         app: alertmanager     spec:       containers:       - name: alertmanager         image: prom/alertmanager:latest         ports:         - containerPort: 9093

4. 暴露服务 为Prometheus和Alertmanager创建Service,以便在集群内访问。

# 04-prometheus-alertmanager-service.yaml apiVersion: v1 kind: Service metadata:   name: prometheus-service   namespace: monitoring spec:   selector:     app: prometheus   ports:   - port: 80     targetPort: 9090 --- apiVersion: v1 kind: Service metadata:   name: alertmanager-service   namespace: monitoring spec:   selector:     app: alertmanager   ports:   - port: 80     targetPort: 9093

应用以上配置:

kubectl apply -f 01-namespace.yaml kubectl apply -f 02-prometheus-deployment.yaml kubectl apply -f 03-alertmanager-deployment.yaml kubectl apply -f 04-prometheus-alertmanager-service.yaml

第二步:部署 Grafana 数据可视化

Grafana 是强大的数据可视化工具,用于展示从 Prometheus 查询到的监控图表。

1. 部署 Grafana 同样以Deployment形式部署,并通过ConfigMap预设数据源。

# 05-grafana-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:   name: grafana   namespace: monitoring spec:   replicas: 1   selector:     matchLabels:       app: grafana   template:     metadata:       labels:         app: grafana     spec:       containers:       - name: grafana         image: grafana/grafana:latest         ports:         - containerPort: 3000         env:         - name: GF_SECURITY_ADMIN_PASSWORD           value: "admin" # 生产环境请使用Secret管理密码         volumeMounts:         - name: grafana-datasources-volume           mountPath: /etc/grafana/provisioning/datasources       volumes:       - name: grafana-datasources-volume         configMap:           name: grafana-datasources --- apiVersion: v1 kind: ConfigMap metadata:   name: grafana-datasources   namespace: monitoring data:   prometheus.yaml: |     apiVersion: 1     datasources:     - name: Prometheus       type: prometheus       url: http://prometheus-service.monitoring.svc.cluster.local:80      access: proxy       isDefault: true

2. 暴露 Grafana 服务 创建Service,并为了方便访问,可额外创建一个NodePort或LoadBalancer类型的服务。

# 06-grafana-service.yaml apiVersion: v1 kind: Service metadata:   name: grafana-service   namespace: monitoring spec:   selector:     app: grafana   ports:   - port: 80     targetPort: 3000

应用配置:

kubectl apply -f 05-grafana-deployment.yaml kubectl apply -f 06-grafana-service.yaml

第三步:部署 Node Exporter

要监控Kubernetes节点的资源使用情况(CPU、内存、磁盘等),需要在每个节点上部署Node Exporter。

# 07-node-exporter-daemonset.yaml apiVersion: apps/v1 kind: DaemonSet metadata:   name: node-exporter   namespace: monitoring spec:   selector:     matchLabels:       app: node-exporter   template:     metadata:       labels:         app: node-exporter     spec:       hostNetwork: true       hostPID: true       containers:       - name: node-exporter         image: prom/node-exporter:latest         args:         - "--path.rootfs=/host"         ports:         - containerPort: 9100         volumeMounts:         - name: host-root           mountPath: /host           readOnly: true       volumes:       - name: host-root         hostPath:           path: /

应用配置:

kubectl apply -f 07-node-exporter-daemonset.yaml

第四步:集成与验证

所有组件部署完成后,需要进行验证和集成。

  1. 检查Pod状态:确保所有Pod都处于Running状态。

kubectl get pods -n monitoring

  1. 访问 Grafana 仪表盘:  
  • 获取访问地址:kubectl get svc grafana-service -n monitoring -o wide
  • 使用默认用户名 admin 和你在YAML中设置的密码登录。
  • 在Grafana中导入官方或社区的Prometheus监控仪表盘(如ID为 1860 的“Node Exporter Full”仪表盘),即可看到丰富的节点监控图表。


  1. 配置告警规则:在Prometheus配置中添加自定义告警规则,当指标(如节点内存使用率 > 90%)触发阈值时,告警会被发送到Alertmanager进行处理和通知。

总结与进阶

通过以上步骤,已经成功在Kubernetes上搭建了一个具备监控数据采集(Prometheus)、可视化展示(Grafana)和告警管理(Alertmanager) 核心能力的系统。

这个系统充分利用了Kubernetes的声明式API和自动化管理能力,只需描述组件的期望状态,Kubernetes就会负责调度、部署和维护。

生产环境注意事项

这个示例是入门级配置,面向生产环境时,必须考虑以下几点:

考虑方面

生产环境建议

数据持久化

为Prometheus和Grafana配置PersistentVolume (PV) 和PersistentVolumeClaim (PVC) ,确保监控数据在Pod重启后不丢失。

高可用性

部署多个Prometheus、Alertmanager和Grafana副本,并结合反亲和性策略,将它们调度到不同的节点上,避免单点故障。

安全性

为Pod配置合理的资源请求和限制;使用RBAC 角色严格控制访问权限;敏感信息(如密码)务必使用Secret 对象管理。

可扩展性

遵循微服务模式,可以通过配置让Prometheus自动发现Kubernetes中的Pod、Service等资源进行监控。对于更复杂的监控需求,可以研究使用 Prometheus Operator 来简化整个监控栈的声明式管理。

外部访问

使用Ingress Controller 或云服务商的LoadBalancer 来安全、统一地暴露Grafana等服务,而不是简单的NodePort。

这套基于Kubernetes的监控方案性能强大、扩展灵活、与云原生生态紧密结合。可以根据实际业务需求,逐步添加对特定应用、中间件(如MySQL、Redis)或自定义业务指标的监控,构建起全方位的可观测性体系。



谢谢你看我的文章,既然看到这里了,如果觉得不错,随手点个赞、转发、在看三连吧,感谢感谢。那我们,下次再见。


您的一键三连,是我更新的最大动力,谢谢

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

相关文章
|
1天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23255 1
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
2天前
|
人工智能 API 开发工具
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
Claude Code是我目前最推荐的AI编程工具,没有之一。 它可能不是最简单的,但绝对是上限最高的。一旦跑通安装、接上模型、定好规范,你会发现很多原本需要几小时的工作,现在几分钟就能搞定。 这套方案的核心优势就三个字:可控性。你不用依赖任何不稳定服务,所有组件都在自己手里。模型效果不好?换一个。框架更新了?自己决定升不升。 这才是AI时代开发者该有的姿势——不是被动等喂饭,而是主动搭建自己的生产力基础设施。 希望这篇保姆教程,能帮你顺利上车。做出你自己的作品。
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
|
10天前
|
缓存 人工智能 自然语言处理
我对比了8个Claude API中转站,踩了不少坑,总结给你
本文是个人开发者耗时1周实测的8大Claude中转平台横向评测,聚焦Claude Code真实体验:以加权均价(¥/M token)、内部汇率、缓存支持、模型真实性及稳定性为核心指标。
4037 23
|
4天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
2298 5
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
6天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
2726 8
|
22天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
19485 61
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
3天前
|
SQL 人工智能 弹性计算
阿里云发布 Agentic NDR,威胁检测与响应进入智能体时代
欢迎前往阿里云云防火墙控制台体验!
1173 2