#!/bin/bash # Kubernetes Deployment Script for 3-Node Cluster # Usage: ./deploy.sh set -e echo "🚀 Deploying to Kubernetes (3-Node Cluster)..." # Check if kubectl is available if ! command -v kubectl &> /dev/null; then echo "❌ kubectl not found. Please install kubectl first." exit 1 fi # Check cluster connection echo "📡 Checking Kubernetes cluster connection..." kubectl cluster-info || { echo "❌ Cannot connect to Kubernetes cluster. Please configure kubectl." exit 1 } # Check node count NODE_COUNT=$(kubectl get nodes --no-headers | wc -l) echo "📊 Cluster has $NODE_COUNT node(s)" # Apply namespace echo "📦 Creating namespace..." kubectl apply -f manifests/namespace.yaml # Apply secrets echo "🔐 Creating secrets..." kubectl apply -f manifests/secrets.yaml # Apply FastAPI echo "🐍 Deploying FastAPI backend..." kubectl apply -f manifests/fastapi-deployment.yaml kubectl apply -f manifests/fastapi-service.yaml kubectl apply -f manifests/fastapi-hpa.yaml # Apply Workers echo "👷 Deploying NATS workers..." kubectl apply -f manifests/worker-deployment.yaml kubectl apply -f manifests/worker-hpa.yaml # Apply Gateway (optional - only if Gateway API is installed) read -p "Deploy Gateway API? (requires Gateway API controller) [y/N] " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "🚪 Deploying Gateway API..." kubectl apply -f manifests/gateway.yaml fi echo "" echo "✅ Deployment complete!" echo "" echo "📋 Check status:" echo " kubectl get pods -n nats-backend -o wide" echo " kubectl get nodes" echo " kubectl get hpa -n nats-backend" echo "" echo "📊 View pod distribution across nodes:" echo " kubectl get pods -n nats-backend -o wide | grep -E 'NAME|fastapi|worker'" echo "" echo "📝 View logs:" echo " kubectl logs -f deployment/fastapi-backend -n nats-backend" echo " kubectl logs -f deployment/nats-worker -n nats-backend" echo ""