Like what you see? ⭐ Star the repo ⭐ to support the project and keep it in the spotlight. See the stargazers →

Helm

This chart deploys the Kafscale operator (which in turn manages broker pods) and the lightweight operations console. CRDs are packaged with the release so helm install takes care of registering the KafscaleCluster and KafscaleTopic resources before the operator starts.

Prerequisites

  • Kubernetes 1.26+
  • Helm 3.12+
  • Access to an etcd cluster that the operator can reach
  • IAM credentials/secret containing the S3 access keys that the operator will mount into broker pods

Quickstart

helm upgrade --install kafscale ./deploy/helm/kafscale \
  --namespace kafscale --create-namespace \
  --set operator.etcdEndpoints[0]=http://etcd.kafscale.svc:2379 \
  --set operator.image.tag=v0.1.0 \
  --set console.image.tag=v0.1.0

For a dev/latest install, set operator.image.useLatest=true, console.image.useLatest=true, and operator.brokerImage.useLatest=true (this also forces imagePullPolicy=Always).

After the chart is running you can create a cluster by applying a KafscaleCluster resource (see config/samples/ for an example). The console service is exposed as a ClusterIP by default; enable ingress by toggling .Values.console.ingress.

External Kafka Access

Recommended: enable the chart proxy (proxy.enabled=true) and set proxy.advertisedHost to the address external clients should use. The proxy is the single Kafka entrypoint and supports broker scaling without client reconfiguration. For production, use proxy.service.type=LoadBalancer. For local clusters (kind), pin proxy.service.nodePort (range 30000–32767).

Optional: to expose brokers directly (bypassing the proxy), configure KafscaleCluster spec.brokers.service and advertisedHost / advertisedPort.

See Operations for full examples and TLS termination guidance.

MCP

The MCP service is optional and disabled by default. Enable it with mcp.enabled=true; it will deploy into the dedicated namespace defined by mcp.namespace.name.

Values Overview

Key Description Default
operator.replicaCount Number of operator replicas (each performs leader election via etcd). 2
operator.leaderKey Kubernetes leader election lock name. kafscale-operator
operator.etcdEndpoints List of etcd endpoints the operator will connect to. ["http://etcd:2379"]
console.service.type Kubernetes service type for the console. ClusterIP
console.ingress.* Optional ingress configuration for exposing the console. disabled
proxy.enabled Deploy the Kafka-aware proxy for external client access. false
proxy.advertisedHost Address Kafka clients should connect to (public DNS or node IP). ""
proxy.service.type Proxy Service type (LoadBalancer, NodePort, ClusterIP). LoadBalancer
proxy.service.nodePort Pin NodePort when type=NodePort (range 30000–32767). ""
mcp.enabled Deploy the MCP service. false
mcp.namespace.name Namespace to deploy the MCP service into. kafscale-mcp
mcp.ingress.* Optional ingress configuration for exposing the MCP service. disabled

Consult values.yaml for all tunables, including resource requests, node selectors, and pull secrets.