本教程详细介绍如何在 Kubernetes 集群中使用 Helm 部署 Prometheus 和 Grafana,包含完整的安装配置步骤、持久化存储设置、以及 UI 自定义方案。
在 K8s 上部署 Prometheus 和 Grafana
🔧 准备工作
1. 环境要求
- 操作系统: Ubuntu 20.04+
- Kubernetes: 正常运行的集群
- Helm: 3.x 版本
- kubectl: 已配置且可用
2. 安装必要工具
# 安装 Helm 3
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 安装 kubectl(如未安装)
sudo snap install kubectl --classic
# 验证安装
helm version
kubectl cluster-info
3. 创建监控命名空间
kubectl create namespace monitoring
📦 部署 Prometheus
1. 添加 Helm 仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
2. 安装 Prometheus Stack
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--set prometheus.service.type=NodePort \
--set prometheus.service.nodePort=30090
3. 自定义配置(可选)
创建 values.yaml:
prometheus:
prometheusSpec:
retention: 15d
resources:
requests:
memory: "512Mi"
cpu: "500m"
storageSpec:
volumeClaimTemplate:
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
应用配置:
helm upgrade prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
-f values.yaml
🎨 配置 Grafana
1. 暴露 Grafana 服务
helm upgrade prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--set grafana.service.type=NodePort \
--set grafana.service.nodePort=30000
2. 获取访问凭证
# 获取管理员密码
kubectl get secret -n monitoring prometheus-grafana \
-o jsonpath='{.data.admin-password}' | base64 --decode
// …existing code…
🔄 持久化存储配置
1. 创建持久卷声明(PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: grafana-pvc
namespace: monitoring
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
2. 更新 Grafana 配置
grafana:
persistence:
enabled: true
existingClaim: grafana-pvc
size: 10Gi
🌐 配置 Ingress 访问
1. 创建 Ingress 规则
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: monitoring-ingress
namespace: monitoring
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: grafana.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: prometheus-grafana
port:
number: 80
2. 应用 Ingress 配置
kubectl apply -f ingress.yaml
📊 导入 Dashboard
1. 常用 Dashboard ID
| 用途 | Dashboard ID | 说明 |
|---|---|---|
| 节点监控 | 1860 | Node Exporter 全量指标 |
| 集群概览 | 13105 | Kubernetes 集群监控 |
| 资源使用 | 8685 | Pod 资源使用详情 |
| 网络监控 | 12175 | 网络流量分析 |
2. 导入步骤
- 访问 Grafana UI
- 点击
+>Import - 输入 Dashboard ID
- 选择数据源(默认
Prometheus) - 点击
Import
🔍 监控验证
1. 检查组件状态
# 检查 Pod 状态
kubectl get pods -n monitoring
# 检查服务状态
kubectl get svc -n monitoring
# 查看资源使用
kubectl top nodes
2. 验证数据采集
# 查看目标状态
curl -s http://<节点IP>:30090/targets | grep "UP"
# 检查告警规则
kubectl get prometheusrules -n monitoring
⚠️ 常见问题排查
Pod 无法启动
# 查看详细错误 kubectl describe pod <pod-name> -n monitoring
查看容器日志
kubectl logs
2. **数据采集异常**
- 检查 ServiceMonitor 配置
- 验证标签选择器
- 确认端口暴露正确
3. **Grafana 访问问题**
- 确认服务暴露方式
- 检查 Ingress 配置
- 验证网络策略
## 📝 运维建议
1. 定期备份 Grafana 配置
```bash
kubectl cp monitoring/prometheus-grafana-xxx:/var/lib/grafana ./grafana-backup
监控资源使用
# 设置资源告警 kubectl apply -f prometheus-rules.yaml日志轮转配置
prometheus: prometheusSpec: retention: 15d retentionSize: "10GB"
🔗 参考资源
关于我
全平台同名”汪多多是只猫”,专注分享实用开源工具,让你的数字生活更自由!
关注我,发现更多旧物改造的乐趣与技巧!