Kubernetes Deployment
Deploy Sail on Kubernetes for production-grade scalability and reliability.
Quick Deploy
kubectl apply -f https://raw.githubusercontent.com/lqlive/sail/main/k8s/sail.yaml
Kubernetes Manifests
MongoDB Deployment
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongodb
spec:
serviceName: mongodb
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo:latest
ports:
- containerPort: 27017
volumeMounts:
- name: mongodb-data
mountPath: /data/db
volumeClaimTemplates:
- metadata:
name: mongodb-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
Sail Proxy Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: sail-proxy
spec:
replicas: 3
selector:
matchLabels:
app: sail-proxy
template:
metadata:
labels:
app: sail-proxy
spec:
containers:
- name: proxy
image: sail/proxy:latest
ports:
- containerPort: 8080
- containerPort: 8443
env:
- name: MongoDB__ConnectionString
value: "mongodb://mongodb:27017"
---
apiVersion: v1
kind: Service
metadata:
name: sail-proxy
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
name: http
- port: 443
targetPort: 8443
name: https
selector:
app: sail-proxy
Horizontal Pod Autoscaling
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: sail-proxy-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: sail-proxy
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Configuration
Store sensitive configuration in Kubernetes Secrets:
apiVersion: v1
kind: Secret
metadata:
name: sail-config
type: Opaque
stringData:
mongodb-connection: "mongodb://username:password@mongodb:27017"
Ingress Configuration
Use an Ingress controller for external access:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sail-ingress
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
ingressClassName: nginx
tls:
- hosts:
- api.example.com
secretName: sail-tls
rules:
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sail-proxy
port:
number: 80