Summary
Let a container be created with its own dedicated disk volume, isolated from
other containers — instead of every box carving its disk quota out of the one
shared host storage pool. A box that needs guaranteed, non-contended storage
(a database, a build cache, a data-heavy workload) should be able to sit on a
disk that isn't shared with, or starved by, its neighbours.
Today
Boxes get a disk quota (--disk 50GB), but that quota is a limit within the
shared backend storage pool (default, driver dir/zfs). All boxes on a
host draw from the same pool: they share the underlying device's IOPS and free
space, and a noisy or runaway neighbour can contend for both. There's no way to
say "give this box its own volume/disk."
Ask
A create-time option to place a container's disk on a dedicated volume the
box doesn't share:
- CLI/proto: e.g.
containarium create <box> --dedicated-disk[=<size>]
(and the matching create-request field + MCP create_container arg), so the
choice is first-class and proto-first like the rest of the create surface.
- Backend: provision an isolated volume for the box rather than a quota in
the shared pool. Options to weigh in design:
- a dedicated Incus storage volume (or a per-box pool) so space + IOPS are
the box's own;
- a loopback/dataset-backed volume attached as the box's disk;
- on the K8s runtime, a dedicated PVC / StorageClass (partly there already
via storage_class, but not "isolated from other boxes" as a contract).
- Isolation contract: the box's disk usage can't be starved by neighbours,
and (ideally) its IO is not co-mingled on the same device where the
deployment provides separate devices.
Why
- Noisy-neighbour isolation for storage (we already isolate CPU/mem and
network; disk is the gap).
- Predictable capacity — a data box's space isn't eaten by unrelated boxes
filling the shared pool (cf. the disk-full incidents we've hit).
- Cleaner teardown / portability of a box's data volume.
Notes
- Relates to the existing
storage_class field (K8s) — that selects a class but
doesn't guarantee non-shared isolation on the LXC backend.
- Design should decide the LXC mechanism (dedicated Incus volume vs per-box
pool vs dataset) and whether size is required or optional (default = today's
shared-pool quota when the flag is absent, so this is purely additive).
Summary
Let a container be created with its own dedicated disk volume, isolated from
other containers — instead of every box carving its disk quota out of the one
shared host storage pool. A box that needs guaranteed, non-contended storage
(a database, a build cache, a data-heavy workload) should be able to sit on a
disk that isn't shared with, or starved by, its neighbours.
Today
Boxes get a disk quota (
--disk 50GB), but that quota is a limit within theshared backend storage pool (
default, driverdir/zfs). All boxes on ahost draw from the same pool: they share the underlying device's IOPS and free
space, and a noisy or runaway neighbour can contend for both. There's no way to
say "give this box its own volume/disk."
Ask
A create-time option to place a container's disk on a dedicated volume the
box doesn't share:
containarium create <box> --dedicated-disk[=<size>](and the matching create-request field + MCP
create_containerarg), so thechoice is first-class and proto-first like the rest of the create surface.
the shared pool. Options to weigh in design:
the box's own;
via
storage_class, but not "isolated from other boxes" as a contract).and (ideally) its IO is not co-mingled on the same device where the
deployment provides separate devices.
Why
network; disk is the gap).
filling the shared pool (cf. the disk-full incidents we've hit).
Notes
storage_classfield (K8s) — that selects a class butdoesn't guarantee non-shared isolation on the LXC backend.
pool vs dataset) and whether size is required or optional (default = today's
shared-pool quota when the flag is absent, so this is purely additive).