Skip to content

Kubernetes with Helm

import { Aside, Steps } from ‘@astrojs/starlight/components’;

The PulsusDB repository includes a Helm chart at deploy/charts/pulsusdb. The chart supports two independent topology choices:

  • PulsusDB as one all Deployment or split writer and reader Deployments;
  • bundled ClickHouse as one node or a sharded cluster.
Terminal window
helm install pulsusdb oci://ghcr.io/digitalis-io/charts/pulsusdb \
--version CHART_VERSION \
--set initJob.retentionDays=7 \
--set image.tag=APPLICATION_IMAGE_TAG

initJob.retentionDays is required while the schema Job is enabled. The application image tag must refer to an image you can pull.

Terminal window
git clone https://github.com/digitalis-io/pulsusdb.git
cd pulsusdb
helm upgrade --install pulsusdb deploy/charts/pulsusdb \
--set initJob.retentionDays=7 \
--set image.tag=APPLICATION_IMAGE_TAG
values-split.yaml
pulsusdb:
split:
enabled: true
writer:
replicaCount: 2
reader:
replicaCount: 2
initJob:
retentionDays: 30
Terminal window
helm upgrade --install pulsusdb deploy/charts/pulsusdb -f values-split.yaml
values-external-clickhouse.yaml
clickhouse:
enabled: false
auth:
existingSecret: pulsusdb-clickhouse
existingSecretPasswordKey: password
pulsusdb:
config:
clickhouse:
server: clickhouse.example.internal
http_port: 8123
database: pulsus
initJob:
retentionDays: 30

Create the referenced Secret without committing credentials:

Terminal window
kubectl create secret generic pulsusdb-clickhouse \
--from-literal=password='replace-me'
Probe Handler Meaning
Liveness TCP on the configured PulsusDB port Restart only if the process stops listening
Readiness GET /ready Remove the pod from service when ClickHouse or reader warm-up is unavailable
Startup TCP on the configured PulsusDB port Delay liveness until the listener binds

Do not replace liveness with /ready. A ClickHouse outage should make PulsusDB unready, not restart every pod.

The chart’s schema Job runs the destructive schema/schema.sh script. Its name changes when the Job spec changes, which can cause a Helm upgrade to create a new Job and rebuild the database. Review rendered manifests before upgrading:

Terminal window
helm template pulsusdb deploy/charts/pulsusdb \
--set initJob.retentionDays=30 > rendered.yaml

For a controlled data lifecycle, disable the Job and operate schema changes yourself:

initJob:
enabled: false