# Kubernetes Deployment for Auction Monitor ## Quick Start ### 1. Build and Push Docker Image ```bash # Build image docker build -t your-registry/auction-monitor:latest . # Push to registry docker push your-registry/auction-monitor:latest ``` ### 2. Update deployment.yaml Edit `deployment.yaml` and replace: - `image: auction-monitor:latest` with your image - `auction-monitor.yourdomain.com` with your domain ### 3. Deploy to Kubernetes ```bash # Apply all resources kubectl apply -f k8s/deployment.yaml # Or apply individually kubectl apply -f k8s/namespace.yaml kubectl apply -f k8s/configmap.yaml kubectl apply -f k8s/secret.yaml kubectl apply -f k8s/deployment.yaml kubectl apply -f k8s/service.yaml kubectl apply -f k8s/ingress.yaml ``` ### 4. Verify Deployment ```bash # Check pods kubectl get pods -n auction-monitor # Check services kubectl get svc -n auction-monitor # Check ingress kubectl get ingress -n auction-monitor # View logs kubectl logs -f deployment/auction-monitor -n auction-monitor ``` ### 5. Access Application ```bash # Port forward for local access kubectl port-forward svc/auction-monitor 8081:8081 -n auction-monitor # Access API curl http://localhost:8081/api/monitor/status # Access health check curl http://localhost:8081/health/live ``` ## Configuration ### ConfigMap Edit workflow schedules in `configMap`: ```yaml data: AUCTION_WORKFLOW_SCRAPER_IMPORT_CRON: "0 */30 * * * ?" # Every 30 min AUCTION_WORKFLOW_IMAGE_PROCESSING_CRON: "0 0 * * * ?" # Every 1 hour AUCTION_WORKFLOW_BID_MONITORING_CRON: "0 */15 * * * ?" # Every 15 min AUCTION_WORKFLOW_CLOSING_ALERTS_CRON: "0 */5 * * * ?" # Every 5 min ``` ### Secrets Update notification configuration: ```bash # Create secret kubectl create secret generic auction-secrets \ --from-literal=notification-config='smtp:user@gmail.com:password:recipient@example.com' \ -n auction-monitor # Or edit existing kubectl edit secret auction-secrets -n auction-monitor ``` ## Scaling ### Manual Scaling ```bash # Scale to 3 replicas kubectl scale deployment auction-monitor --replicas=3 -n auction-monitor ``` ### Auto Scaling HPA is configured in `deployment.yaml`: ```yaml spec: minReplicas: 1 maxReplicas: 3 metrics: - type: Resource resource: name: cpu target: averageUtilization: 80 ``` View HPA status: ```bash kubectl get hpa -n auction-monitor ``` ## Monitoring ### Health Checks ```bash # Liveness kubectl exec -it deployment/auction-monitor -n auction-monitor -- \ wget -qO- http://localhost:8081/health/live # Readiness kubectl exec -it deployment/auction-monitor -n auction-monitor -- \ wget -qO- http://localhost:8081/health/ready ``` ### Logs ```bash # Follow logs kubectl logs -f deployment/auction-monitor -n auction-monitor # Logs from all pods kubectl logs -f -l app=auction-monitor -n auction-monitor # Previous pod logs kubectl logs deployment/auction-monitor --previous -n auction-monitor ``` ## Troubleshooting ### Pod not starting ```bash # Describe pod kubectl describe pod -l app=auction-monitor -n auction-monitor # Check events kubectl get events -n auction-monitor --sort-by='.lastTimestamp' ``` ### Database issues ```bash # Check PVC kubectl get pvc -n auction-monitor # Check volume mount kubectl exec -it deployment/auction-monitor -n auction-monitor -- ls -la /data ``` ### Network issues ```bash # Test service kubectl run -it --rm debug --image=busybox --restart=Never -n auction-monitor -- \ wget -qO- http://auction-monitor:8081/health/live ``` ## Cleanup ```bash # Delete all resources kubectl delete -f k8s/deployment.yaml # Or delete namespace (removes everything) kubectl delete namespace auction-monitor ```