Skip to content

Deploying to Kubernetes (Helm) ​

Chart deploy/helm/karhutlasql: a 1-replica Deployment (DuckDB is single-writer, Recreate strategy) + a PVC at /data, a Service (31337 Flight SQL, 9090 admin), readiness/liveness via GET /healthz, non-root 65532, read-only root FS.

bash
# secrets from files, not argv
kubectl create secret generic karhutlasql-auth \
  --from-file=password=./password --from-file=jwt-secret=./jwt-secret
kubectl create secret tls karhutlasql-tls --cert=server.crt --key=server.key

helm install kq deploy/helm/karhutlasql \
  --set auth.existingSecret=karhutlasql-auth \
  --set tls.existingSecret=karhutlasql-tls
ValueDefaultDescription
auth.existingSecret— (required)key password (plaintext/bcrypt), optional jwt-secret (without it tokens are invalidated on restart)
auth.usernameadmin
tls.existingSecret""empty = in-memory self-signed (dev)
tls.initImagebusybox:1.37init container that copies the key to an emptyDir with mode 0600 (the server rejects keys readable by group; a Secret mounted with fsGroup is 0440)
queryTimeout300seconds
fourEyestruea new policy/classification ConfigMap (restart) stays pending until 2 admins approve it (policy); state on the PVC
archive.s3.*, archive.existingSecret, archive.retentionemptyaccess-history & report archive in an object-lock bucket; Secret keys access-key, secret-key
reports, reportSigning.existingSecretemptycontents of reports.yaml; Secret key report.key (copied to an emptyDir with mode 0600)
dq.maxAge26hreport-run DQ gate (GX validation per source table); "0" = off
unityCatalog.endpoint, .syncInterval, .advertisedEndpoint, .existingSecretempty / 15mmetadata sync to Unity Catalog OSS; Secret key uc-token (optional)
allowedDirectories[]paths/URL prefixes DuckDB may access (G-07)
extraArgs[]extra server flags
persistence.size / storageClass10Gi / default
image.repository / tagkarhutlasql / dev

Local test (kind): make docker && kind load docker-image karhutlasql:dev, then kubectl port-forward svc/kq-karhutlasql 31337 and karhutlasql-client --tls-ca server.crt.

Released under the Apache 2.0 License.