Skip to content

Commit fc4b86f

Browse files
committed
☸️ Add Kubernetes Support & Production Deployment
✨ Kubernetes Features: - Complete Kubernetes manifests for all services - ConfigMap for environment configuration - Persistent volumes for MongoDB data - Horizontal scaling capabilities - Health checks and readiness probes - LoadBalancer services for external access 🛠️ Deployment Tools: - One-command Kubernetes deployment script - Cleanup script for resource management - Docker image build automation - Port forwarding setup instructions 📊 Production Ready: - Resource limits and requests - Liveness and readiness probes - Persistent volume claims - Service discovery configuration - Scalable replica management 📚 Documentation: - Kubernetes deployment guide - Scaling instructions - Monitoring and troubleshooting - Service access methods This branch now supports both Docker Compose (development) and Kubernetes (production) deployments with complete orchestration and scaling capabilities.
1 parent e2de9e0 commit fc4b86f

File tree

7 files changed

+367
-0
lines changed

7 files changed

+367
-0
lines changed

k8s/README.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Kubernetes Deployment for Dealership Management System
2+
3+
This directory contains Kubernetes deployment files for the Dealership Management System.
4+
5+
## Quick Deploy to Kubernetes
6+
7+
```bash
8+
# Apply all configurations
9+
kubectl apply -f k8s/
10+
11+
# Check deployment status
12+
kubectl get pods
13+
kubectl get services
14+
15+
# Access the application
16+
kubectl port-forward service/dealership-django-service 8000:8000
17+
```
18+
19+
## Components
20+
21+
- **MongoDB**: Database with persistent storage
22+
- **API Service**: Node.js/Express API
23+
- **Django Service**: Main application server
24+
- **ConfigMap**: Environment configuration
25+
- **Persistent Volume**: Database storage
26+
27+
## Services
28+
29+
- Django App: http://localhost:8000
30+
- API Service: http://localhost:3030
31+
- MongoDB: Internal cluster communication
32+
33+
## Scaling
34+
35+
```bash
36+
# Scale Django service
37+
kubectl scale deployment dealership-django --replicas=3
38+
39+
# Scale API service
40+
kubectl scale deployment dealership-api --replicas=2
41+
```
42+
43+
## Monitoring
44+
45+
```bash
46+
# View logs
47+
kubectl logs -f deployment/dealership-django
48+
kubectl logs -f deployment/dealership-api
49+
kubectl logs -f deployment/mongodb
50+
51+
# Check resource usage
52+
kubectl top pods
53+
```

k8s/api-service.yaml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: dealership-api
5+
labels:
6+
app: dealership
7+
component: api
8+
spec:
9+
replicas: 2
10+
selector:
11+
matchLabels:
12+
app: dealership
13+
component: api
14+
template:
15+
metadata:
16+
labels:
17+
app: dealership
18+
component: api
19+
spec:
20+
containers:
21+
- name: dealership-api
22+
image: dealership-api:latest
23+
imagePullPolicy: Never # For local development
24+
ports:
25+
- containerPort: 3030
26+
envFrom:
27+
- configMapRef:
28+
name: dealership-config
29+
env:
30+
- name: MONGODB_URL
31+
valueFrom:
32+
configMapKeyRef:
33+
name: dealership-config
34+
key: MONGODB_URL
35+
resources:
36+
requests:
37+
memory: "256Mi"
38+
cpu: "250m"
39+
limits:
40+
memory: "512Mi"
41+
cpu: "500m"
42+
readinessProbe:
43+
httpGet:
44+
path: /health
45+
port: 3030
46+
initialDelaySeconds: 10
47+
periodSeconds: 5
48+
livenessProbe:
49+
httpGet:
50+
path: /health
51+
port: 3030
52+
initialDelaySeconds: 30
53+
periodSeconds: 10
54+
---
55+
apiVersion: v1
56+
kind: Service
57+
metadata:
58+
name: dealership-api-service
59+
labels:
60+
app: dealership
61+
component: api
62+
spec:
63+
selector:
64+
app: dealership
65+
component: api
66+
ports:
67+
- port: 3030
68+
targetPort: 3030
69+
type: LoadBalancer

