Skip to content

Helm chart

The chart for fallbck-k8s-agent lives in deploy/helm/fallbck-k8s-agent. You have to set server.url, clusterName and an enrollment key. Everything else has a sane default.

Connection and identity

Value Default What it does
server.url Server (reverse proxy) URL. Required.
server.caCert Inline PEM of a private CA. Used by the agent and its worker pods.
server.insecureSkipVerify false Testing only.
clusterName Required. The agent shows up as k8s-<clusterName> and its PBS groups get the prefix host/k8s-<clusterName>.
enrollment.key One-time token. Ignored once enrolled.
enrollment.existingSecret Or point at a Secret with key enrollment-key.
identitySecretName fallbck-k8s-agent-identity Owned by the agent. Upgrades and uninstalls leave it alone. Delete it to re-enroll.
stateSecretName fallbck-k8s-agent-state Per-job WAL/binlog chain state for DB jobs.

Agent pod

Value Default What it does
image.repository oci.fi/fallbck/k8s-agent
image.tag latest Pin this to your server's version.
image.pullPolicy Always
resources 100m / 256Mi, limit 1Gi
spool.sizeLimit 2Gi emptyDir for the resource dump.
spool.existingClaim Use a PVC instead.
logLevel info
nodeSelector, tolerations, affinity, priorityClassName The usual.

Volume worker pods

One per volume, in the volume's namespace.

Value Default What it does
worker.image the agent image
worker.pullPolicy Always
worker.resources 100m / 256Mi, limit 2Gi
worker.maxProcs 2 Caps upload concurrency (GOMAXPROCS). Without it, peak memory grows with the node's CPU count and big volumes get OOM-killed. Only raise it together with the memory limit.
worker.securityContext root, all caps dropped except DAC_OVERRIDE, read-only rootfs Passes Pod Security baseline. For restricted namespaces, run as the UID that owns the data. Example below.
worker:
  securityContext:
    runAsUser: 991
    runAsNonRoot: true
    allowPrivilegeEscalation: false
    readOnlyRootFilesystem: true
    capabilities: {drop: ["ALL"]}

Database dump pods

Value Default What it does
worker.db.images.postgres postgres:{major} {major} gets replaced with the detected server version.
worker.db.images.mysql mysql:{major}
worker.db.images.mariadb mariadb:{major}
worker.db.images.mongodb mongo:{major} MongoDB can't be probed, so it ends up as latest.
worker.db.spoolSizeLimit 20Gi Size it for your biggest dump.
worker.db.resources 100m / 256Mi, limit 2Gi
worker.db.securityContext root, all caps dropped, read-only rootfs

A job can also pin its own image with its tools image setting.