Runner manifests
Render Kubernetes objects from an operator values file:
bun run render.ts values.example.jsonThe image must be a repo@sha256:<digest> reference. Configure node selectors,
taints, host paths, the Server address (an absolute https:// URL), token
lifetimes, and admission identities before applying.
The DaemonSet uses a projected compass-runner ServiceAccount token at
/var/run/secrets/compass/runner/token. Set tokenExpirationSeconds between
600 and 4294967296, and no higher than the matching Server cluster’s
maxTokenLifetime. The namespace, ServiceAccount, and audience (compass-runner)
must match that Server cluster entry. The admission policy uses
admission.controllers and admission.deployers; set them to the controller
identities that create Runner pods and the identity that applies the DaemonSet.
It denies exec, attach, and ephemeral containers on Runner pods except to
admission.breakGlassGroups (default system:masters).
The Server assigns each Runner ID during enrollment. The ServiceAccount has no
RBAC binding. Rollout beyond one node waits for the multi-Runner hub.
KVM device delivery
Section titled “KVM device delivery”- Install an operator-selected, digest-pinned device plugin that advertises the
configured
kvmResourceNamefor/dev/kvm. The plugin injects the device and its cgroup device allowance; no/devhostPath is used. - Set node
/dev/kvmmode to0666. User-namespaced pods see the device as65534:65534, so a hostkvmgroup grant does not work.
Other node prerequisites
Section titled “Other node prerequisites”- Enable Kubernetes user-namespace support.
- Set
kernel.apparmor_restrict_unprivileged_userns=0where the node image enables that restriction. - Stage
seccomp/compass-runner.jsonat the kubelet seccomp root under the configuredseccompProfilePathbefore starting the DaemonSet. It is the profile measured to boot, not yet minimized:clone,clone3,unshareandmountare allowed without argument filters. Narrow it with a remove-one test on a real node before production use. - Provide the session-volume host tree on a filesystem configured for project quotas. Provide the separate runtime host tree for stale-session reaping. Own both by uid and gid 65532: user-namespaced pods mount them idmapped. Not yet verified on a real node.
Metrics: set OTEL_EXPORTER_OTLP_ENDPOINT to push them. The Runner serves no
scrape endpoint.