93 lines
2.3 KiB
Markdown
93 lines
2.3 KiB
Markdown
# Kubernetes Deployment
|
|
|
|
## Prerequisites
|
|
|
|
- Kubernetes cluster (minikube, kind, or cloud provider)
|
|
- kubectl configured
|
|
- Docker images built and available
|
|
|
|
## Building Docker Images
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# Scale C++ workers
|
|
kubectl scale deployment liquidcode-tester-worker-cpp -n liquidcode-tester --replicas=5
|
|
```
|
|
|
|
## Cleanup
|
|
|
|
```bash
|
|
# Delete all resources
|
|
kubectl delete namespace liquidcode-tester
|
|
```
|
|
|
|
## Production Considerations
|
|
|
|
1. **Image Registry**: Push images to a container registry (Docker Hub, GCR, ECR, etc.)
|
|
2. **Resource Limits**: Adjust CPU/Memory limits based on workload
|
|
3. **Persistent Storage**: Add PersistentVolumes for package storage if needed
|
|
4. **Monitoring**: Add Prometheus/Grafana for metrics
|
|
5. **Logging**: Configure centralized logging (ELK, Loki, etc.)
|
|
6. **Security**:
|
|
- Use NetworkPolicies to restrict traffic
|
|
- Enable Pod Security Standards
|
|
- Use secrets for sensitive data
|
|
- Consider using a service mesh (Istio, Linkerd)
|
|
7. **Autoscaling**: Configure HorizontalPodAutoscaler for workers
|
|
8. **Ingress**: Use Ingress controller instead of LoadBalancer for production
|