libvirt
is an openshift-ansible
provider that uses libvirt
to create local Fedora VMs that are provisioned exactly the same way that cloud VMs would be provisioned.
This makes libvirt
useful to develop, test and debug Openshift and openshift-ansible locally on the developer’s workstation before going to the cloud.
- Install dnsmasq
- Install ebtables
- Install qemu
- Install libvirt
- Enable and start the libvirt daemon, e.g:
systemctl enable libvirtd
systemctl start libvirtd
- Grant libvirt access to your user¹
- Check that your
$HOME
is accessible to the qemu user² - Configure dns resolution on the host³
¹ Depending on your distribution, libvirt access may be denied by default or may require a password at each access.
You can test it with the following command:
virsh -c qemu:///system pool-list
If you have access error messages, please read https://libvirt.org/acl.html and https://libvirt.org/aclpolkit.html .
In short, if your libvirt has been compiled with Polkit support (ex: Arch, Fedora 21), you can create /etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules
as follows to grant full access to libvirt to $USER
sudo /bin/sh -c "cat - > /etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules" << EOF
polkit.addRule(function(action, subject) {
if (action.id == "org.libvirt.unix.manage" &&
subject.user == "$USER") {
return polkit.Result.YES;
polkit.log("action=" + action);
polkit.log("subject=" + subject);
}
});
EOF
If your libvirt has not been compiled with Polkit (ex: Ubuntu 14.04.1 LTS), check the permissions on the libvirt unix socket:
ls -l /var/run/libvirt/libvirt-sock
srwxrwx--- 1 root libvirtd 0 févr. 12 16:03 /var/run/libvirt/libvirt-sock
usermod -a -G libvirtd $USER
# $USER needs to logout/login to have the new group be taken into account
(Replace $USER
with your login name)
All the disk drive resources needed by the VMs (Fedora disk image, cloud-init files) are put inside ~/libvirt-storage-pool-openshift/
.
As we’re using the qemu:///system
instance of libvirt, qemu will run with a specific user:group
distinct from your user. It is configured in /etc/libvirt/qemu.conf
. That qemu user must have access to that libvirt storage pool.
If your $HOME
is world readable, everything is fine. If your $HOME
is private, ansible
will fail with an error message like:
error: Cannot access storage file '$HOME/libvirt-storage-pool-openshift/lenaic-master-216d8.qcow2' (as uid:99, gid:78): Permission denied
In order to fix that issue, you have several possibilities:* set libvirt_storage_pool_path
inside playbooks/libvirt/openshift-cluster/launch.yml
and playbooks/libvirt/openshift-cluster/terminate.yml
to a directory: * backed by a filesystem with a lot of free disk space * writable by your user; * accessible by the qemu user.* Grant the qemu user access to the storage pool.
On Arch:
setfacl -m g:kvm:--x ~
- Verify NetworkManager is configured to use dnsmasq:
$ sudo vi /etc/NetworkManager/NetworkManager.conf
[main]
dns=dnsmasq
- Configure dnsmasq to use the Virtual Network router for example.com:
sudo vi /etc/NetworkManager/dnsmasq.d/libvirt_dnsmasq.conf server=/example.com/192.168.55.1
- cd openshift-ansible/
- Try to list all instances (Passing an empty string as the cluster_id argument will result in all libvirt instances being listed)
bin/cluster list libvirt ''
- To create a cluster with one master and two nodes
bin/cluster create libvirt lenaic
- To update the cluster
bin/cluster update libvirt lenaic
- To terminate the cluster
bin/cluster terminate libvirt lenaic