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.