Manage QEMU driver cgroups by monolithic libvirtd

We execute monolithic libvirtd in a transient scope, but when the
service unit for it gets restarted by systemd, the qemu driver
controllers' cgroups get rewritten for the transient run-rXXX scopes.

That deactivates the QEMU driver in libvirt as the expected controllers
are no longer there.

Workaround that for newly created Nova instances by delegating the QEMU
cgroup controllers management to libvirt, so that systemd no longer
"sees" its cgroups w/o a proper machined integration in place
(which is when host VMs register in it).

NOTE: Tripleo cannot use systemd-machined for cgrups management
because of upgrade blockers (all VMs not registered in machined get
killed during upgrade). At some point we really need to just
adopt systemd-machined so we can stop fighting against systemd, but
that requires an upgrade process to be written, which is out of scope
of today Tripleo project.

Related: rhbz#2228376
Related: rhbz#2233089

Signed-off-by: Bogdan Dobrelya <bdobreli@redhat.com>
Change-Id: I1320c6dd01376b0f821f223b6c30a97456b16085
This commit is contained in:
Bogdan Dobrelya 2023-10-03 17:03:37 +02:00
parent d17436ba6c
commit a10f558f90
2 changed files with 16 additions and 1 deletions

@ -521,7 +521,7 @@ outputs:
if [[ -f /usr/lib/systemd/kvm-setup ]]; then
/usr/lib/systemd/kvm-setup
fi
exec systemd-run --scope --slice=system /usr/sbin/libvirtd LIBVIRTD_ARGS
exec systemd-run --scope --slice=system --property=Delegate="cpu cpuacct memory blkio devices" /usr/sbin/libvirtd LIBVIRTD_ARGS
params:
LIBVIRTD_ARGS:
if:

@ -0,0 +1,15 @@
---
upgrade:
- |
To re-enable the QEMU driver features lost after the previous minor update,
such as `virsh cpu-stats`, or volume attachements for existing Nova Compute
instances, those need to be live-migrated (or cold-migrated) to either of
the newly updated Nova Compute hosts.
fixes:
- |
Tripleo Nova Libvirt service unit no longer manages the QEMU driver cgroups
by systemd, but delagates that to libvirt. In a result, newly created Nova
Compute instances no longer experience problems with volume attachements,
or executing virsh commands in the libvirt podman container, after the
libvirt service restarts multiple times.