# Kubernetes Task Manager - Technical Documentation ## Project Purpose This project demonstrates a production-like Kubernetes deployment featuring: - Multi-container application - Persistent storage - Scalable frontend - Proper resource management ## Deployment Components ### Core Objects | Object Type | Name | Purpose | |-------------------|---------------------|------------------------------------------------------------------| | `Namespace` | `web-app` | Isolates all application resources | | `Deployment` | `web-app` | Manages 2 replicas of frontend pods | | `StatefulSet` | `mysql` | Manages database pod with stable network identity | `Service` | `web-app-service` | Exposes frontend on NodePort 30080 | | `PersistentVolume`| `mysql-pv` | Provides 5Gi storage for database | ### Container Images | Component | Image | Port | Notes | |-----------|-----------------------------|------|----------------------------------------| | Frontend | `k8s-task-manager-frontend` | 80 | Custom-built Nginx image | | Database | `mysql:5.7` | 3306 | With preconfigured credentials | | Backend | `k8s-task-manager-api` | 8080 | Node.js/Express REST API | ## Deployment Workflow ```mermaid graph TD A[prepare-app.sh] --> B[Creates PV directories] B --> C[Builds frontend image] C --> D[start-app.sh] D --> E[Creates Namespace] E --> F[Deploys PV/PVC] F --> G[Deploys MySQL StatefulSet] G --> H[Deploys Frontend] H --> I[Creates Service] # Key Configuration Details ## Resource Allocation Frontend: resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "250m" memory: "256Mi" Database: resources: requests: cpu: "500m" memory: "512Mi" limits: cpu: "1000m" memory: "1Gi" Backend: ```yaml resources: requests: cpu: "200m" memory: "256Mi" limits: cpu: "500m" memory: "512Mi" Storage Configuration # persistentvolume.yaml spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data/mysql" # Operational Procedures ## Accessing the Application Local Development: minikube service web-app-service -n web-app Production Access: http://:30080 Monitoring Commands: # Check pod status kubectl get pods -n web-app -w # View frontend logs kubectl logs -n web_app deploy/web-app -f # Verify database health kubectl exec -n web-app mysql-0 -- mysql -uroot -ppassword -e "SHOW DATABASES;" # Maintenance Tasks Scaling Frontend: kubectl scale -n web-app deployment/web-app --replicas=3 Database Backup: kubectl exec -n web-app mysql-0 -- \ mysqldump -u root -ppassword taskmanager > backup_$(date +%F).sql # Security Notes Database Credentials: Default credentials are for demonstration only In production, use: envFrom: - secretRef: name: mysql-credentials Network Exposure: Current: NodePort (30080) Recommended: Ingress with TLS termination # Troubleshooting Guide Symptom Diagnostic Steps Resolution Frontend not responding kubectl get svc -n web-app Verify NodePort configuration Database pod crash loops kubectl describe pod mysql-0 -n web-app Check storage permissions High CPU usage kubectl top pods -n web-app Adjust resource limits Cleanup Procedure # Full uninstall ./stop-app.sh # Optional: Remove persistent data sudo rm -rf /mnt/data/mysql