GitHub user remibergsma opened a pull request:
https://github.com/apache/cloudstack/pull/731
CLOUDSTACK-8443: Support CentOS 7 as KVM hypervisor
This adds support for CentOS 7 as a KVM hypervisor. As discussed in the
Jira issue, the root cause of the issue was the `cloudstack-setup-agent` script
that added this line to `/etc/libvirt/qemu.conf`:
`cgroup_controllers=["cpu"]`
On CentOS 6 this 'works', but since by default no cgroups are mounted, this
setting is ignored by `libvirtd`. On CentOS 7 is does not work, because the
`cpu` and `cpuacct` are 'co-mounted'. This simpy means you cannot use one
without the order. The config line above instructs `libvirtd` to only use the
`cpu` cgroup, which it can't.
There was code added to make sure the `cpu` cgroup was not co-mounted. It
did this with a shell script, but after a reboot it was gone. It wasn't
reliable and not even a solution at all. I went ahead and removed the code,
because the co-mounted cgroups work fine. The real issue was the config line we
put in `/etc/libvirt/qemu.conf` so much better to fix that instead.
The default for `libvirtd` is to use only cgroups that are mounted. When
you remove the 'cgroup_controllers' line, the default kicks in. According to
the `qemu.conf` file, the default is:
`cgroup_controllers = ["cpu", "devices", "memory", "blkio", "cpuacct",
"net_cls"]`
Then again, if it's not mounted, it's not used. So, that's a nice way to
control it.
This works just fine for both RHEL/CentOS 6 and RHEL/CentOS 7.
Along the debugging, I came across some small issues here and there which I
also fixed in this PR.
If you test this, be sure to build RPMs from this branch and install those
on the KVM hypervisor.
At Schuberg Philis we run KVM hypervisors on CentOS 7 for months with these
fixes. Now I took the time to fix the issues in CloudStack, rather than work
around them.
@bhaisaab @karuturi could you please review this? Thanks!
Please note:
The next step is to fix CLOUDSTACK-8625 (Systemd profile for KVM Agent) as
currently a sysvinit script is still used. Although it works, we do not have
any systemd benefits. As it is a separate issue, I'll try to address it in a
separate PR.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/remibergsma/cloudstack centos7-kvm
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/cloudstack/pull/731.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #731
----
commit e8fcaa8736d4f870d28fdb8617402c78b0fe0a0a
Author: Remi Bergsma <[email protected]>
Date: 2015-08-20T20:31:55Z
CLOUDSTACK-8443: no need to specify cgroup_controllers
This setting works on CentOS 6 / RHEL 6 but does nothing, as
"cpu" cgroup is not mounted. On CentOS 7 / RHEL 7 systemd does
mount cgroups and "cpu" is co-mounted with "cpuacc". Hence, if
we specify "cpu" then this results in an error because it can
only use them both, or none.
By removing the setting, we rely on the default of qemu, which
is:
cgroup_controllers = ["cpu", "devices", "memory", "blkio", "cpuacct",
"net_cls"]
Only if they are really mounted, they will be used. So, this will
work on both version 6 and 7.
commit 3ec82a598c6aed0f72fc15b35de32575168e40ab
Author: Remi Bergsma <[email protected]>
Date: 2015-08-20T20:51:53Z
CLOUDSTACK-8443: remove setting up cgroup_controllers
commit 8196cc82542b9b2038ae3c5db88358249b3ce5ad
Author: Remi Bergsma <[email protected]>
Date: 2015-08-20T20:53:31Z
CLOUDSTACK-8443: don't try to fix co-mounted cgroups
This didn't work well, as after a reboot you'd still have qemu
throwing errors. We'll make sure we can handle the co-mounted
cgroups.
commit 7d7778faa79823342c0468318ec26d8e3df84a9f
Author: Remi Bergsma <[email protected]>
Date: 2015-08-22T20:54:01Z
CLOUDSTACK-8443: display the right hypervisor type
commit 313988c76a9524159b8a12a569a818f0b715c14e
Author: Remi Bergsma <[email protected]>
Date: 2015-08-23T10:44:34Z
CLOUDSTACK-8443: mention the correct logfile
commit 3696fd37d34a3db962c6785530aefb3574dd874f
Author: Remi Bergsma <[email protected]>
Date: 2015-08-22T20:30:46Z
CLOUDSTACK-8443: detect CentOS 7.x as RHEL 7 alike
----
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---