Helm Chart

Deploy Spice.ai Enterprise on Kubernetes with the official Helm chart.

The Spice.ai Enterprise Helm chart deploys the Spice runtime as a Kubernetes Deployment or StatefulSet with a ConfigMap-mounted Spicepod configuration.

Install

The chart is published to the AWS Marketplace ECR registry, one chart per image variant, with the image pre-configured. Subscribe to the Enterprise listing first (see AWS Marketplace), then authenticate Helm against the registry:

aws ecr get-login-password --region us-east-1 \
  | helm registry login --username AWS --password-stdin 709825985650.dkr.ecr.us-east-1.amazonaws.com

The login is valid for 12 hours; re-run it when the token expires.

helm install spiceai \
  oci://709825985650.dkr.ecr.us-east-1.amazonaws.com/spice-ai/spiceai-enterprise-byol \
  --version 2.4.1-enterprise-models-helm \
  --set spicepod.name=my-app

Values Reference

ParameterDescriptionDefault
image.repositoryContainer image repository709825985650.dkr.ecr.us-east-1.amazonaws.com/spice-ai/spiceai-enterprise-byol
image.tagContainer image tagThe chart variant's image tag, such as 2.4.1-enterprise-models
replicaCountNumber of replicas1
strategyUpdate strategy for the DeploymentNone (Kubernetes default)
updateStrategyUpdate strategy for the StatefulSetNone (Kubernetes default)
serviceAccount.createCreate a ServiceAccountfalse
serviceAccount.nameServiceAccount nameNone
serviceAccount.annotationsAnnotations for the ServiceAccount{}
service.typeKubernetes Service typeNone
service.additionalAnnotationsAnnotations for the Service{}
stateful.enabledUse a StatefulSet with PVCfalse
stateful.storageClassStorageClass for StatefulSet PVCstandard
stateful.sizePVC size1Gi
stateful.mountPathMount path in container/data
monitoring.podMonitor.enabledCreate a PodMonitor for Prometheusfalse
monitoring.podMonitor.additionalLabelsLabels for the PodMonitor{}
additionalLabelsLabels added to all resources{}
additionalEnvExtra environment variables[]
resourcesCPU/memory requests and limits{}
volumesAdditional volumes[]
volumeMountsAdditional volume mounts[]
spicepodSpicepod configuration (inlined into ConfigMap)None

Spicepod Configuration

The Spicepod spec is inlined directly in the Helm values and mounted as a ConfigMap:

spicepod:
  name: my-app
  version: v1
  kind: Spicepod
  datasets:
    - from: s3://my-bucket/data/
      name: my_data
      params:
        file_format: parquet
      acceleration:
        enabled: true
        engine: duckdb

StatefulSet with Persistent Storage

Enable a StatefulSet with a PersistentVolumeClaim for durable storage:

stateful:
  enabled: true
  storageClass: gp3
  size: 50Gi
  mountPath: /data

Update Strategy

Both keys are unset by default, so Kubernetes applies its own default strategy. Which one the chart reads depends on stateful.enabled.

With stateful.enabled: false the chart renders a Deployment and reads strategy:

strategy:
  type: Recreate

With stateful.enabled: true the chart renders a StatefulSet and reads updateStrategy:

updateStrategy:
  type: RollingUpdate

The key that does not match stateful.enabled is ignored, so setting strategy on a StatefulSet deployment has no effect. Each value is passed through to the workload spec unchanged, so any field the Kubernetes strategy type accepts (for example rollingUpdate.maxUnavailable or rollingUpdate.partition) can be set alongside type.

Resource Limits

resources:
  requests:
    cpu: 200m
    memory: 1Gi
  limits:
    cpu: "2"
    memory: 4Gi

Prometheus Monitoring

monitoring:
  podMonitor:
    enabled: true
    additionalLabels:
      release: prometheus

ServiceAccount for Cloud IAM

AWS IRSA (EKS)

serviceAccount:
  create: true
  name: spiceai
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/my-spice-role

See AWS IRSA for full setup instructions.

GKE Workload Identity

serviceAccount:
  create: true
  annotations:
    iam.gke.io/gcp-service-account: my-gcp-sa@my-project.iam.gserviceaccount.com

Azure Workload Identity (AKS)

serviceAccount:
  create: true
  annotations:
    azure.workload.identity/client-id: <AZURE_CLIENT_ID>