Skip to main content

Where images come from

By default the chart pulls every image from registry.falkordb.cloud, so a standard install only needs to reach that one host. Two different things live there: Mirrored images keep their original repository path and drop only the source host, so docker.io/apecloud/kubeblocks becomes registry.falkordb.cloud/falkordb/apecloud/kubeblocks. Because upstream images always carry an organization prefix, they can never collide with the FalkorDB images sitting directly under the namespace. These are the upstream registries the mirror pulls from. A default install does not contact them.
Registry credentials are required either way, since the FalkorDB Enterprise images are private. The same credentials authenticate the mirrored third-party images, because they share the registry host.

Pull from upstream instead

To bypass the mirror, clear global.imageRegistry so the chart-owned images fall back to their original registries:
This covers the Admin Server, Admin UI, the kubectl hook jobs, and the FalkorDB addon. The subcharts that ignore .Values.global — KubeBlocks, the CSI drivers, snapshot-controller, and Browser — have their own image keys and stay wherever the chart’s defaults point them.

Mirror into your own registry

Two scripts do the work: collect-images.sh builds the manifest of every image the chart can pull, and mirror-images.sh copies them. You need helm and skopeo locally, and push access to the target registry.
1

Download the chart and the scripts

The scripts read the chart to discover images, so fetch both. helm pull --untar gives you the chart with every subchart and example already bundled — there is nothing else to build.
Keep the three scripts in the same directory. verify-mirror-overlay.sh invokes collect-images.sh from alongside itself.
2

Collect the image manifest

Point CHART_DIR at the chart you just unpacked:
This renders the chart with every optional subchart enabled, so the manifest covers the CSI drivers and snapshot-controller even if you do not plan to use them. It also picks up images KubeBlocks resolves at runtime from ComponentDefinition and ActionSet resources, and from *_IMAGE environment variables — those never appear as an image: key and would otherwise be missing from an air-gapped mirror.The run also prints the FalkorDB Enterprise images and the exact tags this chart version expects. Note them down for the step after next:
An unrecognised $(VAR) placeholder is a hard error rather than a warning. It means a new runtime-resolved image exists that the manifest does not know how to expand, so failing loudly is the only way to avoid shipping an incomplete mirror.
3

Copy the third-party images

--target-namespace defaults to falkordb, so omitting it still nests everything under my-registry.example.com/falkordb/. Each image keeps its upstream repository path and drops only the source host:
Add --dry-run to print the copy plan without pushing. If two source images would map onto the same target path the script fails rather than letting one overwrite the other. Pass --digests-out digests.txt to record the pushed digests for an audit trail.
4

Copy the FalkorDB Enterprise images

The manifest deliberately omits the first-party images, because FalkorDB CI publishes them directly rather than mirroring them, and their tags come from the build rather than the manifest. Copy each one at the tags reported above, into the namespace root so the paths match what the chart renders — my-registry.example.com/falkordb/falkordb-enterprise-server:0.4.1, not a doubled .../falkordb/falkordb/...:
Mirror every database tag you intend to offer, not just the default one — each must match a falkordb-addon.falkordbVersions[].tag entry.
5

Write the values overlay

global.imageRegistry covers only the images the chart itself owns, plus the FalkorDB addon. The other subcharts do not read .Values.global and each structures its image values differently, so they need explicit keys. Start from the worked example bundled with the chart and replace registry.falkordb.cloud/falkordb throughout with your own registry and namespace:
The csi-s3 subchart takes full image references including tags, so my-mirror.yaml must be revisited whenever those tags change. The other subcharts take a registry prefix and are unaffected by tag bumps.
6

Verify the overlay covers everything

This renders the chart with the overlay and asserts every image points at your registry and matches a path the mirror actually pushes. It catches the two ways an overlay silently goes stale: a subchart upgrade adding or renaming an image key, and a rewritten path that does not match what mirror-images.sh produced.
The check compares the render against what mirror-images.sh would push, never against the live registry. It passes even when the mirror is empty, so it is not proof that the copy step succeeded.
7

Mirror the chart itself

The Helm chart is an OCI artifact, not a container image, so it is not part of the manifest. Push it across if the cluster cannot reach registry.falkordb.cloud:
8

Install with the overlay

Or through the installer script:
Repeat the whole sequence for each chart upgrade. Image tags move with the chart version, so a mirror populated for an older release will not satisfy a newer one.

Installer-managed Secret

The installer can create or update a Docker registry Secret in the FalkorDB Enterprise namespace and wire it into the Admin Server and Admin UI deployments.
Equivalent explicit flags, pointed at a different registry (for example GHCR):
If credentials are provided and --image-pull-secret is omitted, the installer uses falkordb-registry-pull-secret against registry.falkordb.cloud by default. GHCR_USERNAME/GHCR_TOKEN remain supported as aliases for GITEA_USERNAME/GITEA_TOKEN.

Existing Secret

If the Secret already exists, pass only its name:
The installer will reference the existing Secret without recreating it.

Manual Helm values

If you install the chart manually, name the pull Secret once under global and repeat it for the addon:
The Secret only needs to exist in the release namespace. The Admin Server copies it into every namespace it provisions a database into and refreshes the copy on each cluster operation, because Kubernetes resolves imagePullSecrets in the pod’s own namespace and has no cluster-scoped equivalent. Both keys default to empty, so an install that pulls from a registry allowing anonymous access references no pull Secret at all. See Helm values for the full list. The Browser subchart has its own image settings. Configure those through the corresponding dependency values if that image is also private.

Rotate credentials

Update the Secret in place:
Restart workloads if the current pods need to pull images immediately:
Copies of the Secret in database namespaces are refreshed by the Admin Server on the next cluster operation in that namespace. To push the new credentials out immediately, re-apply the same create secret command against each database namespace.