#!/bin/bash set -e echo "==================================================" echo "Deploying Observability Stack to Kubernetes" echo "==================================================" echo "" # Colors for output GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color echo -e "${YELLOW}Pre-deployment Check: Existing Monitoring Stack${NC}" echo "" echo "If you have an existing monitoring/prometheus/grafana deployment," echo "you should remove it first to avoid conflicts." echo "" read -p "Do you want to run the cleanup script now? (yes/no): " run_cleanup if [ "$run_cleanup" = "yes" ]; then if [ -f "./remove-old-monitoring.sh" ]; then echo "Running cleanup script..." ./remove-old-monitoring.sh echo "" echo "Cleanup complete. Continuing with deployment..." echo "" else echo -e "${RED}Error: remove-old-monitoring.sh not found${NC}" echo "Please run it manually before deploying." exit 1 fi fi echo -e "${YELLOW}Step 1: Creating storage directories on node...${NC}" echo "Please run this on the hetzner-2 node:" echo " sudo mkdir -p /mnt/local-ssd/{prometheus,loki,tempo,grafana}" echo " sudo chown -R 65534:65534 /mnt/local-ssd/prometheus" echo " sudo chown -R 10001:10001 /mnt/local-ssd/loki" echo " sudo chown -R root:root /mnt/local-ssd/tempo" echo " sudo chown -R 472:472 /mnt/local-ssd/grafana" echo "" read -p "Press Enter once directories are created..." echo -e "${GREEN}Step 2: Creating namespace...${NC}" kubectl apply -f 00-namespace.yaml echo -e "${GREEN}Step 3: Creating PersistentVolumes...${NC}" kubectl apply -f 01-persistent-volumes.yaml echo -e "${GREEN}Step 4: Creating PersistentVolumeClaims...${NC}" kubectl apply -f 02-persistent-volume-claims.yaml echo -e "${GREEN}Step 5: Creating ConfigMaps...${NC}" kubectl apply -f 03-prometheus-config.yaml kubectl apply -f 04-loki-config.yaml kubectl apply -f 05-tempo-config.yaml kubectl apply -f 06-alloy-config.yaml kubectl apply -f 07-grafana-datasources.yaml echo -e "${GREEN}Step 6: Creating RBAC resources...${NC}" kubectl apply -f 08-rbac.yaml echo -e "${GREEN}Step 7: Deploying Prometheus...${NC}" kubectl apply -f 10-prometheus.yaml echo -e "${GREEN}Step 8: Deploying Loki...${NC}" kubectl apply -f 11-loki.yaml echo -e "${GREEN}Step 9: Deploying Tempo...${NC}" kubectl apply -f 12-tempo.yaml echo -e "${GREEN}Step 10: Deploying Grafana...${NC}" kubectl apply -f 13-grafana.yaml echo -e "${GREEN}Step 11: Deploying Grafana Alloy...${NC}" kubectl apply -f 14-alloy.yaml echo -e "${GREEN}Step 12: Deploying kube-state-metrics...${NC}" kubectl apply -f 15-kube-state-metrics.yaml echo -e "${GREEN}Step 13: Deploying node-exporter...${NC}" kubectl apply -f 16-node-exporter.yaml echo -e "${GREEN}Step 14: Creating Grafana Ingress...${NC}" kubectl apply -f 20-grafana-ingress.yaml echo "" echo -e "${GREEN}==================================================" echo "Deployment Complete!" echo "==================================================${NC}" echo "" echo "Waiting for pods to be ready..." kubectl wait --for=condition=ready pod -l app=prometheus -n observability --timeout=300s kubectl wait --for=condition=ready pod -l app=loki -n observability --timeout=300s kubectl wait --for=condition=ready pod -l app=tempo -n observability --timeout=300s kubectl wait --for=condition=ready pod -l app=grafana -n observability --timeout=300s echo "" echo -e "${GREEN}All pods are ready!${NC}" echo "" echo "Access Grafana at: https://grafana.betelgeusebytes.io" echo "Default credentials: admin / admin" echo "" echo "To check status:" echo " kubectl get pods -n observability" echo "" echo "To view logs:" echo " kubectl logs -n observability -l app=grafana" echo " kubectl logs -n observability -l app=prometheus" echo " kubectl logs -n observability -l app=loki" echo " kubectl logs -n observability -l app=tempo" echo ""