AntiAtropos / deploy-local.ps1
div18
droplet
2244d0f
# AntiAtropos Local Cluster Deploy
# Deploys workloads, Prometheus, and Grafana on the Kind cluster.
# Grafana port-forward starts automatically at the end.
param(
[switch]$SkipPortForward,
[int]$GrafanaPort = 3000
)
Write-Host "=== AntiAtropos Local Deploy ===" -ForegroundColor Cyan
Write-Host ""
# --- 1. Check cluster ---
Write-Host "[1/5] Checking Kind cluster..." -ForegroundColor Yellow
$cluster = kubectl config current-context 2>$null
if ($cluster -notmatch "antiatropos") {
Write-Host "WARNING: Current context is '$cluster', expected 'kind-antiatropos-local'. Proceed anyway? [Y/n]"
$r = Read-Host
if ($r -eq 'n') { exit 1 }
}
# --- 2. Deploy workload pods ---
Write-Host "[2/5] Deploying workload pods..." -ForegroundColor Yellow
kubectl create ns prod-sre 2>&1 | Out-Null
kubectl create ns monitoring 2>&1 | Out-Null
kubectl apply -f "$PSScriptRoot\deploy\local-laptop.yaml"
Write-Host " Waiting for workloads to be ready..."
kubectl wait --for=condition=ready pod -l app --all -n prod-sre --timeout=120s 2>$null
Write-Host " Workloads ready."
# --- 3. Deploy Prometheus ---
Write-Host "[3/5] Deploying Prometheus..." -ForegroundColor Yellow
$promRelease = helm list -n monitoring -q 2>$null | Select-String "prometheus"
if ($promRelease) {
helm upgrade prometheus prometheus-community/prometheus -n monitoring -f "$PSScriptRoot\deploy\prometheus-helm-values.yaml"
} else {
helm install prometheus prometheus-community/prometheus -n monitoring -f "$PSScriptRoot\deploy\prometheus-helm-values.yaml"
}
Write-Host " Waiting for Prometheus server..."
kubectl wait --for=condition=ready pod -l "app.kubernetes.io/name=prometheus" -n monitoring --timeout=120s 2>$null
Write-Host " Prometheus ready."
# --- 4. Deploy Grafana ---
Write-Host "[4/5] Deploying Grafana..." -ForegroundColor Yellow
# Update dashboard ConfigMap
kubectl delete configmap grafana-dashboards -n monitoring 2>$null
kubectl create configmap grafana-dashboards -n monitoring --from-file="$PSScriptRoot\deploy\grafana\provisioning\dashboards\json\"
$grafRelease = helm list -n monitoring -q 2>$null | Select-String "grafana"
if ($grafRelease) {
helm upgrade grafana grafana/grafana -n monitoring -f "$PSScriptRoot\deploy\grafana-helm-values.yaml"
} else {
helm install grafana grafana/grafana -n monitoring -f "$PSScriptRoot\deploy\grafana-helm-values.yaml"
}
Write-Host " Waiting for Grafana..."
kubectl wait --for=condition=ready pod -l "app.kubernetes.io/name=grafana" -n monitoring --timeout=120s 2>$null
Write-Host " Grafana ready."
# --- 5. Start Grafana port-forward ---
Write-Host "[5/5] Grafana port-forward..." -ForegroundColor Yellow
if (-not $SkipPortForward) {
# Kill any existing port-forward on the same port
$existing = Get-NetTCPConnection -LocalPort $GrafanaPort -ErrorAction SilentlyContinue 2>$null
if ($existing) {
$pid = $existing.OwningProcess
Stop-Process -Id $pid -Force -ErrorAction SilentlyContinue 2>$null
Start-Sleep -Seconds 1
}
Write-Host " Starting port-forward on localhost:$GrafanaPort..."
$proc = Start-Process -PassThru -NoNewWindow kubectl -ArgumentList "port-forward","-n","monitoring","svc/grafana","${GrafanaPort}:80"
Start-Sleep -Seconds 2
# Verify the port-forward is alive
try {
$null = Invoke-WebRequest -Uri "http://localhost:$GrafanaPort/api/health" -UseBasicParsing -TimeoutSec 5
Write-Host ""
Write-Host "=== Deploy Complete ===" -ForegroundColor Green
Write-Host " Grafana: http://localhost:$GrafanaPort (admin / antiatropos)"
Write-Host " Dashboards: AntiAtropos Overview, AntiAtropos Live Control Plane"
Write-Host " Port-forward PID: $($proc.Id)"
Write-Host ""
Write-Host "To stop port-forward: Stop-Process -Id $($proc.Id)"
} catch {
Write-Host "WARNING: Port-forward started but Grafana not reachable yet. Try: kubectl port-forward -n monitoring svc/grafana ${GrafanaPort}:80"
}
} else {
Write-Host ""
Write-Host "=== Deploy Complete ===" -ForegroundColor Green
Write-Host " To access Grafana: kubectl port-forward -n monitoring svc/grafana ${GrafanaPort}:80"
}