k8s/cleanup.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/bash
2+
3+
# Cleanup Kubernetes resources
4+
echo "🧹 Cleaning up Kubernetes resources..."
5+
6+
kubectl delete -f k8s/django-service.yaml
7+
kubectl delete -f k8s/api-service.yaml
8+
kubectl delete -f k8s/mongodb.yaml
9+
kubectl delete -f k8s/configmap.yaml
10+
11+
echo "✅ Kubernetes resources cleaned up!"

k8s/configmap.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: dealership-config
5+
labels:
6+
app: dealership
7+
data:
8+
DJANGO_SECRET_KEY: "django-insecure-k8s-development-key-change-in-production"
9+
DEBUG: "True"
10+
ALLOWED_HOSTS: "localhost,127.0.0.1,0.0.0.0,dealership-django-service"
11+
MONGO_USERNAME: "admin"
12+
MONGO_PASSWORD: "password"
13+
MONGODB_URL: "mongodb://admin:password@mongodb-service:27017/dealership?authSource=admin"
14+
API_BASE_URL: "http://dealership-api-service:3030"
15+
DJANGO_BASE_URL: "http://dealership-django-service:8000"
16+
NODE_ENV: "development"
17+
REACT_APP_API_URL: "http://localhost:3030"
18+
REACT_APP_DJANGO_URL: "http://localhost:8000"

k8s/deploy.sh

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/bin/bash
2+
3+
# Build Docker images for Kubernetes deployment
4+
echo "🏗️ Building Docker images for Kubernetes..."
5+
6+
# Build API service image
7+
echo "Building API service image..."
8+
docker build -t dealership-api:latest ./server/database/
9+
10+
# Build Django service image
11+
echo "Building Django service image..."
12+
docker build -t dealership-django:latest ./server/
13+
14+
echo "✅ Docker images built successfully!"
15+
16+
# Apply Kubernetes configurations
17+
echo "🚀 Deploying to Kubernetes..."
18+
19+
# Apply configurations in order
20+
kubectl apply -f k8s/configmap.yaml
21+
kubectl apply -f k8s/mongodb.yaml
22+
kubectl apply -f k8s/api-service.yaml
23+
kubectl apply -f k8s/django-service.yaml
24+
25+
echo "⏳ Waiting for deployments to be ready..."
26+
27+
# Wait for deployments
28+
kubectl wait --for=condition=available --timeout=300s deployment/mongodb
29+
kubectl wait --for=condition=available --timeout=300s deployment/dealership-api
30+
kubectl wait --for=condition=available --timeout=300s deployment/dealership-django
31+
32+
echo "✅ Kubernetes deployment complete!"
33+
34+
# Show status
35+
echo "📊 Deployment Status:"
36+
kubectl get pods
37+
echo ""
38+
kubectl get services
39+
40+
echo ""
41+
echo "🌐 Access your application:"
42+
echo "Django App: kubectl port-forward service/dealership-django-service 8000:8000"
43+
echo "API Service: kubectl port-forward service/dealership-api-service 3030:3030"

