Kubernetes: Install Grafana & Prometheus on GKE using Helm kube-prometheus-stack


https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

Add Repo

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

Create custom_values.yaml

GKE uses kubeDNS by default, so I enabled it. I created persistent disks and added an Internal Load Balancer by adding a google specific annotation.

cat <<EOF > custom_values.yaml
coreDns:
  enabled: false

kubeDns:
  enabled: true

prometheusOperator:
  createCustomResource: false

alertmanager:
  alertmanagerSpec:
    storage:
      volumeClaimTemplate:
        spec:
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 200Gi

prometheus:
  prometheusSpec:
    storageSpec:
      volumeClaimTemplate:
        spec:
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 200Gi

grafana:
  service:
    type: LoadBalancer
    annotations:
      cloud.google.com/load-balancer-type: "Internal"
  persistence:
    enabled: true
    accessModes: ["ReadWriteOnce"]
    size: 200Gi
EOF

Install

helm install grafana-prometheus \
  -n monitoring \
  -f custom_values.yaml \
  --version 17.0.3 \
  prometheus-community/kube-prometheus-stack

Access

# Grafana
kubectl port-forward service/grafana-prometheus 3000:80 -n monitoring
open http://localhost:3000/
un: admin
pw: prom-operator

# Prometheus
kubectl port-forward service/grafana-prometheus-prometh-prometheus 9090 -n monitoring
open http://localhost:9090/graph
open http://localhost:9090/alerts

# Alert Manager
kubectl port-forward service/grafana-prometheus-prometh-alertmanager 9093 -n monitoring
open http://localhost:9093/

# Metrics
kubectl port-forward service/grafana-prometheus-kube-state-metrics 3001:8080 -n monitoring
open http://localhost:3001/