Commit Graph

19746 Commits

Author SHA1 Message Date
Alex Lyn
89509fd3ea runtime-rs: Gate block emptyDir discard by hypervisor capability
Only enable discard for block-plain emptyDir volumes when the
hypervisor reports block device discard support.

The resource manager now queries hypervisor capabilities once and
passes block discard support through VolumeContext. Block emptyDir
volume setup uses that capability to decide whether to add the
discard mount option and related mount metadata, avoiding unsupported
discard mounts on hypervisors that cannot expose discard/unmap to the
guest.

It will correctly adjust the related codes with the new support.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
4f28b68af0 runtime-rs: Propagate and map discard as Dragonball sparse
Map BlockConfigModern.discard_unmap to Dragonball block device
sparse support when adding modern block devices.
This lets runtime-rs request guest-visible discard support through
the Dragonball block device configuration while leaving vhost-user
block devices disabled.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
95e4703e84 dragonball: Add sparse block discard support
Add a sparse flag to Dragonball block device configuration and use
it to expose virtio-blk discard support to the guest. Handle discard
requests by validating the requested range and punching holes in
sparse local file backends, returning an I/O error instead of
panicking on discard failures.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
a886f99a00 runtime-rs: Map and propagate block discard to CH sparse disks
Add the Cloud Hypervisor disk sparse option to the local DiskConfig
model and keep its default aligned with upstream. Map
BlockConfigModern.discard_unmap to DiskConfig.sparse so block devices
that request discard/unmap explicitly expose sparse discard support
through the CH API.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
f1b772eef0 runtime-rs: Add Discard Capability in each vmm driver
Add the BlockDeviceDiscardSupport cap in the qemu/clh/dragonball
drivers.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
4951b14611 kata-types: Add support for capability of block discard/unmap
To tells if the hypervisor exposes block discard/unmap support to
the guest, we introduce a new capability of discard/unmap named
`BlockDeviceDiscardSupport` in the capability set.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
569cbd21ca runtime-rs: Drop legacy Block device path fully
Remove the remaining legacy Block device implementation now that
BlockModern covers all block paths, finishing the migration started
by the QEMU and DeviceManager legacy-path drops.

Delete virtio_blk.rs (BlockConfig, BlockDevice and its Device impl)
and stop exporting it from driver/mod.rs. Drop the BlockCfg variant
from DeviceConfig and the Block variant from DeviceType. Remove the
DeviceConfig::BlockCfg handling and the create_block_device helper
from DeviceManager, and drop DeviceType::Block from the QEMU
hotunplug unsupported list.

No new behavior; pure removal of the dead legacy path.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
eaf1d0de28 runtime-rs: Drop legacy Block device path from Device Manager
Remove DeviceType::Block so BlockModern is the single code path,
completing the BlockConfig -> BlockConfigModern migration at the
Device Manager layer.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
ed571d3ea2 runtime-rs: Drop legacy Block device path from Qemu
The preceding "Use BlockConfigModern for ..." series converted every
block-device producer in the Qemu path to emit BlockModern. The Qemu
inner module still held the matching legacy Block consumer code across
all three lifecycle ops (coldplug/hotplug/hotunplug), now unreachable.

Remove it so BlockModern is the single code path, completing the
BlockConfig -> BlockConfigModern migration at the Qemu layer.
The hotunplug arm for Block now returns an explicit "unsupported"
error instead of a stale QMP detach. The new added Block(_) is just a
place holder and it will be removed in a follow-up commit.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
5ca05ad908 runtime-rs: Use BlockConfigModern for firecracker
Migrate the block config from BlockConfig to BlockConfigModern,
routing it through DeviceConfig::BlockCfgModern for firecacker.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
81e634001b runtime-rs: Use BlockConfigModern for agent-ctl vm_ops
Migrate the block config from BlockConfig to BlockConfigModern,
routing it through DeviceConfig::BlockCfgModern for agent-ctl vm_ops.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
c70f824335 runtime-rs: Use BlockConfigModern for erofs rootfs
Migrate the erofs rootfs path from BlockConfig to BlockConfigModern,
routing its block-device attachment through BlockCfgModern.
This covers the rw layer, single-device raw, multi-device VMDK, and
GPT-partitioned VMDK attachment points in erofs_rootfs.rs.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
8153fd44cb runtime-rs: Use BlockConfigModern for swap task
Migrate the block config from BlockConfig to BlockConfigModern,
routing it through DeviceConfig::BlockCfgModern for swap task.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
ee64539976 runtime-rs: Use BlockConfigModern for block rootfs
Migrate the block config from BlockConfig to BlockConfigModern,
routing it through DeviceConfig::BlockCfgModern for block rootfs.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
71b66d1988 runtime-rs: Use BlockConfigModern for block devices in handler_devices
Migrate the host block-device (major/minor) passthrough path in
ResourceManagerInner from BlockConfig to BlockConfigModern, routing it
through DeviceConfig::BlockCfgModern. This continues the BlockModern
migration to cover block-mode devices carried in the OCI spec.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
578d403409 runtime-rs: Use BlockConfigModern for InitData
Switch the InitData resource path from BlockConfig to BlockConfigModern
so the InitData is handled through the modern block device pipeline,
consistent with the recent BlockModern migration for block volumes.

