schemaVersion: 1, so the schema can evolve without new routes: the endpoints
stay /api/clusters and /api/clusters/{name}. The Admin UI and every example
on this page use it.
The body
A read adds
status: state and ready, node and sentinel counts,
endpoints, the TLS certificate’s expiry, pendingChanges (accepted but not
applied yet), and unmanagedFields (settings made outside this API, such as
with the YAML editor).
A read leaves out what is not kept on the deployment itself:
config.enterprise and config.server (they live in redis.conf) and
backup. An inline security.auth.password reads back as the
passwordSecretRef of the Secret it was moved into.
Create, read and change
-
GET /api/clusters?schemaVersion=1lists deployments as{ "schemaVersion": 1, "deployments": [...], "total": N }. -
PATCHtakes a JSON Merge Patch: send only what changes. Objects merge, lists are replaced whole, andnullremoves a field. -
PUTtakes a whole body. Fields it leaves out are removed, with these exceptions:-
config.enterpriseandconfig.server: only the settings it names change. -
version,componentDefinition, andlifecycle’sstateanddeletionPolicy: these keep their current values, so leaving them out doesn’t upgrade, start a stopped deployment, or dropDoNotTerminate. -
Labels and annotations that other tools manage. These keep their current
values when the body leaves them out. Their key prefix is one of:
kubeblocks.io/orfalkordb.cloud/, or a subdomain of one, such asapps.kubeblocks.io/orkeel.falkordb.cloud/.app.kubernetes.io/, exactly.- A domain in the Admin Server’s
ADMIN_SERVER_PRESERVED_LABEL_PREFIXES, or a subdomain of one.
falkordb.io/andfalkordb.com/keys are moved tofalkordb.cloud/with the same name, and kept there.
PATCHit tonullby name, for example{"schemaVersion": 1, "metadata": {"labels": {"keel.falkordb.cloud/cell": null}}}. Setting the whole map tonull("labels": null) removes only the other labels; the tool-managed ones stay. Reserved annotations can’t be removed at all, even by name: those underkubeblocks.io/orapps.kubeblocks.io/, and the Admin Server’s own TLS and pending-settings annotations. Anullfor one of them is ignored. APUTof what a read returns changes nothing. That includes a Sentinel left on an older addon release: to bring it to the data nodes’ definition,PATCHspec.componentDefinition. Don’t sendbackupor an inline password again: both are set at create time only. -
-
If-Matchtakes themetadata.generationyou read. When the deployment changed since, the update is refused with412instead of overwriting the other change. -
?dryRun=truereturns what the update would do without doing it.
{ "schemaVersion": 1, "deployment": {...}, "plan": {...} }.
It answers 202 when part of the change is applied after the write: volume
growth, and config.enterprise or config.server settings. Those show in
status.pendingChanges until they are applied.
Rules an update follows
- Volumes only grow, and their storage class can’t change.
- A deployment can’t move between sharded and not sharded, or gain or lose sentinels. A primary with replicas and no sentinels can become a single node and back.
- The FalkorDB version can’t go back.
config.enterpriseandconfig.serverchange only while the deployment is running. See how settings are applied for which ones restart the pods, and how to reset or empty one.- Settings and volume growth are applied after the write, and only while the
deployment is running: otherwise they answer
409. - While earlier settings or volume growth still wait to be applied, another
update that queues some answers
409. Retry once they are applied. - While a Reconfiguring operation runs, an update that sets one of its
settings to another value answers
409; the same value is taken as already on its way. - A request that stops the deployment can’t also change settings or grow
volumes: that answers
422. config.servercan’t set the directives the FalkorDB addon manages: the listening port and TLS, accounts (requirepass,user, …), modules, the data directory and file names, replication and cluster wiring, announced addresses,logfile,pidfile, and the switches that openMODULEandDEBUG.GET /api/clusters/{name}/configshows credentials set as enterprise settings only to users who may read the deployment’s credentials (clusters:update). Anyone else sees(redacted).- A field set outside this API is not overwritten: the update answers
422naming it. Add?overwriteUnmanaged=trueto replace it.
How settings are applied
Each setting falls into one of three categories:
To undo a change:
- An enterprise setting set to
nullgoes back to its default. When the default is empty, as with the LDAP settings,nullor""empties it, so settingfalkordbe.ldap_serverstonullturns LDAP authentication off. An empty value for any other enterprise setting answers422. - A
config.graphsetting set tonullis removed, and the server uses its default. - A
config.serverdirective has no default the API knows, sonullanswers422: set the value you want.""empties a directive that is applied on the fly. A directive that needs a restart can’t be emptied, because a bad empty value could keep the pods from starting. - A whole section (
config.server: null) can’t be removed.
Errors
A400 or 422 lists each problem:
Deprecated requests
These requests still work. Their answers carry aDeprecation header
(RFC 9745) and a Link to this
section, and the Admin Server logs the callers that still use them. Move to
the replacement.
Restart, switchover, rebalancing a sharded deployment (
/ops/rebalance),
moving its slots (/ops/reshard),
reconfiguring Sentinel (/ops/configure with componentName: falkordb-sent),
and reading or deleting OpsRequests are not deprecated: they have no
counterpart in the deployment body.
Reading a deployment without
?schemaVersion=1 still returns the earlier
shape and is not deprecated.