Genesis will provide you with the container image URL. Replace
<container-registry-url> throughout this document with the URL provided by Genesis.Prerequisites
AWS EKS Cluster Requirements
EKS Cluster
Kubernetes version 1.23 or higher
kubectl
Configured to access your EKS cluster
Helm 3.8+
For deploying the Genesis Helm chart
AWS CLI
Configured with appropriate credentials
Additional Requirements
- EBS CSI Driver: Required for persistent storage (see EBS CSI Driver Setup)
- Ingress Controller: For external access (see Ingress Controller Setup)
Network Access
| Requirement | Purpose |
|---|---|
| Outbound Internet | Cluster nodes must pull container images from the registry URL provided by Genesis |
| DNS Resolution | For accessing external APIs (OpenAI, Databricks, etc.) if using those LLM providers |
IAM Permissions
The EKS cluster node group IAM role needs the following permissions:AmazonEKSWorkerNodePolicyAmazonEKS_CNI_PolicyAmazonEC2ContainerRegistryReadOnly
If using AWS Bedrock as the LLM provider, the node group role also needs
AmazonBedrockFullAccess (or appropriate scoped permissions).EBS CSI Driver Setup
Genesis requires persistent storage for its database, git repositories, and uploaded files. The Amazon EBS CSI driver must be installed in your cluster to provision EBS volumes. Check if installed:Installation Instructions
Refer to the Amazon EKS User Guide for detailed EBS CSI driver installation steps, including IAM role setup and add-on installation.
Ingress Controller Setup
Genesis requires an ingress controller for external access. Choose one based on your requirements:- AWS Load Balancer Controller (Recommended)
- NGINX Ingress Controller
The AWS Load Balancer Controller creates Application Load Balancers (ALB) or Network Load Balancers (NLB) for ingress resources.Install AWS Load Balancer Controller:Verify installation:
Genesis Container Configuration
Container Image
| Setting | Description |
|---|---|
| Repository | Genesis will provide the container image URL (e.g., <container-registry-url>/genesis) |
| Tags | Genesis will specify the appropriate tag to use (typically latest or a specific version) |
| Registry Access | Genesis will provide details about authentication requirements, if any |
Image Pull Secrets (If Required)
If the container registry requires authentication, Genesis will provide the necessary credentials. Create a Kubernetes secret:Exposed Ports
| Port | Service | Description |
|---|---|---|
| 8080 | FastAPI | Primary application with React GUI and modern APIs |
| 8082 | Flask | UDF proxy, OAuth, external integrations |
| 8501 | Streamlit | Legacy Streamlit interface |
Persistent Storage Requirements
Genesis requires persistent storage for:| Path | Purpose |
|---|---|
/app/.genesis/db/genesis.db | SQLite database |
/app/bot_git | Cloned git repositories |
/app/bot_storage | Uploaded files and bot storage |
/app/tmp | Runtime temp files |
Recommended Storage Size: 50Gi minimum (adjust based on expected usage)Storage Class: Uses cluster default (typically
gp2 or gp3 on EKS)Environment Variables
Required Configuration
Required Configuration
| Variable | Default | Description |
|---|---|---|
SQLITE_DB_PATH | /app/.genesis/db/genesis.db | Path to SQLite database |
DATABASE_URL | sqlite:///app/.genesis/db/genesis.db | SQLite connection string |
AWS Bedrock Configuration
AWS Bedrock Configuration
Authentication (Optional)
Authentication (Optional)
| Variable | Value | Description |
|---|---|---|
AUTH_ENABLED | "true" | Enable authentication |
AUTH_PROVIDER | "proxy" | For ingress-based auth |
Logging
Logging
| Variable | Options | Description |
|---|---|---|
LOG_LEVEL | DEBUG, INFO, WARNING, ERROR | Log verbosity |
LOGS_FORMAT | json, text | Log output format |
Deployment Steps
1
Prepare Helm Chart
Genesis will provide you with the Helm chart as an archive file. Extract it:
2
Create Values File
Create a
genesis-values.yaml file with your configuration:3
Deploy Genesis
4
Verify Deployment
5
Access Genesis
- Via Ingress (Recommended)
- Port Forward (For Testing)
For AWS Load Balancer Controller: Get the ALB address:Access via: Access via:
http://<alb-hostname> or https://genesis.yourdomain.comFor NGINX Ingress: Get the external IP:http://<external-ip> or http://genesis.yourdomain.com (if DNS configured)Kubernetes-Specific Configuration
StatefulSet
Genesis is deployed as a StatefulSet (not Deployment) to ensure:- Stable network identity (pod name:
genesis-0) - Ordered, graceful deployment and scaling
- Stable persistent storage (PVC name:
genesis-data-genesis-0)
Persistent Volume Claim
The StatefulSet creates a PersistentVolumeClaim with:| Property | Value |
|---|---|
| Name | genesis-data-genesis-0 |
| Storage Class | Uses cluster default (typically gp2 or gp3) |
| Access Mode | ReadWriteOnce (single pod access) |
| Retention | PVC is retained when StatefulSet is deleted (data preservation) |
Volume Mounts
The Genesis container mounts the persistent volume at multiple paths:| Mount Path | Purpose |
|---|---|
/app/.genesis/db | Database files |
/app/bot_git | Git repositories |
/app/bot_storage | File storage and uploads |
/app/tmp | Temporary files |
Health Checks
Genesis includes liveness and readiness probes:Liveness Probe
- Endpoint:
GET /api/healthon port 8080 - Initial delay: 60 seconds
- Period: 30 seconds
- Timeout: 5 seconds
- Failure threshold: 3
Readiness Probe
- Endpoint:
GET /api/healthon port 8080 - Initial delay: 30 seconds
- Period: 10 seconds
- Timeout: 5 seconds
- Failure threshold: 3
Resource Requirements
Default resource requests:| Resource | Request |
|---|---|
| CPU | 2000m (2 cores) |
| Memory | 6Gi |
No resource limits are set by default to avoid OOM kills. Adjust based on your workload.
AWS-Specific Considerations
IAM Roles for Service Accounts (IRSA)
If using AWS Bedrock, you can configure IRSA to allow the Genesis pod to access Bedrock without storing credentials:- Create IAM Role with Bedrock permissions
- Create Service Account with role annotation:
- Configure StatefulSet to use the service account (modify Helm values or StatefulSet directly)
EBS Volume Encryption
EBS volumes created by the EBS CSI driver on EKS are encrypted by default if your cluster has encryption enabled. Verify:VPC Configuration
Ensure your EKS cluster nodes have:| Requirement | Purpose |
|---|---|
| Outbound Internet Access | For pulling images from the container registry provided by Genesis |
| DNS Resolution | For external API calls (OpenAI, Databricks, etc.) |
| Security Group Rules | Allow ingress on ports 80/443 if using ALB, or node port if using NodePort service |
Troubleshooting
Pod Not Starting
Pod Not Starting
- Image pull errors: Check network connectivity to the container registry provided by Genesis
- PVC issues: Verify EBS CSI driver is installed and storage class exists
- Resource constraints: Check node resources
Persistent Volume Issues
Persistent Volume Issues
Ingress Not Working
Ingress Not Working
For AWS Load Balancer Controller:For NGINX Ingress:
Database Issues
Database Issues
Viewing Logs
Viewing Logs
Upgrading Genesis
When a new Genesis version is released:The StatefulSet will perform a rolling update, and the persistent volume will be reattached to the new pod.

