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
(cherry picked from commit 5a86281cac9ce33f2437d3a3b23f382a3a7360bf)
This commit is contained in:
Bogdan Dobrelya 2023-10-03 17:03:37 +02:00
parent b28285cc5f
commit 3403bfb06f
2 changed files with 16 additions and 1 deletions

@ -661,7 +661,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.