65 lines
2.8 KiB
Bash
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 "======================================================"
|