This changes ResourceConfig::InitData to wrap BlockConfigModern,
routes its handling through DeviceConfig::BlockCfgModern, and updates
its related helper function in virt_container to build a
BlockConfigModern.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
3537b18768 runtime-rs: Use BlockConfigModern for VM rootfs
Switch the VmRootfs resource path from BlockConfig to BlockConfigModern
so the VM rootfs is handled through the modern block device pipeline,
consistent with the recent BlockModern migration for block volumes.

This changes ResourceConfig::VmRootfs to wrap BlockConfigModern, routes
its handling through DeviceConfig::BlockCfgModern, and updates
prepare_rootfs_config() in virt_container to build a BlockConfigModern.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
0544de8eb4 runtime-rs: Add BlockModern hotplug support in QEMU
Introduce a new field of serial_override in the BlockModern config.
Add a DeviceType::BlockModern branch to the QEMU QMP hotplug path,
mirroring the existing Block semantics: skip block devices that
represent the initrd, and dispatch to nvdimm or blk/ccw/scsi
according to driver_option. Snapshot the config parameters under
lock and run the asynchronous hotplug without holding it to avoid
awaiting across the lock.
Pass the real block format and, when enabled, the first independent
iothread (indep_iothread_0) to hotplug_block_device instead of the
default format and None, and return DeviceType::BlockModern so the
hotplugged device is tracked.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
1a3c7eb157 tests: Re-enable block-plain emptyDir storage for clh and dragonball
Re-enable block-plain emptyDir storage for clh and dragonball.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
37739bcc69 runtime-rs: Use bind mounts for direct volume targets
Treat SPDK and VFIO direct volumes as a two-step mount. The agent
storage entry mounts the device inside the guest with block storage
options, while the OCI mount bind-mounts that guest path into the
container.

Filter bind flags from storage options, preserve direct-volume
mountInfo options when present, and add ro when the volume is
read-only.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
22f2d57e4f runtime-rs: Move block volumes to BlockModern
Build regular block volumes with BlockConfigModern and submit them
through DeviceConfig::BlockCfgModern. Preserve the existing block
device attributes while also recording the host path required by the
modern block device model.

Update block volume helper call sites with the default option slice
so this change remains buildable with the modern helper signature.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
346b9e38e2 runtime-rs: Add BlockModern support in Cloud Hypervisor
Switch the Cloud Hypervisor device handling path from the legacy
Block device variant to BlockModern. Keep the block device behind
its shared mutex while snapshotting the configuration for the
hotplug request, and persist the PCI path assigned by Cloud
Hypervisor back into the shared device state.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
f2df09d738 runtime-rs: Refactor mount options handling and add utility functions
Introduce build_bind_mount_options() to construct OCI mount options for
container-side bind mount, preferring volume_options over OCI options
and ensuring a bind/rbind flag is present.
And addfilter_block_storage_options() to strip bind/rbind flags from
Storage.options, preventing ENOTDIR when the agent mounts a block
device to a filesystem inside the guest.
And then Extend handle_block_volume() with a volume_options parameter
and replace hardcoded ro/empty options with the new filter+ro logic,
narrowing the function to a BlockModern-only path by removing the
DeviceType::Block branch.
Fix generate_shared_path to always create under rw/ since ro/
is a read-only bind mount of rw/ and direct creation fails with ReadOnly
FS. Switch the OCI Mount type from fs_type to KATA_MOUNT_BIND_TYPE because
the mount source is a directory (guest_path), not a block device.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
28e2318a35 runtime-rs: Consolidate virtio-blk shared types into BlockModern module
Move the block device type definitions shared between BlockDevice and
BlockDeviceModern — VIRTIO_BLOCK_{PCI,MMIO,CCW}/VIRTIO_PMEM constants,
KATA_*_DEV_TYPE aliases, and the BlockDeviceAio / BlockDeviceFormat
enums — from virtio_blk.rs into virtio_blk_modern.rs, so they live
alongside the BlockModern handler that will replace the legacy
BlockDevice.

