Kubernetes Deployment

pg_ripple ships a Helm chart (charts/pg_ripple/) that deploys the batteries-included image — PostgreSQL 18 with pg_ripple, PostGIS, and pgvector pre-installed — on any Kubernetes cluster.

Prerequisites

  • Kubernetes ≥ 1.25
  • Helm ≥ 3.10
  • Persistent volume provisioner (any cloud provider or local-path-provisioner)

Installation

Add the Helm repository

helm repo add pg-ripple https://trickle-labs.github.io/pg-ripple/charts
helm repo update

Install with defaults

helm install pg-ripple pg-ripple/pg-ripple \
  --set postgres.password=mysecretpassword

Install from source

helm install pg-ripple ./charts/pg_ripple \
  --set postgres.password=mysecretpassword

Verify deployment

kubectl get pods -l app.kubernetes.io/name=pg-ripple
kubectl exec -it <pod-name> -- psql -U postgres \
  -c "SELECT extname, extversion FROM pg_extension WHERE extname = 'pg_ripple';"

Values Reference

KeyDefaultDescription
replicaCount1Number of PostgreSQL Pods
image.repositoryghcr.io/trickle-labs/pg-rippleImage repository
image.tag0.54.0Image tag
image.pullPolicyIfNotPresentImage pull policy
postgres.passwordrippleSuperuser password (use a Secret in production)
postgres.databasepostgresDatabase to create
persistence.enabledtrueEnable persistent storage
persistence.size10GiPVC size
persistence.storageClass""StorageClass (empty = cluster default)
service.typeClusterIPPostgreSQL service type
service.port5432PostgreSQL port
http.enabledtrueEnable SPARQL HTTP sidecar
http.service.typeClusterIPSPARQL HTTP service type
http.service.port7878SPARQL HTTP port
ripple.federationEndpoints[]SPARQL federation endpoints
ripple.shacl.shapesConfigMap""SHACL shapes ConfigMap
ripple.llm.apiKeySecret""LLM API key Secret name

Common Configurations

Expose SPARQL HTTP externally (LoadBalancer)

helm upgrade pg-ripple ./charts/pg_ripple \
  --set http.service.type=LoadBalancer \
  --set http.service.port=7878

Increase storage

helm upgrade pg-ripple ./charts/pg_ripple \
  --set persistence.size=100Gi \
  --set persistence.storageClass=premium-ssd

Configure federation endpoints

helm upgrade pg-ripple ./charts/pg_ripple \
  --set 'ripple.federationEndpoints[0].name=wikidata' \
  --set 'ripple.federationEndpoints[0].url=https://query.wikidata.org/sparql'

Enable Prometheus monitoring

helm upgrade pg-ripple ./charts/pg_ripple \
  --set metrics.enabled=true \
  --set metrics.serviceMonitor.enabled=true

Health Probes

The chart configures both liveness and readiness probes using pg_isready:

livenessProbe:
  exec:
    command: ["pg_isready", "-U", "postgres"]
  initialDelaySeconds: 30
  periodSeconds: 10

readinessProbe:
  exec:
    command: ["pg_isready", "-U", "postgres"]
  initialDelaySeconds: 5
  periodSeconds: 5

Prometheus Integration

When metrics.serviceMonitor.enabled = true, the chart creates a ServiceMonitor resource for the Prometheus Operator. pg_ripple exposes query stats via pg_stat_statements and OTEL tracing via the pg_ripple.tracing_otlp_endpoint GUC.

Configure the OTEL endpoint:

kubectl exec -it <pod-name> -- psql -U postgres \
  -c "SET pg_ripple.tracing_otlp_endpoint = 'http://otel-collector:4318';"

Future: Kubernetes Operator

A future release will provide a Go operator built with controller-runtime that manages pg_ripple clusters as first-class Kubernetes resources — similar to CloudNativePG but tailored to the RDF workload lifecycle (bulk load, VP merge scheduling, SHACL validation pipelines).

The operator will provide:

  • RDFTripleStore custom resource with declarative schema management
  • Automated rolling upgrades with zero downtime
  • Built-in Prometheus metrics CRDs
  • Automated SHACL shape deployment via ConfigMap reference

Pre-Installed Extensions

The batteries-included image pre-installs:

ExtensionVersionActivate with
pg_ripple0.54.0CREATE EXTENSION pg_ripple;
PostGIS3.4.3CREATE EXTENSION postgis;
pgvector0.7.4CREATE EXTENSION vector;