Skip to content

DL-358

The Compass Runner is containerized as the Kubernetes delivery and lifecycle unit — a DaemonSet pod running rootless with a scoped /dev/kvm device, NEVER privileged: true. The container wins over a host systemd service on four operator properties (atomic digest-named userland, one declarative fleet object, userland isolated from the node, no node mutation on upgrade); the privilege question is the price, and it is a grant-set question, NOT a feasibility one — the composition already boots on KVM as a required CI leg (see the frozen microVM CI/dev enablement record), so a pod adds only confinement (cgroup device controller, seccomp filter, memory cgroup). R7 narrows which listed grants are necessary rather than inert; every outcome is a pod-spec edit this record already specifies. The ruling would reopen only if some component required a Linux capability or privileged: true, which no mechanism in the composition is known to need. /dev/kvm arrives by device plugin, not a hostPath char device: [INFERENCE] the cgroup device controller denies open() without CRI Devices injection, so hostPath functions only under privileged mode — R7 verifies it with a negative control. Guest RAM is POD RAM (cloud-hypervisor’s virtio-fs path requires --memory shared=on, so guest memory is charged to the pod’s memory cgroup), therefore DaemonSet requests must be sized to the node’s aggregate session capacity or the kubelet ranks the Runner first for node-pressure eviction and kills every session on the node. Container restart implies full session teardown — FORCED by the pid namespace (the Runner is pid 1, so its death reaps every VMM descendant), not elected. The image carries the whole KVM userland and guest assets, holding hostPath to exactly two mounts. A custom Localhost seccomp profile is specified because the composition needs unshare/mount/pivot_root that RuntimeDefault restricts — the host-rootless affordance a pod removes. Whether it is avoidable is the one load-bearing open question (OQ-2): if R7 shows RuntimeDefault suffices, the profile and its on-node staging both drop; if not, shipping it is a known bounded cost, not a setback. Cluster choice, node provisioning, and manifest delivery are operator concerns, named and deferred

Status: Active (Matt, 2026-09-12)

Record: ../../platform/compass-runner-containerization/design.md#resolved-decisions