Add a `format: BlockDeviceFormat` field to BlockConfigModern to match
the legacy BlockConfig. Update mod.rs re-exports accordingly.

No behavior change; pure relocation plus the new field.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
525b68e332 runtime-rs: Add BlockModern support in Dragonball VMM
Extend add_block_device with num_queues and queue_size parameters
to support multi-queue virtio-blk configuration, and add BlockModern
hotplug/hotunplug handler that extracts config from
Arc<Mutex<BlockDeviceModern>>, passes the new parameters to
add_block_device, and updates pci_path on successful hotplug.

And we will use BlockDeviceModern to handle block device instead of
Legacy BlockDevice.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Alex Lyn
65d580c2b0 runtime-rs: Add BlockModern arm in DeviceManager
Add BlockModern handling in DeviceManager so that device index is
correctly released both in get_device_info and in the error path.

Signed-off-by: Alex Lyn <alex.lyn@antgroup.com>
2026-07-17 10:36:44 +02:00
Hyounggyu Choi
7da2ad712a Merge pull request #13379 from fidencio/fix/kata-monitor-runtime-endpoint-volume
kata-deploy: fix kata-monitor CRI socket mount for non-vanilla clusters
2026-07-17 09:14:29 +02:00
Fabiano Fidêncio
1a17a24660 Merge pull request #13391 from fitzthum/coco-bump-0220
Update Trustee and Guest Components for release
2026-07-17 09:08:59 +02:00
Fabiano Fidêncio
6cb01cfca2 Merge pull request #13324 from manuelh-dev/mahuber/block-rootfs-scsi
runtime-rs: support scsi container block rootfs
2026-07-17 06:58:32 +02:00
Fabiano Fidêncio
17769fd4de Merge pull request #13347 from manuelh-dev/mahuber/erofs-deployment-validation
docs/kata-deploy: improvements to erofs snapshotter documentation and deployment validation
2026-07-17 06:57:29 +02:00
Fabiano Fidêncio
60d1a3497a Merge pull request #13390 from fidencio/topic/increase-compression-for-tarballs
packaging: increase default zstd level for kata tarballs
2026-07-16 23:34:12 +02:00
Fabiano Fidêncio
850c3d874e kata-deploy: align kata-monitor log level with chart debug flag
Resolve kata-monitor log level from monitor.logLevel, the chart-wide
logLevel, and debug:true, matching the precedence used by kata-deploy.

Fixes #13382

Signed-off-by: Fabiano Fidêncio <ffidencio@nvidia.com>
Assisted-by: Cursor <cursoragent@cursor.com>
2026-07-16 22:20:23 +02:00
Fabiano Fidêncio
409b5263ff kata-deploy: fix kata-monitor CRI socket mount for non-vanilla clusters
Derive the runtime endpoint from k8sDistribution and mount the matching
host socket directory so kata-monitor can reach containerd on
non-vanilla k8s deployments.

Fixes #13378

Signed-off-by: Fabiano Fidêncio <ffidencio@nvidia.com>
Assisted-by: Cursor <cursoragent@cursor.com>
2026-07-16 22:20:23 +02:00
Fabiano Fidêncio
c3c390422d Merge pull request #13385 from fidencio/topic/consolidate-docs-prs
docs: Everything needed for 4.0.0 release
2026-07-16 21:05:31 +02:00
Tobin Feldman-Fitzthum
df1d061eea versions: update Trustee for CoCo v0.22.0
We have bumped Trustee recently for the Helm chart work, but there are a
few new features that would be good to land for Kata 4.0 and CoCo
v0.22.0.

