data-plane Helm chart. If you are installing for the
first time, follow
Install the data plane on Kubernetes instead — it walks
the one path that works. This page is what you reach for when the wizard’s
output is not enough: bringing your own Kafka, schema registry or PostgreSQL,
tuning resources, or managing secrets out of band.
The chart is published as an OCI artifact:
@param blocks) ships inside the
chart’s own values.yaml, and the control-plane wizard links the reference
values file for the version it serves you.
Components
Connector workers are not part of the chart: the data plane creates them as pods
in its own namespace at runtime.
kodansu was previously called tansu, and the chart still reads a tansu:
block for backwards compatibility (anything under kodansu: wins). New values
files should use kodansu:.Two components that appeared in earlier versions of this page — karapace and
kafka-ui — no longer exist in the chart. They were replaced by kora and
kotatsu respectively. A values.yaml that still sets karapace.* or
kafkaUi.* is silently ignored.Identity
These come from the control plane (Deployments → New deployment → Self-hosted) and must be used verbatim — they are how the data plane authenticates itself.deploymentMode: STANDALONE disables every control-plane call, including the
heartbeat, and requires no deploymentJwtToken. It is the mode behind
air-gapped installs — see
Standalone
for what you give up.
Secrets you must generate
Beyond the values handed by the control plane, four secrets are generated locally. The wizard mints three of them in your browser; installing by hand means producing them yourself.Managing secrets with existingSecret
Any sensitive value can come from an existing Kubernetes Secret instead of a
literal. Set the matching existingSecret field and leave the literal unset —
this works with Vault, Sealed Secrets and the External Secrets Operator, and is
the recommended shape in production.
Available for deploymentJwtToken, jwt, connectorConfigEncryptionKey,
adminCredentials, kora.database, kodansu.storage.aws, externalDatabase
and postgresql.auth.
The sources are mutually exclusive: an existingSecret combined with a literal
password or url is rejected at render time.
Image pull
All images are published to a private GAR registry:- Chart-managed pull secret
- Bring your own pull secret
global.imagePullSecrets is required alongside imagePullSecret.create.
The chart creates the secret but does not attach it to any pod, so without
it every image fails with ImagePullBackOff. This is a known chart defect.Data-plane database
- In-cluster (default)
- External (recommended in production)
Schema registry (Kora)
Kora is Popsink’s schema registry: every connector registers the structure of what it reads there, and every target resolves schemas from it. It is enabled by default and it requires its own PostgreSQL role and database, which the chart does not create for you.- Dedicated database (recommended)
- Bring your own registry
Run once against your PostgreSQL instance — managed services such as RDS or
Cloud SQL included:
kora.database.existingSecret with secretKeys.password, or secretKeys.url
for a full connection URL.
Kora also supports an Oracle backend: kora.database.backend: oracle, port
1521, and database set to the service name (e.g. FREEPDB1). The chart
selects the matching image automatically.
Broker storage (Kodansu)
Kodansu is a stateless Kafka broker that stores log segments in an object store.kodansu.storage.engine decides where records live, and both it and
kodansu.storage.aws.region are required by the chart.
PostgreSQL retention is simpler to operate but does not scale the same way, and
rules out Kotatsu (there is no bucket to browse).
Bring your own Kafka
Stream browser (Kotatsu)
Kotatsu is optional and disabled by default. It is a read-only browser over the objects the broker wrote to S3, and it backs two things in the UI:- search, pagination and the timestamp column on the datamodel Stream tab;
- the per-subscription target lag rows on the pipeline latency view.
kodansu.storage.*,
kodansu.clusterId) — the only combination that can work, since the two read and
write the same objects. Set kotatsu.s3.* only to point Kotatsu at a replica of
the bucket or at a separate read-only credential. On EKS with IRSA, leave the
keys empty and annotate kotatsu.serviceAccount.annotations with the role ARN.
On charts before
0.1.0-alpha.162 Kotatsu defaulted to enabled, so an
install that had not opted into S3 aborted with
kotatsu.s3.bucket must be provided when kotatsu is enabled. Setting
kotatsu.enabled: false is the correct workaround on those versions.Ingress
ingress.enabled is off by default and we recommend leaving it that way:
ingress in production usually needs company-specific annotations (cert-manager,
WAF, allow-lists). Both shapes — chart-rendered and bring-your-own — are covered
in step 4 of the install guide.
The chart never installs an ingress controller. Bringing your own means pointing
it at the
<release>-data-plane service on port 80.
Resources and availability
Safety switches
A complete values.yaml
values.yaml
Most useful values
Further reading
Install the data plane on Kubernetes
The guided path, from the control-plane wizard to a Live deployment.
Troubleshooting
Symptom-to-cause table for the install and the first boot.
Kubernetes requirements
What the cluster, the network and your Popsink account must provide first.
Deployments and environments
How to map deployments onto your regions, networks and staging tiers.