values.yaml and a
helm install command, and you run them against your cluster.
If you install without the wizard — or you want the full reference for every
value the chart exposes — use
Install Popsink with Helm for partners instead. The two
pages describe the same chart.
Prerequisites
See Kubernetes requirements for the full list.
You also need two things from Popsink before you start:
- a registry token (a Google Artifact Registry service-account JSON) — every Popsink image is pulled from a private registry;
- an account on the control plane you will attach this deployment to
(
https://control-plane.popsink.com, or your own).
URL, not TLD, not FQDN. For a data plane served at
popsink.example-company.com, the TLD is .com, the FQDN is
popsink.example-company.com, and the URL is
https://popsink.example-company.com.The chart value is ingressUrl and it takes the URL. The wizard’s
Fully qualified domain name field accepts the host on its own and prefixes
https:// for you; type a scheme yourself and it is kept as-is (an on-prem data
plane may legitimately sit behind plain HTTP).1. Create the deployment
- Open Deployments in the control-plane sidebar.
- Click New Deployment.

- Deployment name — a recognizable name for this environment. It also becomes the Helm release name (slugified), so keep it short and DNS-friendly.
- Deployment URL — generated from the name.
- Deployment method — Self-hosted.
💡 You can request a new region or provider if your preferred option is not listed.

2. Configure
Everything on this step exists to generate yourvalues.yaml. Nothing here is
stored by Popsink — you can also skip the step and write the values yourself.
The PostgreSQL Database toggle means “I bring my own”. Left off, the chart
installs the bundled Postgres sub-chart and points both the data plane and the
schema registry (Kora) at it.
3. Save the generated values.yaml
The Chart step shows your values.yaml first, then the install command
that reads it. That order matters: Helm resolves values at install time, so a
helm install without -f values.yaml installs pure chart defaults and ignores
everything the wizard generated.
The generated file is complete — it covers every value the chart marks
required, plus three secrets minted in your browser and never sent to
Popsink:
values.yaml (generated — abridged)
deploymentJwtToken is an object, not a string — token: nested underneath.
A flat deploymentJwtToken: <jwt> fails to render.
Fill in what the wizard cannot
The wizard flags any value it left empty under “Fill these in before installing”. Two of them always need your attention:1
imagePullSecret.token
Paste the registry token Popsink issued you (the GAR service-account JSON, raw
or base64-encoded). The control plane holds no registry credential, so it
cannot fill this for you.
2
global.imagePullSecrets
Add this by hand — Or skip
imagePullSecret.create: true is not sufficient today.
The chart creates the secret as <release-name>-regcred but does not attach
it to any pod, so every image fails with ImagePullBackOff. Reference it
explicitly:imagePullSecret entirely and create the secret yourself:This extra step is a known chart defect and will go away — until then,
both values are required.
3
externalDatabase.user / .database (only if you brought your own Postgres)
These two are not guarded by the chart: left empty they render, install,
and the data plane then crash-loops on an empty
DB_USER. The database must
exist before the install — the data plane runs its own migrations on startup.4. Configure ingress
The chart can render theIngress for you, and it can also stay out of the
way. Pick one — but either way, ingressUrl must match the public URL your
users actually reach, or the control-plane login redirect loops.
- Let the chart render it
- Bring your own Ingress
ingress.extraHosts, ingress.extraTls, ingress.path and
ingress.existingSecret are available too — see the chart reference values
linked from the wizard.5. Install
Run the command the wizard shows you, from the directory holding yourvalues.yaml:
6. Await connection
Once the pods areReady, the control plane leaves Awaiting connections… and
the deployment flips to Live, usually within a minute. That flip is driven by
the data plane’s first
heartbeat — the control plane
never probes your cluster.

ingressUrl and log in with adminCredentials.
If it stays on “Awaiting connections…”
Managing secrets
Sensitive values can be provided two ways:- Directly in
values.yaml— simple, but keep the file out of Git and under access control. - From an existing Kubernetes Secret (recommended for production) — set the
matching
existingSecretfield instead of the literal. Available fordeploymentJwtToken,jwt,connectorConfigEncryptionKey,adminCredentials,kora.database,kodansu.storage.awsand the database blocks, and it works with Vault, Sealed Secrets or the External Secrets Operator.
Production recommendations
- External PostgreSQL (
postgresql.enabled: false+externalDatabase.*) backed by managed snapshots, rather than the bundled sub-chart. - S3-compatible object storage for retention, with versioning and a lifecycle policy on the bucket.
- Pin the chart version (
--version) and the image tag (image.tag) for reproducible upgrades — never deploylatest. - TLS-only ingress, with source ranges restricted if the data plane is internet-exposed.
- Keep
allowDesignLogin: falseandpipelineMode: false— dev-only switches. - Back up the four secrets (admin credentials, JWT secret, Fernet key, database password) in your secret manager.
Advanced configuration
Every value the chart exposes — component-level resources, replica counts, HPA and VPA, network policies, bringing your own Kafka or schema registry, Oracle as the Kora backend — is documented in Install Popsink with Helm for partners, and in the Full chart reference values file linked from the wizard’s Chart step.Custom JWT secrets
You can supply your ownjwt.secret instead of the generated one, for tighter
control over token signing and rotation policy, secret ownership, and to keep
signing material inside your own secret manager. Set jwt.existingSecret rather
than a literal if the value is managed out of band.