Before too long, we will start bumping Trustee to a particular version
rather than to a commit hash.

Signed-off-by: Tobin Feldman-Fitzthum <tfeldmanfitz@nvidia.com>
2026-07-16 11:49:32 -07:00
Tobin Feldman-Fitzthum
61f821c080 versions: bump guest-components for CoCo v0.22.0
Bump guest-components to pick up some new features for Kata 4.0 and CoCo
v0.22.0.

Signed-off-by: Tobin Feldman-Fitzthum <tfeldmanfitz@nvidia.com>
2026-07-16 11:46:32 -07:00
Fabiano Fidêncio
149d3543e2 packaging: increase default zstd level for kata tarballs
Use zstd level 10 (via kata_tar_zstd) when creating static build
tarballs so CI artifacts stay under GitHub's 2GB limit without
paying the build-time cost of maximum compression.

Signed-off-by: Fabiano Fidêncio <ffidencio@nvidia.com>
Assisted-by: Cursor <cursoragent@cursor.com>
2026-07-16 20:13:48 +02:00
Manuel Huber
501dae7c68 kata-deploy: warn on guest-pull timeout
Reuse the kubelet runtimeRequestTimeout validation for guest-pull
configurations.

Guest pull can also keep kubelet waiting during CreateContainer. Warn
when kata-deploy can see that runtimeRequestTimeout is below the same
suggested timeout used for EROFS layer conversion.

Detect both the regular guest-pull mapping and the experimental force
guest-pull configuration so nodes get the warning for either path.

Signed-off-by: Manuel Huber <manuelh@nvidia.com>
Assisted-by: OpenAI <support@openai.com>
2026-07-16 17:53:36 +00:00
Manuel Huber
5b8d089e52 kata-deploy: validate erofs prerequisites
Extend the kata-deploy host-check stage with EROFS-specific
prerequisite validation.

Check that containerd supports the EROFS snapshotter, required
kernel features are available either as loaded modules or built-in
kernel configuration, and the host erofs-utils version satisfies the
minimum required by kata-deploy's configured mkfs options. Also warn
when kubelet runtimeRequestTimeout appears too low for EROFS layer
conversion, which can run during CreateContainer.

Read kubelet runtimeRequestTimeout from kubelet /configz through the
apiserver node proxy, and add the corresponding RBAC permission. Keep
fs-verity validation warning-only because user drop-ins may override
kata-deploy's default enable_fsverity setting and kata-deploy does
not yet validate the backing filesystem's fs-verity feature.

Signed-off-by: Manuel Huber <manuelh@nvidia.com>
Assisted-by: OpenAI <support@openai.com>
2026-07-16 17:53:36 +00:00
Manuel Huber
bc5ae6437d docs: document erofs deployment requirements
Document operational requirements for using the EROFS snapshotter
with Kata Containers.

Call out that EROFS layer conversion can happen during
CreateContainer, not only during image pull, so kubelet
runtimeRequestTimeout may need to be increased for large images.
Also document the kernel modules needed for EROFS and dm-verity,
the erofs-utils version required by the configured mkfs options,
and the distinction between host-side fs-verity and guest-visible
dm-verity.

Signed-off-by: Manuel Huber <manuelh@nvidia.com>
Assisted-by: OpenAI <support@openai.com>
2026-07-16 17:53:36 +00:00
Manuel Huber
de8cb3e037 runtime-rs: support scsi container block rootfs
Use the hotplug-returned SCSI address as Storage.source when a
container rootfs is backed by a block device.

Signed-off-by: Manuel Huber <manuelh@nvidia.com>
2026-07-16 17:26:09 +00:00
Xuewei Niu
af212219b8 Merge pull request #13373 from justxuewei/dragonball-crates-reorg
dragonball: Group dbs_* crates under crates/ and remove stray out file
2026-07-16 22:04:58 +08:00
Fabiano Fidêncio
e06e13b5a0 docs: Expand Quick Start Guide for new users
Flesh out the quick start with the content from #13220 while keeping
mkdocs-material admonitions, definition lists, and links to installation.md.
Replace the manual Next steps nav block with in-prose cross-references, use
absolute GitHub URLs for out-of-tree source links, and update the top-level
README packaging and architecture links.

Fixes: kata-containers#12999

