Skip to main content

Kubernetes Deployment

Deploy Aurora on Kubernetes clusters using Helm for production-grade, scalable deployments.

Prerequisites

  • Kubernetes cluster 1.19 or newer
  • Helm 3.x installed
  • kubectl configured
  • 16GB RAM across nodes (minimum)
  • 100GB persistent storage
  • S3-compatible object storage (AWS S3, MinIO, Cloudflare R2, etc.)

Architecture Overview

Aurora on Kubernetes consists of: Application Services:
  • aurora-server - Flask REST API (scalable)
  • aurora-chatbot - WebSocket service (scalable)
  • aurora-frontend - Next.js UI (scalable)
  • celery-worker - Background tasks (scalable)
  • celery-beat - Task scheduler (single instance)
Stateful Services:
  • postgres - PostgreSQL database
  • redis - Task queue and cache
  • weaviate - Vector database
  • vault - Secrets management
Supporting Services:
  • searxng - Web search engine
  • t2v-transformers - ML embeddings

Quick Start

1

Prepare configuration

Copy the Helm values template:
DO NOT commit values.generated.yaml - it contains secrets! Add to .gitignore if not already present.
2

Configure required settings

Edit values.generated.yaml and set:
Generate secrets:
3

Build and push images

Build images with your registry:
This command:
  • Reads values.generated.yaml for registry configuration
  • Builds images with git SHA tag (e.g., abc123f)
  • Pushes to your container registry
  • Updates image.tag in values.generated.yaml
Requires Docker Buildx and authentication to your container registry.Login examples:
4

Deploy with Helm

Or use the Makefile:
5

Initialize Vault

On first deployment, initialize Vault:
Save the unseal keys and root token securely!Update values.generated.yaml:
Redeploy to apply token:
6

Verify deployment

Configuration

Replica Counts

Scale application services:

External Services

Use managed services instead of in-cluster deployments:

Resource Limits

Adjust based on workload:

Persistent Storage

Ingress Configuration

Aurora uses subdomain-based routing:
Important Ingress Settings:For WebSocket and long-running requests:
  • proxy-read-timeout: 3600s - RCA analysis can take 30+ minutes
  • proxy-http-version: 1.1 - Required for WebSocket upgrade
  • proxy-body-size: 50m - For file uploads
These are auto-configured for nginx. For other controllers (Traefik, ALB, GCE), configure equivalent settings via ingress.annotations.

Pod Isolation

Enable isolated terminal pods for untrusted code execution:
The chart automatically creates:
  • Isolated namespace
  • RBAC for pod management
  • NetworkPolicy blocking cluster access
For additional hardening:
Then enable:

Helm Commands

Install

Upgrade

Rollback

Uninstall

Troubleshooting

Pods Not Starting

Check pod status:
Common issues:
  • Image pull errors (check registry authentication)
  • Resource limits (insufficient CPU/memory)
  • PVC binding issues (check storage class)

Database Connection Errors

Check Postgres:

Vault Issues

Check Vault status:
If sealed:

Ingress Not Working

Check ingress:
Verify DNS:
Test internal access:

View Logs

kubectl Agent

Connect Aurora to other Kubernetes clusters using the kubectl agent. The kubectl agent is integrated into Aurora’s architecture for executing Kubernetes commands across clusters. Quick example:

Next Steps

Production Best Practices

Security, monitoring, and reliability

Scaling Guide

Scale Aurora for high availability

Backup & Recovery

Protect your data

Monitoring

Set up observability