Prerequisites
- A running Kubernetes cluster (1.19+)
kubectlconfigured to access your cluster- An ingress controller (the manifests use Traefik, but any controller works)
- An LLM API key (OpenAI, Anthropic, Azure, etc.)
Architecture overview
The Kubernetes deployment creates three services:Quick start
1. Clone the repository
2. Configure backend secrets
Editbackend/backend-secrets.yaml with your LLM provider credentials:
backend/backend-secrets.yaml
3. Configure frontend secrets
Editfrontend/frontend-secrets.yaml:
frontend/frontend-secrets.yaml
skyvern.example.com with your actual domain.
4. Configure ingress
Editingress.yaml with your domain and TLS settings:
ingress.yaml
5. Deploy
Run the deployment script:- Namespace
- PostgreSQL (secrets, storage, deployment, service)
- Backend (secrets, deployment, service)
- Frontend (secrets, deployment, service)
- Ingress
6. Verify deployment
Check that all pods are running:7. Get your API key
Wait for the backend pod to show1/1 in the READY column of kubectl get pods -n skyvern before running this command. The API key file is generated during startup and won’t exist until the pod is ready.
cred value and update frontend/frontend-secrets.yaml:
8. Access the UI
Navigate to your configured domain (e.g.,https://skyvern.example.com). You should see the Skyvern dashboard.
Manifest structure
Storage configuration
By default, the manifests usehostPath volumes. This works for single-node clusters but isn’t suitable for multi-node production deployments.
Using PersistentVolumeClaims
For production, replacehostPath with PVCs. Edit backend/backend-deployment.yaml:
skyvern-storage.yaml
Using S3 or Azure Blob
For cloud storage, configure the backend environment variables instead of mounting volumes. See Storage Configuration.Scaling
Horizontal scaling
To run multiple backend instances, increase the replica count:backend/backend-deployment.yaml
When scaling horizontally, ensure your storage backend supports concurrent access (S3, Azure Blob, or ReadWriteMany PVCs). Local storage with ReadWriteOnce PVCs won’t work across multiple pods.
Resource limits
Add resource limits to prevent pods from consuming excessive resources:TLS configuration
To enable HTTPS, uncomment the TLS section iningress.yaml:
https and wss:
Using an external database
For production, consider using a managed PostgreSQL service (RDS, Cloud SQL, Azure Database).- Remove the
postgres/manifests from the deployment - Update
backend/backend-secrets.yaml:
Troubleshooting
Pods stuck in Pending
Check for resource constraints:- Insufficient node resources
- PersistentVolume not available
- Image pull errors
Backend crashes on startup
Check the logs:- Invalid LLM API key
- Database connection failed
- Missing environment variables
Frontend shows “Unauthorized”
The API key in frontend secrets doesn’t match the generated key. Re-copy it from the backend pod.Ingress not routing correctly
Verify your ingress controller is running and the ingress resource is configured:Cleanup
To remove the entire deployment:skyvern namespace.
To clean up host storage (if using hostPath):
Next steps
Storage Configuration
Configure S3 or Azure Blob for artifact storage
LLM Configuration
Configure additional LLM providers