Signed-off-by: Fabiano Fidêncio <ffidencio@nvidia.com>
Signed-off-by: LandonTClipp <lclipp@coreweave.com>
Assisted-by: Cursor <cursoragent@cursor.com>
2026-07-16 13:43:33 +02:00
Fabiano Fidêncio
59b5f73046 kata-deploy: Make runtime-rs the default runtime
Switch the per-architecture default shim from the Go runtime ("qemu") to the
Rust runtime ("qemu-runtime-rs") wherever a runtime-rs build exists, and
align CI/test fallbacks with the new default.

Document the defaultShim values and Go runtime deprecation in the Helm and
config migration guides using mkdocs admonitions.

Fixes: kata-containers#9546

Signed-off-by: Fabiano Fidêncio <ffidencio@nvidia.com>
Assisted-by: Cursor <cursoragent@cursor.com>
2026-07-16 13:43:33 +02:00
Fabiano Fidêncio
c086a81a3d docs: Add runtime-rs config migration guide
Catalogue the configuration differences between the Go runtime and
runtime-rs for the QEMU hypervisor, using mkdocs admonitions and absolute
GitHub URLs for out-of-tree source links.

Address review feedback from #13236: remove the outdated msize_9p and
Summary sections, clarify that both runtimes use enable_debug while
log_level is a runtime-rs addition, and rename the architecture 4.0 page
so mkdocs does not treat it as a section index.

Co-authored-by: Fabiano Fidêncio <ffidencio@nvidia.com>
Signed-off-by: LandonTClipp <lclipp@coreweave.com>
Signed-off-by: Fabiano Fidêncio <ffidencio@nvidia.com>
Assisted-by: Cursor <cursoragent@cursor.com>
2026-07-16 13:43:33 +02:00
Fabiano Fidêncio
6267b86c7b docs: Address installation guide review feedback from #13238
Remove the RuntimeClass table in favour of prose, map `uname -m` to the
release tarball architecture names (amd64, arm64, s390x, ppc64le), mark the
Go runtime as deprecated, and point README links at installation.md.

Signed-off-by: Fabiano Fidêncio <ffidencio@nvidia.com>
Signed-off-by: LandonTClipp <lclipp@coreweave.com>
Assisted-by: Cursor <cursoragent@cursor.com>
2026-07-16 13:43:33 +02:00
Xuewei Niu
5bf558c718 dragonball: Remove accidentally-committed out file
src/dragonball/out is an 893 KB `cargo metadata` JSON dump that was swept
into the tree by accident in commit 1d2d2cc3d ("ci: Remove duplicated
rust-vmm dependencies"), whose only intended change was a one-line edit to
.github/dependabot.yml. Nothing references the file -- no script, CI job,
or Makefile -- so it is pure build cruft. Remove it.

Signed-off-by: Xuewei Niu <niuxuewei.nxw@antgroup.com>
2026-07-16 16:08:32 +08:00
Xuewei Niu
57f416134c dragonball: Group dbs_* crates under crates/
At src/dragonball/, the dragonball crate's own module tree (src/) sat as a
sibling of whole separate crates (dbs_acpi/, dbs_pci/, ...). That level
mixed one crate's guts with other crates -- neither cleanly one crate nor
a clean set of crates. Move the dbs_* under src/dragonball/crates/ so the
top level is the dragonball crate plus a crates/ folder of its libraries,
matching the layout src/runtime-rs already uses.

The dbs_* were imported ~2 years ago from the standalone dragonball-sandbox
repo and kept that repo's flat layout verbatim. They are now private to
kata (unpublished, versions frozen) -- plain internal workspace members --
so no external consumers are affected and the "independently published
building blocks" rationale for the flat layout no longer holds. Pure
layout change; no code or build behavior changes.

Signed-off-by: Xuewei Niu <niuxuewei.nxw@antgroup.com>
2026-07-16 16:08:32 +08:00
Fupan Li
7e373f3eae Merge pull request #13238 from LandonTClipp/install-guide
docs: Expand installation guide with prereqs and methods
2026-07-16 10:40:02 +08:00
manuelh-dev
fe5071ccd2 Merge pull request #12971 from burgerdev/pathrs
agent: constrain copy_file to shared directory
2026-07-15 17:36:48 -07:00