CRITICAL FIXES: ✅ Add PersistentVolumeClaims for all stateful services - PostgreSQL: 20Gi PVC on nfs-emporium (data persistence) - Redis: 10Gi PVC on nfs-emporium (cache and queue) - RabbitMQ: 5Gi PVC on nfs-emporium (message queue) ✅ Pin all image versions (no more 'latest' tags) - Firecrawl API/Worker: v1.0.0 - Playwright Service: v1.0.0 - PostgreSQL (nuq-postgres): v1.0.0 - Redis: 7.4.1-alpine - RabbitMQ: 3.13.7-management-alpine ✅ Convert raw manifests to proper Helm chart - Template-based configuration - Centralized values.yaml - Proper Helm helpers and labels - Easy configuration management WHAT CHANGED: - Created chart/ directory with full Helm chart structure - Moved old manifests to old-manifests/ for reference - Updated ArgoCD Application to use Helm chart source - Added comprehensive README and MIGRATION docs - All services now use nfs-emporium storage class - Redis configured with AOF persistence - Proper resource limits and health checks - Gateway/HTTPRoute configs integrated into chart DEPLOYMENT: ArgoCD will automatically sync and apply changes. Old ephemeral data will be lost (fresh start with persistence). Resolves data loss issues and brings deployment to production standards.
7.7 KiB
Firecrawl Helm Chart
Production-ready Helm chart for deploying Firecrawl web scraping service.
Overview
Firecrawl is a web scraping and search service that provides JARVIS with web context capabilities. This deployment includes all necessary components with proper persistent storage and pinned image versions.
Components
Application Services
-
Firecrawl API - Main REST API service
- Port: 3002
- Health checks:
/v0/health/liveness,/v0/health/readiness - Resources: 4Gi memory, 2 CPU cores
-
Firecrawl Worker - Background job processor
- Processes crawl jobs from queue
- Resources: 3Gi memory, 1 CPU core
-
Playwright Service - Browser automation
- Port: 3000
- Headless Chrome/Firefox for JavaScript rendering
- Resources: 2Gi memory, 1 CPU core
Infrastructure Services
-
PostgreSQL (nuq-postgres) - State management
- Port: 5432
- Custom image with queue extensions
- Persistent Storage: 20Gi PVC on nfs-emporium
-
Redis - Cache and job queue
- Port: 6379
- AOF persistence enabled
- Persistent Storage: 10Gi PVC on nfs-emporium
-
RabbitMQ - Message queue
- AMQP Port: 5672
- Management UI: 15672
- Persistent Storage: 5Gi PVC on nfs-emporium
Production Features
✅ Persistent Storage
All stateful services use PersistentVolumeClaims backed by NFS storage:
- PostgreSQL: 20Gi (database state)
- Redis: 10Gi (cache and job queue)
- RabbitMQ: 5Gi (message queue data)
✅ Pinned Image Versions
All container images use specific version tags (no latest):
- Firecrawl API/Worker:
ghcr.io/mendableai/firecrawl:v1.0.0 - Playwright Service:
ghcr.io/mendableai/firecrawl/playwright-service:v1.0.0 - PostgreSQL:
ghcr.io/mendableai/firecrawl/nuq-postgres:v1.0.0 - Redis:
redis:7.4.1-alpine - RabbitMQ:
rabbitmq:3.13.7-management-alpine
✅ Helm Configuration Management
Proper Helm chart structure with:
- Configurable values via
values.yaml - Template helpers for consistent naming
- Resource requests and limits
- Health checks and probes
- Service discovery
Configuration
Key Values
# Image versions (pinned)
image:
repository: ghcr.io/mendableai/firecrawl
tag: "v1.0.0"
# Persistent storage
postgres.persistence:
enabled: true
storageClass: "nfs-emporium"
size: 20Gi
redis.persistence:
enabled: true
storageClass: "nfs-emporium"
size: 10Gi
rabbitmq.persistence:
enabled: true
storageClass: "nfs-emporium"
size: 5Gi
# Performance tuning
config:
NUM_WORKERS_PER_QUEUE: "8"
CRAWL_CONCURRENT_REQUESTS: "10"
MAX_CONCURRENT_JOBS: "5"
See values.yaml for all configuration options.
Deployment
ArgoCD (Recommended)
This application is managed by ArgoCD in wave 20 (applications tier):
# Check application status
kubectl -n argocd get application firecrawl
# Sync manually if needed
argocd app sync firecrawl
# View application details
argocd app get firecrawl
Manual Helm Deployment
# From repository root
cd cluster/applications/firecrawl
# Install
helm install firecrawl ./chart -n firecrawl --create-namespace
# Upgrade
helm upgrade firecrawl ./chart -n firecrawl
# Uninstall
helm uninstall firecrawl -n firecrawl
Access
External Access (via Gateway API)
- Primary: https://spaceship-earth.local.mk-labs.cloud
- Secondary: https://firecrawl.local.mk-labs.cloud
DNS automatically configured via ExternalDNS pointing to Gateway LB (10.1.71.90).
Internal Access
http://firecrawl-api.firecrawl.svc.cluster.local:3002
API Usage Example
curl -X POST https://spaceship-earth.local.mk-labs.cloud/v0/scrape \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
Monitoring
View Pods
kubectl -n firecrawl get pods
Check Logs
# API logs
kubectl -n firecrawl logs -l app.kubernetes.io/component=api -f
# Worker logs
kubectl -n firecrawl logs -l app.kubernetes.io/component=worker -f
# PostgreSQL logs
kubectl -n firecrawl logs -l app.kubernetes.io/component=postgres -f
# Redis logs
kubectl -n firecrawl logs -l app.kubernetes.io/component=redis -f
Check Storage
# View PVCs
kubectl -n firecrawl get pvc
# Check PVC details
kubectl -n firecrawl describe pvc firecrawl-postgres-pvc
kubectl -n firecrawl describe pvc firecrawl-redis-pvc
kubectl -n firecrawl describe pvc firecrawl-rabbitmq-pvc
Troubleshooting
Pods Not Starting
kubectl -n firecrawl describe pod <pod-name>
kubectl -n firecrawl get events --sort-by='.lastTimestamp'
Storage Issues
# Check PVC binding
kubectl -n firecrawl get pvc
# Verify NFS storage class
kubectl get storageclass nfs-emporium -o yaml
# Check NFS CSI driver
kubectl -n kube-system get pods -l app=csi-nfs-controller
Database Connection Issues
# Test PostgreSQL connectivity from API pod
kubectl -n firecrawl exec -it deployment/firecrawl-api -- \
sh -c 'apt-get update && apt-get install -y postgresql-client && \
psql -h firecrawl-postgres -U postgres -d postgres -c "SELECT 1"'
# Test Redis connectivity
kubectl -n firecrawl exec -it deployment/firecrawl-api -- \
sh -c 'apt-get update && apt-get install -y redis-tools && \
redis-cli -h firecrawl-redis PING'
Gateway Routing Issues
# Verify ReferenceGrant
kubectl -n gateway get referencegrant allow-httproutes -o yaml
# Check HTTPRoutes
kubectl -n firecrawl get httproute
# View Gateway status
kubectl -n gateway get gateway fastpass-gateway -o yaml
Upgrading
Update Image Versions
- Edit
values.yamland update image tags - Commit and push changes
- ArgoCD will automatically sync
- Or manually:
helm upgrade firecrawl ./chart -n firecrawl
Migrate from Old Deployment
The old raw manifest deployment will be automatically replaced by ArgoCD:
- Commit this Helm chart
- Push to repository
- ArgoCD detects the change and applies Helm chart
- Old resources are pruned
- New resources with PVCs are created
Note: Old PostgreSQL/Redis data was ephemeral and will be lost. Fresh start with persistent storage.
Storage Architecture
NFS Provisioner
- Storage Class:
nfs-emporium - Provisioner:
nfs.csi.k8s.io - NFS Server: emporium (Synology DS1621+) - 10.1.71.9
- NFS Export:
/volume1/fastpass - Reclaim Policy: Delete
- Binding Mode: Immediate
PVC Structure
Each PVC gets a unique subdirectory:
/volume1/fastpass/firecrawl/firecrawl-postgres-pvc/
/volume1/fastpass/firecrawl/firecrawl-redis-pvc/
/volume1/fastpass/firecrawl/firecrawl-rabbitmq-pvc/
Theme
Part of the EPCOT-themed namespace with primary hostname spaceship-earth representing Firecrawl's role as the information and knowledge hub for JARVIS.
Maintenance
Backup Recommendations
# PostgreSQL backup (manual)
kubectl -n firecrawl exec deployment/firecrawl-postgres -- \
pg_dump -U postgres postgres > firecrawl-backup-$(date +%Y%m%d).sql
# NFS snapshots (via Synology)
# Use Synology Snapshot Replication for point-in-time backups
Scaling
# Scale API replicas
helm upgrade firecrawl ./chart -n firecrawl \
--set api.replicaCount=2
# Scale workers
helm upgrade firecrawl ./chart -n firecrawl \
--set worker.replicaCount=3
Future Enhancements
- Add Prometheus metrics and ServiceMonitor
- Implement resource quotas and LimitRanges
- Add PodDisruptionBudgets for HA
- Configure NetworkPolicies for security
- Add external secrets management (HashiCorp Vault or Sealed Secrets)
- Implement horizontal pod autoscaling
- Add extract worker deployment
- Add nuq worker deployment
Support
For issues or questions:
- Check ArgoCD application status
- Review pod logs
- Verify storage bindings
- Consult Firecrawl documentation: https://docs.firecrawl.dev