Skip to content
Shain Lafazan
← Blog

Deploy Grafana to AWS EKS

Set the password which Grafana will be bootstrapped with.

export GRAFANA_NAMESPACE=grafana
export GRAFANA_ADMIN_PASSWORD=________
export GRAFANA_ROUTE53_DOMAIN=________
export GRAFANA_PUBLIC_SUBNET_IDS=_______
export GRAFANA_ACM_CERT_ARN=_______
export GRAFANA_ALB_SECURITY_GROUP_ID=_______
kubectl create ns $GRAFANA_NAMESPACE
# grafana.yaml
datasources:
  datasources.yaml:
    apiVersion: 1
    datasources:
      - name: Prometheus
        type: prometheus
        url: http://prometheus-server.prometheus.svc.cluster.local
        access: proxy
        isDefault: true
# Add helm repository for Grafana
helm repo add grafana https://grafana.github.io/helm-charts

# Install Grafana
helm install grafana grafana/grafana \
    --namespace $GRAFANA_NAMESPACE \
    --set persistence.storageClass="gp2" \
    --set persistence.enabled=true \
    --set adminPassword=$GRAFANA_ADMIN_PASSWORD \
    --values grafana.yaml \
    --set service.type=NodePort

If you haven’t already, install aws-load-balancer-controller

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana-ingress
  namespace: grafana
  annotations:
    alb.ingress.kubernetes.io/load-balancer-name: grafana-alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/subnets: ${GRAFANA_PUBLIC_SUBNET_IDS}
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]'
    alb.ingress.kubernetes.io/certificate-arn: ${GRAFANA_ACM_CERT_ARN}
    alb.ingress.kubernetes.io/security-groups: ${GRAFANA_ALB_SECURITY_GROUP_ID}
    alb.ingress.kubernetes.io/healthcheck-port: "3000"
    alb.ingress.kubernetes.io/healthcheck-path: /api/health
spec:
  ingressClassName: alb
  rules:
    - host: ${GRAFANA_ROUTE53_DOMAIN}
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: grafana
                port:
                  number: 80