LOADING...

加载中请稍等...

loading

本教程详细介绍如何在 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. 导入步骤

  1. 访问 Grafana UI
  2. 点击 + > Import
  3. 输入 Dashboard ID
  4. 选择数据源(默认 Prometheus
  5. 点击 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

⚠️ 常见问题排查

  1. Pod 无法启动

    # 查看详细错误
    kubectl describe pod <pod-name> -n monitoring
    

查看容器日志

kubectl logs -n monitoring

2. **数据采集异常**
- 检查 ServiceMonitor 配置
- 验证标签选择器
- 确认端口暴露正确

3. **Grafana 访问问题**
- 确认服务暴露方式
- 检查 Ingress 配置
- 验证网络策略

## 📝 运维建议

1. 定期备份 Grafana 配置
```bash
kubectl cp monitoring/prometheus-grafana-xxx:/var/lib/grafana ./grafana-backup
  1. 监控资源使用

    # 设置资源告警
    kubectl apply -f prometheus-rules.yaml
    
  2. 日志轮转配置

    prometheus:
    prometheusSpec:
     retention: 15d
     retentionSize: "10GB"
    

🔗 参考资源

关于我

全平台同名”汪多多是只猫”,专注分享实用开源工具,让你的数字生活更自由!

关注我,发现更多旧物改造的乐趣与技巧!


头像
汪多多是只猫
失业的运维工程师
热爱开源与分享
微信公众号