configuration

Configuration reference

Documentation home · Getting started

Configure roles through the Orbit-owned manifests. Shared-runtime options below require replicated CSI 4.1.0 and the companion local CSI 2.1.0 extension; 4.0.1 images do not implement them. Generated per-volume resources are managed by the driver; do not hand-edit their identity, membership, access mode or credential files.

StorageClass and PVC inputs

Input Default / behavior
Provisioner csi.replicated.tak-os.org.
parameters.replicas 1; integer default from one through four.
PVC annotation csi.replicated.tak-os.org/replicas Overrides the default at creation; exact strings 1, 2, 3, 4.
parameters.backingStorageClass Manager's --backing-class, default tak-os-local.
PVC access mode Exactly RWX or RWO; no mixed-mode volume, RWOP, raw block or ReadOnlyMany capability.
Requested storage Passed to each backing claim; not a quota or capacity reservation.
Outer reclaim policy Choose Retain or Delete for application-volume lifecycle.
Backing class Local driver, delayed binding and Delete reclaim; it must not recursively use this replicated driver.

Replica count, application mode and original claim identity are creation inputs. Editing the PVC or class later does not migrate an existing generation. Unknown StorageClass parameters, caller topology constraints, clones, filesystem types, mount flags and CSI mount-group requests are rejected. The external-provisioner's --extra-create-metadata supplies the required original PVC name and namespace.

Manager and node-controller options

Both roles use /manager from the manager image.

Option Default Meaning
--role manager manager; node-controller is retained only for legacy compatibility and is no longer generated.
--replica-runtime shared New generation runtime, shared or explicit legacy pod; existing activated generations keep their persisted mode.
--node-id Empty Required assigned node for a node-controller.
--endpoint unix:///csi/csi.sock Manager CSI socket.
--metrics-listen :9906 Metrics and health HTTP listener.
--kubeconfig Empty In-cluster credentials by default; optional external file.
--namespace kube-system ReplicatedVolume and generated-resource namespace.
--local-namespace kube-system Existing local-CSI namespace.
--local-selector app=tak-os-local-csi Local-CSI Pod identity selector.
--local-service-account tak-os-local-csi Required local-CSI service-account identity.
--worker-image Empty, required Replica image for generated workers.
--controller-image Empty Deprecated compatibility argument; no node-controller Pods are generated.
--controller-service-account tak-os-replicated-csi-manager Original account used to verify ownership before retiring legacy controller Pods.
--backing-class tak-os-local Default local backing StorageClass.

Manager and each node-controller role elect their background actor using a Kubernetes Lease. Lease timing is 20-second duration, 12-second renewal deadline and 3-second retry. Losing leadership cancels the actor and exits the process; Lease ownership is not a data-plane serving fence.

CSI frontend and mount-owner options

Both roles use /node from the node image. Omitting --mount-service makes the process own its FUSE mounts; setting it creates a forwarding frontend.

Option Default Meaning
--endpoint unix:///csi/csi.sock Absolute Unix CSI/RPC listener.
--node-id NODE_NAME environment variable Required Kubernetes node name.
--namespace kube-system Trusted namespace for volume credentials.
--mount-root /var/lib/kubelet Allowed root for stage/publish paths.
--metrics-listen :9906 Metrics and health listener.
--mount-service Empty Absolute unix:///… endpoint of a separate mount owner.

For a split deployment, give the mount owner its own Unix socket, configure the frontend to reach that socket, and expose distinct metrics ports when both share a Pod network namespace. Preserve shared sockets, mount namespaces and kubelet mount propagation across the two processes. Scratch images contain no shell or mount helper; use explicit executable commands, not shell wrappers.

Shared NODE replica host

Add a separate /node --role=replica-host container to the existing NODE Pod, retaining the CSI frontend, FUSE owner and registrar. The source integration patch documents the mounts, downward-API Pod identity, resource profile and additive RBAC. It is a fragment for review in the external deployment repository, not a standalone install or authorization to apply it.

