betelgeusebytes/k8s/observability-stack/deploy.sh

115 lines
3.8 KiB
Bash
Executable File

#!/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 ""