Kubernetes Operations
Day-2 operations for managing your Kuploy deployment on Kubernetes.
Check Status
python deploy.py status
Or manually:
# Check pods
kubectl get pods -n kuploy
# Check deployment
kubectl get deployment kuploy -n kuploy
# Check ingress
kubectl get ingress -n kuploy
Upgrade Edition
Upgrade from OSS to Cloud edition:
# Upgrade from OSS to Cloud
python deploy.py --edition cloud --domain console.example.com
# Watch rollout
kubectl rollout status deployment/kuploy -n kuploy
Scaling
Horizontal Scaling
# Scale Kuploy replicas
kubectl scale deployment/kuploy -n kuploy --replicas=3
# Or via deploy.py
python deploy.py --replicas 3
Vertical Scaling
Edit resource limits:
kubectl edit deployment/kuploy -n kuploy
Updating Secrets
# Edit secrets directly
kubectl edit secret kuploy-secrets -n kuploy
# Or patch a specific value
kubectl patch secret kuploy-secrets -n kuploy -p '{"data":{"KEY":"BASE64_VALUE"}}'
# Restart to pick up changes
kubectl rollout restart deployment/kuploy -n kuploy
Backup & Restore
Database Backup
# Backup
kubectl exec -it postgresql-0 -n database -- pg_dump -U kuploy kuploy > backup.sql
# Restore
kubectl exec -i postgresql-0 -n database -- psql -U kuploy kuploy < backup.sql
Persistent Volume Backup
The kuploy-data PVC contains application data. Back it up according to your storage class capabilities.
Uninstall
python deploy.py uninstall
Database Cleanup (after uninstall)
kubectl exec -it postgresql-0 -n database -- psql -U postgres -c "DROP DATABASE kuploy;"
kubectl exec -it postgresql-0 -n database -- psql -U postgres -c "DROP USER kuploy;"
Logs
# Kuploy logs
kubectl logs -n kuploy -l app.kubernetes.io/name=kuploy -f
# Buildkit logs
kubectl logs -n kuploy -l app.kubernetes.io/name=buildkitd -f
# All pods in namespace
kubectl logs -n kuploy --all-containers -f
Troubleshooting
Pod Not Starting
# Check events
kubectl describe pod -n kuploy -l app.kubernetes.io/name=kuploy
# Check resource constraints
kubectl top pods -n kuploy
Buildkit Issues
# Reset buildkit
kubectl delete statefulset buildkitd -n kuploy
kubectl delete pod buildkitd-0 -n kuploy --force --grace-period=0
# Redeploy
python deploy.py buildkit --storage-class openebs.io/local
# Watch
kubectl get pods -n kuploy -l app.kubernetes.io/name=buildkitd -w
Test Buildkit
# Verify worker
kubectl exec -n kuploy buildkitd-0 -- buildctl --addr tcp://127.0.0.1:1234 debug workers
# Quick build test
kubectl exec -n kuploy buildkitd-0 -- sh -c 'mkdir -p /tmp/test && echo "FROM alpine:3.19" > /tmp/test/Dockerfile'
kubectl exec -n kuploy buildkitd-0 -- buildctl --addr tcp://127.0.0.1:1234 build \
--frontend dockerfile.v0 \
--local context=/tmp/test \
--local dockerfile=/tmp/test \
--output type=image,name=test:latest,push=false
Ingress Issues
# Check ingress status
kubectl describe ingress kuploy -n kuploy
# Check ingress controller logs
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
Database Connection Issues
# Test connection from Kuploy pod
kubectl exec -it deployment/kuploy -n kuploy -- sh -c 'echo "SELECT 1" | psql $DATABASE_URL'
# Check PostgreSQL is running
kubectl get pods -n database -l app.kubernetes.io/name=postgresql
TLS Certificate Issues
# Check certificate status
kubectl get certificate -n kuploy
# Check cert-manager logs
kubectl logs -n cert-manager -l app=cert-manager
Health Checks
Kuploy exposes health endpoints:
| Endpoint | Purpose |
|---|---|
/api/health | Basic health check |
/api/health/ready | Readiness (DB connected) |
# Test from inside cluster
kubectl exec -it deployment/kuploy -n kuploy -- curl -s localhost:3000/api/health
Monitoring Integration
Prometheus Metrics
Kuploy exposes Prometheus metrics at /metrics. Add a ServiceMonitor:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: kuploy
namespace: kuploy
spec:
selector:
matchLabels:
app.kubernetes.io/name: kuploy
endpoints:
- port: http
path: /metrics
Alerting
Example alerts for Prometheus Alertmanager:
groups:
- name: kuploy
rules:
- alert: KuployDown
expr: up{job="kuploy"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Kuploy is down"
- alert: KuployHighErrorRate
expr: rate(http_requests_total{job="kuploy",status=~"5.."}[5m]) > 0.1
for: 5m
labels:
severity: warning