k8s/django-service.yaml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: dealership-django
5+
labels:
6+
app: dealership
7+
component: django
8+
spec:
9+
replicas: 3
10+
selector:
11+
matchLabels:
12+
app: dealership
13+
component: django
14+
template:
15+
metadata:
16+
labels:
17+
app: dealership
18+
component: django
19+
spec:
20+
containers:
21+
- name: dealership-django
22+
image: dealership-django:latest
23+
imagePullPolicy: Never # For local development
24+
ports:
25+
- containerPort: 8000
26+
envFrom:
27+
- configMapRef:
28+
name: dealership-config
29+
env:
30+
- name: MONGODB_URL
31+
valueFrom:
32+
configMapKeyRef:
33+
name: dealership-config
34+
key: MONGODB_URL
35+
- name: API_BASE_URL
36+
valueFrom:
37+
configMapKeyRef:
38+
name: dealership-config
39+
key: API_BASE_URL
40+
resources:
41+
requests:
42+
memory: "512Mi"
43+
cpu: "250m"
44+
limits:
45+
memory: "1Gi"
46+
cpu: "500m"
47+
readinessProbe:
48+
httpGet:
49+
path: /
50+
port: 8000
51+
initialDelaySeconds: 30
52+
periodSeconds: 10
53+
livenessProbe:
54+
httpGet:
55+
path: /
56+
port: 8000
57+
initialDelaySeconds: 60
58+
periodSeconds: 15
59+
---
60+
apiVersion: v1
61+
kind: Service
62+
metadata:
63+
name: dealership-django-service
64+
labels:
65+
app: dealership
66+
component: django
67+
spec:
68+
selector:
69+
app: dealership
70+
component: django
71+
ports:
72+
- port: 8000
73+
targetPort: 8000
74+
type: LoadBalancer

k8s/mongodb.yaml

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
apiVersion: v1
2+
kind: PersistentVolume
3+
metadata:
4+
name: mongodb-pv
5+
labels:
6+
app: dealership
7+
component: mongodb
8+
spec:
9+
capacity:
10+
storage: 10Gi
11+
accessModes:
12+
- ReadWriteOnce
13+
persistentVolumeReclaimPolicy: Retain
14+
storageClassName: standard
15+
hostPath:
16+
path: /tmp/mongodb-data
17+
---
18+
apiVersion: v1
19+
kind: PersistentVolumeClaim
20+
metadata:
21+
name: mongodb-pvc
22+
labels:
23+
app: dealership
24+
component: mongodb
25+
spec:
26+
accessModes:
27+
- ReadWriteOnce
28+
resources:
29+
requests:
30+
storage: 10Gi
31+
storageClassName: standard
32+
---
33+
apiVersion: apps/v1
34+
kind: Deployment
35+
metadata:
36+
name: mongodb
37+
labels:
38+
app: dealership
39+
component: mongodb
40+
spec:
41+
replicas: 1
42+
selector:
43+
matchLabels:
44+
app: dealership
45+
component: mongodb
46+
template:
47+
metadata:
48+
labels:
49+
app: dealership
50+
component: mongodb
51+
spec:
52+
containers:
53+
- name: mongodb
54+
image: mongo:6.0
55+
ports:
56+
- containerPort: 27017
57+
env:
58+
- name: MONGO_INITDB_ROOT_USERNAME
59+
valueFrom:
60+
configMapKeyRef:
61+
name: dealership-config
62+
key: MONGO_USERNAME
63+
- name: MONGO_INITDB_ROOT_PASSWORD
64+
valueFrom:
65+
configMapKeyRef:
66+
name: dealership-config
67+
key: MONGO_PASSWORD
68+
- name: MONGO_INITDB_DATABASE
69+
value: dealership
70+
volumeMounts:
71+
- name: mongodb-storage
72+
mountPath: /data/db
73+
resources:
74+
requests:
75+
memory: "512Mi"
76+
cpu: "250m"
77+
limits:
78+
memory: "1Gi"
79+
cpu: "500m"
80+
volumes:
81+
- name: mongodb-storage
82+
persistentVolumeClaim:
83+
claimName: mongodb-pvc
84+
---
85+
apiVersion: v1
86+
kind: Service
87+
metadata:
88+
name: mongodb-service
89+
labels:
90+
app: dealership
91+
component: mongodb
92+
spec:
93+
selector:
94+
app: dealership
95+
component: mongodb
96+
ports:
97+
- port: 27017
98+
targetPort: 27017
99+
type: ClusterIP

0 commit comments

Comments
 (0)