Kubernetes Deployment
Prerequisites
- Kubernetes cluster (minikube, kind, or cloud provider)
- kubectl configured
- Docker images built and available
Building Docker Images
# Build Gateway image
docker build -t liquidcode-tester-gateway:latest -f src/LiquidCode.Tester.Gateway/Dockerfile .
# Build C++ Worker image
docker build -t liquidcode-tester-worker-cpp:latest -f src/LiquidCode.Tester.Worker/Dockerfile .
Deploying to Kubernetes
# Create namespace
kubectl apply -f k8s/namespace.yaml
# Apply ConfigMap
kubectl apply -f k8s/configmap.yaml
# Deploy Worker (must be deployed first)
kubectl apply -f k8s/worker-cpp-deployment.yaml
# Deploy Gateway
kubectl apply -f k8s/gateway-deployment.yaml
Checking Status
# Check all resources
kubectl get all -n liquidcode-tester
# Check pods
kubectl get pods -n liquidcode-tester
# Check services
kubectl get services -n liquidcode-tester
# View logs
kubectl logs -n liquidcode-tester -l app=gateway
kubectl logs -n liquidcode-tester -l app=worker-cpp
Access the Gateway
# Get the external IP (for LoadBalancer)
kubectl get service liquidcode-tester-gateway -n liquidcode-tester
# For minikube
minikube service liquidcode-tester-gateway -n liquidcode-tester
# Port forward (alternative)
kubectl port-forward -n liquidcode-tester service/liquidcode-tester-gateway 8080:80
Scaling Workers
# Scale C++ workers
kubectl scale deployment liquidcode-tester-worker-cpp -n liquidcode-tester --replicas=5
Cleanup
# Delete all resources
kubectl delete namespace liquidcode-tester
Production Considerations
- Image Registry: Push images to a container registry (Docker Hub, GCR, ECR, etc.)
- Resource Limits: Adjust CPU/Memory limits based on workload
- Persistent Storage: Add PersistentVolumes for package storage if needed
- Monitoring: Add Prometheus/Grafana for metrics
- Logging: Configure centralized logging (ELK, Loki, etc.)
- Security:
- Use NetworkPolicies to restrict traffic
- Enable Pod Security Standards
- Use secrets for sensitive data
- Consider using a service mesh (Istio, Linkerd)
- Autoscaling: Configure HorizontalPodAutoscaler for workers
- Ingress: Use Ingress controller instead of LoadBalancer for production