zkt26/z2/start-app.sh

65 lines
2.8 KiB
Bash

#!/usr/bin/env bash
# =============================================================================
# start-app.sh
# Creates all Kubernetes objects for the Todo application.
# Assumes: kubectl configured, minikube running, prepare-app.sh already run.
# =============================================================================
set -euo pipefail
K8S_DIR="$(dirname "$0")/k8s"
echo "======================================================"
echo " Starting K8s Todo App"
echo "======================================================"
# ── 1. Namespace ───────────────────────────────────────────
echo ""
echo "[1/6] Creating Namespace..."
kubectl apply -f "$K8S_DIR/namespace.yaml"
echo " ✓ Namespace 'todo-app' ready"
# ── 2. ConfigMap (init SQL) ────────────────────────────────
echo ""
echo "[2/6] Creating ConfigMap for database init SQL..."
kubectl apply -f "$K8S_DIR/configmap.yaml"
echo " ✓ ConfigMap 'postgres-init-sql' ready"
# ── 3. PersistentVolume + PVC + Secret + StatefulSet ──────
echo ""
echo "[3/6] Creating PersistentVolume, PVC, Secret and StatefulSet (PostgreSQL)..."
kubectl apply -f "$K8S_DIR/statefulset.yaml"
echo " ✓ PersistentVolume, PVC, Secret and StatefulSet applied"
# ── 4. Services ────────────────────────────────────────────
echo ""
echo "[4/6] Creating Services..."
kubectl apply -f "$K8S_DIR/service.yaml"
echo " ✓ Services created"
# ── 5. Wait for PostgreSQL to be ready ────────────────────
echo ""
echo "[5/6] Waiting for PostgreSQL StatefulSet to become ready (up to 3 min)..."
kubectl rollout status statefulset/postgres -n todo-app --timeout=180s
echo " ✓ PostgreSQL is ready"
# ── 6. Deployment (Flask app) ──────────────────────────────
echo ""
echo "[6/6] Creating Deployment (Flask Todo App)..."
kubectl apply -f "$K8S_DIR/deployment.yaml"
kubectl rollout status deployment/todo-app -n todo-app --timeout=120s
echo " ✓ Deployment is ready"
# ── Summary ────────────────────────────────────────────────
echo ""
echo "======================================================"
echo " Application is UP!"
echo ""
MINIKUBE_IP=$(minikube ip 2>/dev/null || echo "<minikube-ip>")
echo " Open in browser: http://${MINIKUBE_IP}:30080"
echo ""
echo " Or run: minikube service todo-app-service -n todo-app"
echo ""
echo " All pods:"
kubectl get pods -n todo-app
echo "======================================================"