Option Default Meaning
--role node Use replica-host for the shared backend process.
--local-csi-endpoint Empty, required for host Explicit absolute Unix socket to local CSI.
--replica-state-root /var/lib/tak-os/replicated-csi/state Persistent, private hostPath for mount identity and initialization history.
--replica-mount-root /var/lib/tak-os/replicated-csi/backing Same opt-in consumer root configured in local CSI.
--max-workers 128 Admission limit per node; valid range 1–1024.
--metrics-listen :9906 Set a distinct address such as :9908 in a shared Pod.

Supply NODE_NAME, POD_NAME and POD_UID using the downward API, namespace and cluster domain consistently. Label the Pod replicated.csi.tak-os.org/replica-host: 'true'. Host readiness means the supervisor is running; it does not depend on every worker having quorum.

Local CSI must run the consumer-publication extension and enable --consumer-mount-root=/var/lib/tak-os/replicated-csi/backing. Its container must mount that host directory with Bidirectional propagation; the replica host uses HostToContainer. The host calls the original CSI NodePublish/NodeUnpublish APIs for already-bound PVCs; it does not create local volumes directly. Consumer ownership blocks competing mounts and deletion until release, even after a crash. The host checks its own mount namespace before opening a worker; failed mount propagation leaves it unavailable instead of initializing the directory beneath the mount. Keep this configuration available until all consumer publications are released.

The manager needs EndpointSlice GET and backing-PVC UPDATE access in addition to existing allocation permissions; the source patch includes additive roles. The NODE account needs the narrowly scoped reads/updates in the source patch. Kubernetes Secret GET remains whole-object access; only the leaf, CA certificate and independent bearer/overlap values are written to host-private credential generations, never the CA signing key.

Each worker gets dynamically assigned HTTP/Raft/metrics ports and a separate Prometheus registry; selectorless per-replica Services/EndpointSlices retain the original ports and DNS names. Permit Pod-to-Pod traffic to those backend ports in NetworkPolicy, rather than assuming only 9900/9901/9906 on the NODE Pod.

Replica configuration

/replica --config=/config/worker.json reads a generated JSON configuration. It binds volume, generation, member id, backing root, peer identities, HTTP/Raft listeners and credential-file paths. singleNodeWriter binds the RWO mode; join and advertised peer identity are managed during replacement. The insecureLoopback field is not a supported deployment configuration.

maxJournalBytes defaults to 256 MiB and cannot be configured below 16 MiB. It controls journal pressure/compaction admission, not a lifetime write allowance, PVC quota or disk-space reserve. Worker metrics default to 0.0.0.0:9906.

DNS, networking and clocks

REPLICATED_CSI_CLUSTER_DOMAIN defaults to cluster.local. Set the real suffix consistently on manager, node and mount-owner processes; it propagates into generated roles. Explicit invalid/empty values fail startup. Service dials use absolute DNS names while preserving the original authenticated TLS origin. Changing the suffix requires a quiescent role restart and remount.

Generated worker port Purpose
TCP 9900 Authenticated Raft peer transport.
HTTPS 9901 File/control, coordinator discovery and checkpoint/rebuild operations.
HTTP 9906 Prometheus, /healthz and /readyz; restrict monitoring access.

Allow DNS, necessary API access, client-to-worker and peer-to-peer traffic. Synchronize node clocks for retry expiry, handle leases and RWO ownership. Metrics/health ports are diagnostics, not authenticated file-service endpoints.

Resources and credentials

The source staging profile sets generated worker requests to 50m CPU/64 MiB and limits to 2 CPU/512 MiB, with GOMEMLIMIT=384MiB. Node controllers request 20m/64 MiB and limit 1 CPU/256 MiB, with GOMEMLIMIT=192MiB. These are deployment settings, not capacity or performance guarantees. Inspect the actual rendered manifests and tune them for the working set without removing protocol bounds.

Worker projected credentials exclude the volume CA signing key. The trusted mount owner obtains client credentials from <volumeID>-auth in its configured namespace. Do not expose Secret contents in logs, support bundles or examples. Normal renewal retains the original CA; see security.

Version identification

Images for release 4.1.0 use the role tags :4.1.0 after publication. Floating build inputs can change the result of a later rebuild of that tag; record the running image identity and /licenses/buildinfo.txt when investigating a deployment. The current manager/node GetPluginInfo vendor-version string remains 3.2.0; it does not identify the 4.1.0 OCI release. Use image/build metadata instead.