Kubernetes Deployment
Deploy Jiffoo Mall on Kubernetes
Kubernetes Deployment
Prerequisites
- Kubernetes 1.24+
- kubectl configured
- Helm 3.0+ (optional)
Quick Start
1. Create Namespace
kubectl create namespace jiffoo2. Create Secrets
kubectl create secret generic jiffoo-secrets \
--from-literal=jwt-secret=your-jwt-secret \
--from-literal=database-url=postgresql://... \
-n jiffoo3. Apply Manifests
kubectl apply -f k8s/ -n jiffooDeployment Manifests
API Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: jiffoo-api
spec:
replicas: 3
selector:
matchLabels:
app: jiffoo-api
template:
metadata:
labels:
app: jiffoo-api
spec:
containers:
- name: api
image: jiffoo/api:latest
ports:
- containerPort: 3001
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: jiffoo-secrets
key: database-url
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: jiffoo-secrets
key: jwt-secret
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 3001
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 3001
initialDelaySeconds: 5
periodSeconds: 5Service
apiVersion: v1
kind: Service
metadata:
name: jiffoo-api
spec:
selector:
app: jiffoo-api
ports:
- port: 80
targetPort: 3001
type: ClusterIPIngress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jiffoo-ingress
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- api.jiffoo.com
secretName: jiffoo-tls
rules:
- host: api.jiffoo.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: jiffoo-api
port:
number: 80Helm Chart (Optional)
helm install jiffoo ./charts/jiffoo \
--namespace jiffoo \
--set api.replicas=3 \
--set database.url=postgresql://...Scaling
kubectl scale deployment jiffoo-api --replicas=5 -n jiffooMonitoring
kubectl get pods -n jiffoo
kubectl logs -f deployment/jiffoo-api -n jiffoo