Kubernetes Deployment with Helm
Deploy FastSkill as a production-ready service in Kubernetes using the official Helm chart. The chart supports two deployment modes: simple proxy-only for small teams, or full registry with S3 backend for advanced use cases.Overview
This chart supports two deployment modes:- Proxy Only - Simple deployment, no external dependencies
- Full Registry + Proxy - Advanced deployment with S3 backend and Git-based registry index
Prerequisites
Common (Both Modes)
- Kubernetes 1.19+
- Helm 3.0+
- Persistent storage
Proxy Only Mode
- No additional requirements
Full Registry Mode
- S3-compatible storage (AWS S3, MinIO, DigitalOcean Spaces, etc.)
- GitHub Personal Access Token (repo scope)
- Git repository for registry index
- OpenAI API key (optional, for semantic search)
Deployment Mode 1: Proxy Only (Recommended for Small Teams)
What You Get
- Proxy server that intercepts Anthropic API calls and injects skills
- Skills loaded from local directory/PVC
- No S3 or GitHub setup required
- Simple, fast deployment
Installation Steps
- Create namespace
- Install chart with registry disabled
- Populate skills directory
- Verify deployment
Complete Example
Configuration Options
Usevalues-proxy-only.yaml or set values directly:
Deployment Mode 2: Full Registry with S3 Backend (Advanced)
What You Get
- Registry server with web UI for skill management
- Skill publishing via REST API
- S3 blob storage for skill packages
- Git-based registry index for version control
- Proxy server with skill injection
- Optional semantic search with OpenAI
Installation Steps
- Create S3 bucket and IAM credentials
- Create GitHub repository for registry index
- Create Kubernetes secrets
- Install chart with registry enabled
- Verify deployment
Complete Example
S3-Compatible Storage Options
AWS S3 (Default)
MinIO (Self-hosted)
DigitalOcean Spaces
Cloudflare R2
Configuration Options
Usevalues-registry-s3.yaml or set values directly:
Values Reference
Component Toggles
| Parameter | Description | Default |
|---|---|---|
registry.enabled | Enable registry server | true |
proxy.enabled | Enable proxy server | true |
Resource Configuration
| Parameter | Description | Default |
|---|---|---|
registry.replicaCount | Number of registry replicas | 1 |
registry.resources.limits.cpu | Registry CPU limit | "1" |
registry.resources.limits.memory | Registry memory limit | "1Gi" |
registry.resources.requests.cpu | Registry CPU request | "500m" |
registry.resources.requests.memory | Registry memory request | "512Mi" |
proxy.replicaCount | Number of proxy replicas | 1 |
proxy.resources.limits.cpu | Proxy CPU limit | "500m" |
proxy.resources.limits.memory | Proxy memory limit | "512Mi" |
proxy.resources.requests.cpu | Proxy CPU request | "250m" |
proxy.resources.requests.memory | Proxy memory request | "256Mi" |
Storage Configuration
| Parameter | Description | Default |
|---|---|---|
persistence.skills.enabled | Enable skills PVC | true |
persistence.skills.size | Skills storage size | 10Gi |
persistence.skills.existingClaim | Use existing PVC | "" |
persistence.registryIndex.enabled | Enable registry index PVC | true |
persistence.registryIndex.size | Registry index storage size | 5Gi |
S3 Configuration (Registry Mode Only)
| Parameter | Description | Default |
|---|---|---|
s3.bucket | S3 bucket name | "" (required for registry) |
s3.region | AWS region | us-east-1 |
s3.endpoint | S3-compatible service endpoint | "" |
s3.blobBaseUrl | Base URL for published packages | "" |
Registry Index Configuration (Registry Mode Only)
| Parameter | Description | Default |
|---|---|---|
registryIndex.url | Git repository URL | "" (required for registry) |
registryIndex.branch | Git branch | main |
Optional Configuration
| Parameter | Description | Default |
|---|---|---|
openai.enabled | Enable OpenAI integration | false |
fastskill.logLevel | Logging level | INFO |
ingress.enabled | Enable ingress | false |
Environment-Specific Values
Development (values-dev.yaml)
- Lower resource limits
- Debug logging
- Smaller storage sizes
- Ingress disabled (use port-forward)
Staging (values-staging.yaml)
- Production-like resources
- Info logging
- Standard storage sizes
- Ingress with staging certificates
Production (values-prod.yaml)
- Higher resource limits
- Multiple replicas for HA
- Warn/Error logging
- Larger storage sizes
- Production ingress with TLS
Accessing Services
Port Forwarding (Development)
Ingress (Production)
- Registry UI:
https://fastskill.example.com/registry - Registry API:
https://fastskill.example.com/api/* - Proxy:
https://fastskill.example.com/proxy/*
Health Checks
Registry Server
- Readiness:
GET /api/status - Liveness:
GET /api/status - Returns JSON with service status
Proxy Server
- Readiness:
GET /health - Liveness:
GET /health - Returns plain text “Proxy server is running”
API Endpoints
Registry Server
GET /api/status- Service statusGET /api/skills- List all skillsGET /api/skills/:id- Get skill detailsPOST /api/search- Search skillsPOST /api/registry/publish- Publish skill packageGET /registry- Web UI
Proxy Server
GET /health- Health checkPOST /v1/messages- Proxy Anthropic API calls
Upgrading
Uninstalling
Architecture
Components
-
Registry Deployment: Runs
fastskill serve --enable-registry- Requires: S3 storage, GitHub token, registry index path
- Provides: REST API, Web UI, skill publishing
-
Proxy Deployment: Runs
fastskill proxy- Requires: Skills directory (read-only)
- Provides: Anthropic API proxy with skill injection
-
Init Container: Clones registry index Git repository
- Runs only if registry index path is empty
- Uses GitHub token for authentication
Storage
-
Skills PVC: Shared between registry and proxy
- Mount path:
/app/skills - Access mode:
ReadWriteOnce(orReadWriteManyfor scaling)
- Mount path:
-
Registry Index PVC: Registry server only
- Mount path:
/app/registry-index - Access mode:
ReadWriteOnce
- Mount path:
Networking
- Registry Service: ClusterIP on port 8080
- Proxy Service: ClusterIP on port 8081
- Ingress: Optional, for external access
Troubleshooting
Registry Server Won’t Start
Error: “Registry enabled but blob storage not configured” Solution: Ensure S3 configuration is set:Init Container Fails
Error: “Failed to clone registry index” Solution:- Verify GitHub token has repository access
- Check registry index URL is correct
- Ensure network connectivity to GitHub
Storage Issues
Error: “PVC not found” Solution:- Check storage class exists:
kubectl get storageclass - Verify PVC was created:
kubectl get pvc -n fastskill - Check storage class in values.yaml matches cluster
Secret Access Issues
Error: “Secret not found” Solution:- Verify secrets exist:
kubectl get secrets -n fastskill - Check secret names match values.yaml
- Ensure secrets are in the correct namespace
Health Check Failures
Error: “Readiness probe failed” Solution:- Check pod logs:
kubectl logs -n fastskill <pod-name> - Verify service is listening on correct port
- Check network policies allow health check traffic
- Increase
initialDelaySecondsif service takes longer to start
S3 Connection Issues
Error: “Failed to connect to S3” Solution:- Verify AWS credentials are correct
- Check S3 bucket exists and is accessible
- For S3-compatible services, ensure
s3.endpointis set - Verify network connectivity to S3 endpoint
Security Considerations
- Secrets Management: Never commit secrets to version control. Use Kubernetes secrets or external secret management.
- Network Policies: Consider implementing network policies to restrict pod-to-pod communication.
- RBAC: Service account has minimal permissions. Adjust as needed for your environment.
- TLS: Always use TLS in production. Configure ingress with valid certificates.
-
Image Security: Use specific image tags (not
latest) in production. Scan images for vulnerabilities.