zkt25/z2/README.md
2025-04-04 15:53:04 +02:00

145 lines
3.7 KiB
Markdown

# 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://<node-ip>: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