Skip to main content

Prerequisites

stardelt runs on a Kubernetes cluster you provide. It needs a real node: laptop-size clusters are not supported.

Choose how to install​

You haveDo this
No cluster, and you want to try stardeltSingle Hetzner node
A cluster, and you want everything with sign-inIDENTITY=1 BASE_DOMAIN=<your domain> make platform in a checkout of stardelt-platform (the checks are below)
A cluster, and you want one Helm release and values in GitInstall on your own cluster

What the cluster must provide​

RequirementNotes
KubernetesAny conformant distribution. Verified on k3s 1.37; other distributions and versions are expected to work but are not tested yet
A default StorageClassVolumes for the object store and the databases bind to it. Check with kubectl get storageclass
Cluster administrator rights for the installThe install creates namespaces, CRDs and cluster roles
Outbound network access at install timeCharts and images come from upstream registries. To install without internet access, mirror them first: see Sovereignty
An ingress controller (optional)Needed for hostnames in the browser. Without one, use kubectl port-forward
cert-manager (with sign-in only)Issues the SQL engine's internal TLS certificate

kubectl config current-context decides which cluster you install into. To refuse any other, set EXPECT_CONTEXT=<context> when you run make.

How big a node​

NodeRuns
4 vCPU, 8 GBThe core: object store, catalog, SQL engine, Nova
8 vCPU, 16 GBThe whole platform, with Airflow, Superset, notebooks and Spark

These numbers say what fits, not what a production workload needs. See Running stardelt in production.

Tools​

ToolVersionNeeded for
kubectl1.30 or newerevery install
helm3.18 or newerevery install
git, makerecentevery install
hcloud, hetzner-k3srecentthe Hetzner path only

stardelt-platform/dev/install-tools.sh installs kubectl, helm and hcloud into ~/.local/bin.

Check the node first​

On Ubuntu with a recent kernel, AppArmor can stop PostgreSQL from starting. Run this on the node after pods have started; the count must be 0:

sudo journalctl -k --since "-10 min" | grep -c 'apparmor="DENIED" operation="signal"'

If it is not 0, see Troubleshooting.