Skip to content

Apache Druid OLAP Cluster

Scaffolds an Apache Druid OLAP cluster as a Helm chart for Kubernetes. Includes all six Druid services (router, broker, coordinator, overlord, historical, task) as StatefulSets with per-component runtime properties, JVM tuning, and resource limits. Uses Kubernetes-native service discovery (no ZooKeeper), configurable metadata storage and deep storage backends, optional cert-manager TLS certificates, and optional Prometheus metrics emitter.

Nameinfra-druid
Version0.1.0
Categoryinfrastructure
LicenseApache-2.0
Personaengineering
Tagsdruid, olap, analytics, kubernetes, helm, infrastructure
Sourcetemplates/infra-druid

Render it

Three front doors, one catalog. Pick whichever suits the caller.

# CLI
npx @nanohype/sdk render infra-druid --out ./my-app

# SDK
import { LocalSource, renderTemplate } from "@nanohype/sdk";
const result = await renderTemplate(source, "infra-druid", variables);

# MCP — from an agent
get_template({ name: "infra-druid" })

Prerequisites

ToolVersionWhy
kubectlKubernetes CLI for cluster access and manifest debugging
helm>=3.0Helm CLI for installing and upgrading the Druid chart
cert-manager (optional)Kubernetes certificate management (only needed if TLS is enabled)

Variables

Required

ProjectName string
Kebab-case project name, used as Helm release name and resource prefix Must be lowercase kebab-case starting with a letter.

Optional

Description string — defaults to Apache Druid OLAP cluster
Short project description for README and chart metadata
DruidVersion string — defaults to 37.0.0
Apache Druid version for the container image
MetadataDriver string — defaults to postgresql
Metadata storage driver (postgresql, mysql, derby)
DeepStorageType string — defaults to s3
Deep storage backend (s3, hdfs, local)
IncludeMonitoring bool — defaults to true
Include Prometheus metrics emitter configuration and annotations
IncludeTls bool — defaults to true
Include cert-manager Certificate for internal mTLS

What it produces

26 files. Placeholder names such as __APP_NAME__ are what the renderer substitutes into.

.env.example
.gitignore
chart/Chart.yaml
chart/templates/_helpers.tpl
chart/templates/broker/configmap.yaml
chart/templates/broker/service.yaml
chart/templates/broker/statefulset.yaml
chart/templates/certificate.yaml
chart/templates/configmap.yaml
chart/templates/coordinator/configmap.yaml
chart/templates/coordinator/service.yaml
chart/templates/coordinator/statefulset.yaml
chart/templates/historical/configmap.yaml
chart/templates/historical/service.yaml
chart/templates/historical/statefulset.yaml
chart/templates/networkpolicy.yaml
chart/templates/overlord/configmap.yaml
chart/templates/overlord/service.yaml
chart/templates/overlord/statefulset.yaml
chart/templates/router/configmap.yaml
chart/templates/router/service.yaml
chart/templates/router/statefulset.yaml
chart/templates/serviceaccount.yaml
chart/templates/task/pod-template.yaml
chart/values.yaml
README.md

Composes with