✅ 一、前提条件

• Kubernetes 集群已部署(v1.20+)
• kubectl 和 helm 已安装
• 至少一个可调度的 worker 节点(如 k8s-node-1)
• 节点上能运行容器镜像(必要时预加载)

✅ 二、整体架构组件

  • Prometheus 时序数据库 + 抓取指标
  • Alertmanager 告警路由与通知
  • Grafana 可视化仪表盘
  • Node Exporter 主机指标采集
  • Kube State Metrics Kubernetes 对象状态
  • Operator 自动管理上述组件

✅ 三、完整安装步骤

步骤 1:创建监控命名空间

kubectl create namespace monitoring

步骤 2:部署 Local Path Provisioner(用于动态 PV)

适用于单节点或测试环境,无需 NFS/Ceph。
2.1 下载官方 YAML(建议离线保存)
wget https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.24/deploy/local-path-storage.yaml
2.2 应用部署
kubectl apply -f local-path-storage.yaml
此操作会:
	○ 创建 local-path-storage namespace
	○ 部署 provisioner Pod
	○ 创建默认 StorageClass local-path(带 WaitForFirstConsumer)
2.3 在每个 worker 节点创建存储目录(如 k8s-node-1)
#登录 k8s-node-1
ssh root@k8s-node-1
mkdir -p /opt/local-path-provisioner
chmod 777 /opt/local-path-provisioner
2.4 (可选)确保节点能拉取 busybox 镜像
# 在 k8s-node-1 上执行
crictl pull busybox

# 或离线导入
ctr -n k8s.io images import busybox.tar
步骤 3:准备 Helm Values 配置文件

创建 /data/k8s/monitor/prometheus-values.yaml:

# Namespace
namespaceOverride: "monitoring"
# Grafana
grafana:
  enabled: true
  adminPassword: "SecureGrafanaPass123!"
  persistence:
    enabled: true
    storageClassName: "local-path"
    size: 2Gi
  resources:
    requests:
      memory: "128Mi"
      cpu: "50m"
    limits:
      memory: "256Mi"
      cpu: "100m"
  ingress:
    enabled: true
    hosts:
      - "grafana.local"
    paths:
      - path: /
        pathType: Prefix
# Prometheus
prometheus:
  prometheusSpec:
    retention: "10d"
    storageSpec:
      volumeClaimTemplate:
        spec:
          storageClassName: local-path
          resources:
            requests:
              storage: 2Gi
    resources:
      requests:
        memory: "512Mi"
        cpu: "100m"
      limits:
        memory: "1Gi"
        cpu: "200m"
# Alertmanager
alertmanager:
  alertmanagerSpec:
    storage:
      volumeClaimTemplate:
        spec:
          storageClassName: local-path
          resources:
            requests:
              storage: 1Gi
    resources:
      requests:
        memory: "64Mi"
        cpu: "50m"
# 禁用不必要的组件(可选)
nodeExporter:
  enabled: true
kubeStateMetrics:
  enabled: true
💡 关键点:
	○ 所有 PVC 指定 storageClassName: local-path
	○ 资源请求调低以适配小内存节点
	○ Grafana 启用 Ingress
步骤 4:添加 Helm 仓库并安装
# 添加仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# 安装(指定命名空间和 values)
helm install prometheus prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --create-namespace \
  -f /data/k8s/monitor/prometheus-values.yaml
⏱️ 首次安装可能需要 2~5 分钟(等待 PV 创建 + 镜像拉取)
步骤 5:验证安装状态
# 查看 Pod
kubectl get pod -n monitoring
# 查看 PVC/PV
kubectl get pvc -n monitoring
kubectl get pv
# 应全部为 Running + Bound
步骤 6:访问 Grafana

方式 A:通过 Ingress(需 DNS 或 hosts)
在你本地电脑配置 hosts

echo "<INGRESS_NODE_IP> grafana.local" | sudo tee -a /etc/hosts

浏览器访问:
👉 http://grafana.local
• 用户名:admin
• 密码:SecureGrafanaPass123!(你在 values 中设置的)
方式 B:临时端口转发

kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80

访问:http://localhost:3000

✅ 四、常见问题排查清单

问题 检查命令 解决方案
Pod Pending kubectl describe pod -n monitoring 降低资源请求 / 移除 Taint
PVC Pending kubectl get pvc -n monitoring 确保 local-path SC 存在 + 节点有 busybox 镜像
PV 未创建 kubectl get pv 检查 Local Path Provisioner 日志
无法访问 Grafana kubectl get ingress -n monitoring 确认 Ingress Controller 已部署

✅ 五、清理(如需重装)

helm uninstall prometheus -n monitoring
kubectl delete pvc --all -n monitoring
kubectl delete namespace monitoring

如需重装 Local Path Provisioner

kubectl delete -f local-path-storage.yaml

🎯 总结

这套流程已在你的环境中验证成功,适用于:
• 单节点/多节点测试集群
• 无云存储(仅用本地磁盘)
• 资源受限环境(通过调低 requests)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