# Deployment Commands - Quick Reference ## Implementation Complete ✅ All changes are implemented. Services now only verify database readiness - they never run migrations. --- ## Deploy the New Architecture ### Option 1: Skaffold (Recommended) ```bash # Development mode (auto-rebuild on changes) skaffold dev # Production deployment skaffold run ``` ### Option 2: Manual Deployment ```bash # 1. Build all service images for service in auth orders inventory external pos sales recipes \ training suppliers tenant notification forecasting \ production alert-processor; do docker build -t bakery/${service}-service:latest services/${service}/ done # 2. Apply Kubernetes manifests kubectl apply -f infrastructure/kubernetes/base/ # 3. Wait for rollout kubectl rollout status deployment --all -n bakery-ia ``` --- ## Verification Commands ### Check Services Are Using New Code: ```bash # Check external service logs for verification (not migration) kubectl logs -n bakery-ia deployment/external-service | grep -i "verification" # Expected output: # [info] Database verification mode - checking database is ready # [info] Database verification successful # Should NOT see (old behavior): # [info] Running pending migrations ``` ### Check All Services: ```bash # Check all service logs for service in auth orders inventory external pos sales recipes \ training suppliers tenant notification forecasting \ production alert-processor; do echo "=== Checking $service-service ===" kubectl logs -n bakery-ia deployment/${service}-service --tail=20 | grep -E "(verification|migration)" || echo "No logs yet" done ``` ### Check Startup Times: ```bash # Watch pod startup times kubectl get events -n bakery-ia --sort-by='.lastTimestamp' --watch # Or check specific service kubectl describe pod -n bakery-ia -l app.kubernetes.io/name=external-service | grep -A 5 "Events:" ``` --- ## Troubleshooting ### Service Won't Start - "Database is empty" ```bash # 1. Check migration job status kubectl get jobs -n bakery-ia | grep migration # 2. Check specific migration job kubectl logs -n bakery-ia job/external-migration # 3. Re-run migration job if needed kubectl delete job external-migration -n bakery-ia kubectl apply -f infrastructure/kubernetes/base/migrations/external-migration.yaml ``` ### Service Won't Start - "No migration files found" ```bash # 1. Check if migrations exist in image kubectl exec -n bakery-ia deployment/external-service -- ls -la /app/migrations/versions/ # 2. If missing, regenerate and rebuild ./regenerate_migrations_k8s.sh --verbose skaffold build kubectl rollout restart deployment/external-service -n bakery-ia ``` ### Check Migration Job Logs: ```bash # List all migration jobs kubectl get jobs -n bakery-ia | grep migration # Check specific job logs kubectl logs -n bakery-ia job/-migration # Example: kubectl logs -n bakery-ia job/auth-migration ``` --- ## Performance Testing ### Measure Startup Time Improvement: ```bash # 1. Record current startup times kubectl get events -n bakery-ia --sort-by='.lastTimestamp' | grep "Started container" > before.txt # 2. Deploy new code skaffold run # 3. Restart services to measure kubectl rollout restart deployment --all -n bakery-ia # 4. Record new startup times kubectl get events -n bakery-ia --sort-by='.lastTimestamp' | grep "Started container" > after.txt # 5. Compare (should be 50-80% faster) diff before.txt after.txt ``` ### Monitor Database Load: ```bash # Check database connections during startup kubectl exec -n bakery-ia external-db- -- \ psql -U external_user -d external_db -c \ "SELECT count(*) FROM pg_stat_activity WHERE datname='external_db';" ``` --- ## Rollback (If Needed) ### Rollback Deployments: ```bash # Rollback specific service kubectl rollout undo deployment/external-service -n bakery-ia # Rollback all services kubectl rollout undo deployment --all -n bakery-ia # Check rollout status kubectl rollout status deployment --all -n bakery-ia ``` ### Rollback to Specific Revision: ```bash # List revisions kubectl rollout history deployment/external-service -n bakery-ia # Rollback to specific revision kubectl rollout undo deployment/external-service --to-revision=2 -n bakery-ia ``` --- ## Clean Deployment ### If You Want Fresh Start: ```bash # 1. Delete everything kubectl delete namespace bakery-ia # 2. Recreate namespace kubectl create namespace bakery-ia # 3. Apply all manifests kubectl apply -f infrastructure/kubernetes/base/ # 4. Wait for all to be ready kubectl wait --for=condition=ready pod --all -n bakery-ia --timeout=300s ``` --- ## Health Checks ### Check All Pods: ```bash kubectl get pods -n bakery-ia ``` ### Check Services Are Ready: ```bash # Check all services kubectl get deployments -n bakery-ia # Check specific service health kubectl exec -n bakery-ia deployment/external-service -- \ curl -s http://localhost:8000/health/live ``` ### Check Migration Jobs Completed: ```bash # Should all show "Complete" kubectl get jobs -n bakery-ia | grep migration ``` --- ## Useful Aliases Add to your `~/.bashrc` or `~/.zshrc`: ```bash # Kubernetes bakery-ia shortcuts alias k='kubectl' alias kn='kubectl -n bakery-ia' alias kp='kubectl get pods -n bakery-ia' alias kd='kubectl get deployments -n bakery-ia' alias kj='kubectl get jobs -n bakery-ia' alias kl='kubectl logs -n bakery-ia' alias kdesc='kubectl describe -n bakery-ia' # Quick log checks alias klogs='kubectl logs -n bakery-ia deployment/' # Example usage: # klogs external-service | grep verification ``` --- ## Expected Output Examples ### Migration Job (Successful): ``` [info] Migration job starting service=external [info] Migration mode - running database migrations [info] Running pending migrations INFO [alembic.runtime.migration] Context impl PostgresqlImpl. INFO [alembic.runtime.migration] Will assume transactional DDL. [info] Migrations applied successfully [info] Migration job completed successfully ``` ### Service Startup (New Behavior): ``` [info] Starting external-service version=1.0.0 [info] Database connection established [info] Database verification mode - checking database is ready [info] Database state checked [info] Database verification successful migration_count=1 current_revision=374752db316e table_count=6 [info] Database verification completed [info] external-service started successfully ``` --- ## CI/CD Integration ### GitHub Actions Example: ```yaml name: Deploy to Kubernetes on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build and push images run: skaffold build - name: Deploy to cluster run: skaffold run - name: Verify deployment run: | kubectl rollout status deployment --all -n bakery-ia kubectl get pods -n bakery-ia ``` --- ## Summary **To Deploy**: Just run `skaffold dev` or `skaffold run` **To Verify**: Check logs show "verification" not "migration" **To Troubleshoot**: Check migration job logs first **Expected Result**: Services start 50-80% faster, no redundant migration execution **Status**: ✅ Ready to deploy!