在 Kubernetes 上完整安装 Prometheus 全家桶(kube-prometheus-stack)的标准化步骤总结,适用于 无外网或受限环境。包含 Namespace、PV/PVC(使用
·
✅ 一、前提条件
• 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)
更多推荐
所有评论(0)