Skip to main content
Deploy S2 Lite to Kubernetes using the official Helm chart. The chart supports various deployment scenarios from development to production.

Prerequisites

  • Kubernetes 1.19+
  • Helm 3.0+
  • (Optional) S3-compatible object storage for persistent data

Quick Start

1

Add the Helm repository

2

Install with default settings

The default installation runs in-memory mode (great for testing):
3

Verify the installation

Installation from OCI Registry

You can also install directly from GitHub Container Registry:

Storage Options

In-Memory (Default)

Perfect for development and testing:
Data is lost when the pod restarts. Not suitable for production.

S3-Compatible Object Storage

For production deployments with persistent data:

Configuration Examples

AWS S3 with IAM Role (IRSA)

Recommended for EKS deployments:
1

Create IAM policy and role

Create an IAM policy with S3 access:
Create an IAM role with OIDC trust relationship for your EKS cluster.
2

Create values file

values.yaml
3

Install with values

With Static Credentials

For non-AWS S3-compatible storage (MinIO, Tigris, R2, etc.):
1

Create a secret

2

Create values file

values.yaml
3

Install

With TLS

Self-Signed Certificate

For development/testing:
values.yaml
Clients will need to use --insecure or configure SSL verification to trust the self-signed certificate.

Provided Certificate

For production with valid certificates:
1

Create TLS secret

2

Create values file

values.yaml
3

Install

With Ingress

Expose S2 Lite via an Ingress controller:
values.yaml

Behind AWS Network Load Balancer

values.yaml

Monitoring with Prometheus

Enable Prometheus monitoring:
values.yaml
Requires Prometheus Operator to be installed in your cluster.
For TLS-enabled deployments, configure TLS scraping:
values.yaml

Resource Configuration

Set resource requests and limits:
values.yaml

Pod Disruption Budget

Protect against voluntary disruptions:
values.yaml
S2 Lite runs as a single instance. With replicaCount: 1, a PDB will prevent pod eviction. Use carefully.

Advanced Configuration

SlateDB Settings

Configure SlateDB parameters via environment variables:
values.yaml
See the SlateDB settings reference for all options.

Enable Pipelining

For better performance (currently disabled by default for safety):
values.yaml

Init File for Resources

Pre-create basins and streams at startup:
1

Create ConfigMap

2

Configure values

values.yaml

Configuration Reference

Common Helm values: | Parameter | Description | Default | |-----------|-------------|---------|| | replicaCount | Number of replicas (must be 1) | 1 | | image.repository | Image repository | ghcr.io/s2-streamstore/s2 | | image.tag | Image tag | Chart appVersion | | service.type | Service type | ClusterIP | | service.port | Service port | 80 | | service.targetPort | Container port | 8080 | | tls.enabled | Enable TLS | false | | tls.selfSigned | Use self-signed cert | false | | objectStorage.enabled | Enable object storage | false | | objectStorage.bucket | S3 bucket name | "" | | metrics.serviceMonitor.enabled | Enable ServiceMonitor | false | | resources | Resource requests/limits | {} | See the values.yaml for all options.

Upgrading

S2 Lite uses a Recreate deployment strategy. Upgrades will cause brief downtime while the old pod terminates and the new one starts.

Uninstalling

Uninstalling will not delete data in object storage. Your S3 bucket remains intact.

Troubleshooting

Pod Not Starting

Check pod events:

Check Logs

Health Check Failures

Test the health endpoint:

Object Storage Connection Issues

Verify credentials and permissions:

Next Steps

Monitoring

Set up monitoring and alerts

Configuration

Detailed configuration reference