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
