Chapter 7. Provisioning Virtual Machines on a KVM Server (libvirt)
Kernel-based Virtual Machines (KVMs) use an open source virtualization daemon and API called libvirt
running on Red Hat Enterprise Linux. Red Hat Satellite 6 can connect to the libvirt
API on a KVM server, provision hosts on the hypervisor, and control certain virtualization functions. In this chapter, the aim is to add a connection to ACME’s KVM server and provision a virtual machine.
7.1. Defining Requirements for KVM Provisioning
The requirements for KVM provisioning include:
- Synchronized content repositories for Red Hat Enterprise Linux 7. See Synchronizing Red Hat Repositories in the Red Hat Satellite 6 Content Management Guide for more information.
- A Capsule Server managing a network on the KVM server. Ensure no other DHCP services run on this network to avoid conflicts with the Capsule Server. See Chapter 4, Configuring Networking for more information on network service configuration for Capsule Servers.
- An example activation key for host registration. See Section 3.6, “Creating an Activation Key” for more information.
- A Red Hat Enterprise Linux server running KVM virtualization tools. For more information, see the Red Hat Enterprise Linux 7 Virtualization Getting Started Guide.
-
An existing virtual machine image if you aim to use image-based provisioning. Make sure this image exists in a storage pool on the KVM host. The
default
storage pool is usually located in/var/lib/libvirt/images
.
7.2. Configuring the Satellite Server for KVM Connections
Before adding the KVM connection, the Satellite Server requires some configuration to ensure a secure connection. This means creating an SSH key pair for the user that performs the connection, which is the foreman
user.
On the Satellite Server, switch to the foreman
user:
# su foreman -s /bin/bash
Generate the key pair:
$ ssh-keygen
Copy the public key to the KVM server. For example:
$ ssh-copy-id root@kvm.example.com
Use the following command to test the connection to the KVM server:
$ virsh -c qemu+ssh://root@kvm.example.com/system list
When you add the KVM connection in Satellite Server, use the qemu+ssh
protocol and the address to the server. For example, qemu+ssh://root@kvm.example.com/system
.
7.3. Adding a KVM Connection to the Satellite Server
This process adds the KVM connection in the Satellite Server’s compute resources.
For Web UI Users
Navigate to Infrastructure > Compute resource and click New Compute Resource. The UI provides a set of fields for the compute resource:
-
Name - A plain text name for the resource. For example,
ACME's KVM Server
. -
Provider - A field for selecting the compute resource provider. Select
Libvirt
and a new set of fields appear. -
Description - A plain text description for the resource. For example,
KVM server at kvm.example.com
. -
URL - The
libvirt
connection URL to the KVM server. For example,qemu+ssh://root@kvm.example.com/system
. -
Display type - Selects the remote access protocol to use, either
VNC
orSpice
. - Console passwords - Secures console access for new hosts with a randomly generated password.
Click Test Connection to make sure the Satellite Server connects to the KVM server without fault.
The Locations and Organizations tabs are automatically set to your current context. Add additional contexts to these tabs.
Click Submit to save the KVM connection.
For CLI Users
Create the connection with the hammer compute-resource create
command:
# hammer compute-resource create --name "ACME's KVM Server" \ --provider "Libvirt" --description "KVM server at kvm.example.com" \ --url "qemu+ssh://root@kvm.example.com/system" --locations "New York" \ --organizations "ACME"
7.4. Adding KVM Images on the Satellite Server
If using image-based provisioning to create new hosts, you need to add image details to your Satellite Server. This includes access details and image location.
For Web UI Users
Navigate to Infrastructure > Compute resource and click the name of your KVM connection. The UI displays information about the connection, including an Images tab. This tab contains no images for new providers but you can add new ones. Click New Image and the UI provides a set of fields for the KVM image:
-
Name - A plain text name for the image. For example,
Test KVM Image
. -
Operatingsystem - A field for selecting the image’s base operating system. For example,
RedHat 7.2
. -
Architecture - A field for selecting the operating system architecture. For example,
x86_64
. -
Username - The SSH user name for image access. This is normally the
root
user. - Password - The SSH password for image access.
-
User data - Defines if the image supports user data input, such as
cloud-init
data. -
Image path - The full path pointing to the image on the KVM server. For example,
/var/lib/KVM/images/TestImage.qcow2
.
Click Submit to save the image details.
For CLI Users
Create the image with the hammer compute-resource image create
command. Use the --uuid
field to store the full path of the image location on the KVM server.
# hammer compute-resource image create --name "Test KVM Image" \ --operatingsystem "RedHat 7.2" --architecture "x86_64" --username root \ --user-data false --uuid "/var/lib/libvirt/images/TestImage.qcow2" \ --compute-resource "ACME's KVM Server"
7.5. Adding KVM Details to a Compute Profile
We can predefine certain hardware settings for KVM-based virtual machines. You achieve this through adding these hardware settings to a compute profile. For this example, we aim to include some basic hardware settings to the 4-Example
profile you created in Section 3.5, “Creating Compute Profiles”.
For Web UI Users
Navigate to Infrastructure > Compute profiles and click the name of your profile. For example, use the 4-Example
profile you previously created in Section 3.5, “Creating Compute Profiles”. The UI displays a list of your compute resources. Click on the KVM connection.
The UI provides a set of fields where you can input KVM-specific details for the profile. This includes:
- CPUs - The number of CPUs to allocate to the new host.
- Memory - The amount of memory to allocate to the new host.
-
Image - The image to use if performing image-based provisioning. For this example, use the
Test KVM Image
. Network Interfaces - Defines the KVM network parameters for the host’s network interface. You can create multiple network interfaces. However, at least one interface should point to a Capsule-managed network. The network interface options include:
-
Network Type - Defines the type of network for the host and its NIC. This can either be
Physical (Bridge)
orVirtual(Nat)
. - Network - Depending on your choice for Network Type, this is either the physical interface for hosts to use or the virtual network on the KVM server.
-
NIC type - Defines the virtual NIC type, such as
virtio
.
-
Network Type - Defines the type of network for the host and its NIC. This can either be
Storage - Defines volumes for the host. You can create multiple volumes for the host. The storage options include:
- Storage pool - Defines the pool on the KVM server that contains the volume.
- Size - Defines the size of volume in GB.
- Allocation - Defines the size of physical preallocated space for the volume.
-
Type - Defines the volume type. Either
RAW
orQCOW2
.
Click Submit to save the compute profile.
For CLI Users
The compute profile CLI commands are not yet implemented in Red Hat Satellite 6.2. As an alternative, you can include the same settings directly during the host creation process.
7.6. Creating Network-Based Hosts on a KVM Server
The KVM provisioning process provides the option to create new hosts over a network connection. This requires the new host to access either the Satellite Server’s integrated Capsule or an external Capsule Server on a KVM virtual network. This is so the host has access to PXE provisioning services.
If using a virtual network on the KVM server for provisioning, make sure to select one that does not provide DHCP assignments. This causes DHCP conflicts with the Satellite Server when booting new hosts.
For Web UI Users
Navigate to Hosts > New host. The UI provides a set of fields where you can input details for the host.
In the Host tab:
-
Enter the Name of the Host. This becomes the provisioned system’s host name. For this example:
kvm-test1
. -
The provisioning context (Organization and Location) should automatically set to the current context. For example:
ACME
andNew York
. -
Select
Base
from the Host Group field. This should automatically populate most of the new host’s fields. -
In Deploy on, select the KVM connection. For our example,
ACME's KVM Server
. A new tab for virtual machines appears. -
In Compute profile, select a profile to use to automatically populate virtual machine-based settings. For our example:
4-Example
.
-
Enter the Name of the Host. This becomes the provisioned system’s host name. For this example:
In the Interface tab:
- Click Edit on the host’s interface.
Most of the fields should automatically contain values. Note in particular:
- The Name from the Host tab becomes the DNS name.
- The Satellite Server automatically assigns an IP address for the new host.
- Leave the MAC address blank. The KVM server assigns one to the host.
- The Satellite Server should automatically select the Managed, Primary, and Provision options for the first interface on the host. If not, select them.
- The interface screen shows the KVM-specific fields populated with settings from our compute profile. Modify these settings to suit your needs.
In the Operating System tab:
- All fields should automatically contain values. Confirm each aspect of the operating system.
-
Make sure the Provisioning Method is set to
Network Based
- Click Resolve in Provisioning templates to check the new host can identify the right provisioning templates to use.
In the Virtual Machine tab:
- These settings should be populated with details from the chosen host group and compute profile. Modify these settings to suit your needs.
In the Parameters tab:
-
Confirm the
kt_activation_keys
parameter exists and is using theexample
activation key.
-
Confirm the
Click Submit.
For CLI Users
Create the host with the hammer host create
command and include --provision-method build
to use network-based provisioning. For example:
# hammer host create --name "kvm-test1" --organization "ACME" \ --location "New York" --hostgroup "Base" \ --compute-resource "ACME's KVM Server" --provision-method build \ --build true --enabled true --managed true \ --interface "managed=true,primary=true,provision=true,compute_type=network,compute_network=acmenetwork" \ --compute-attributes="cpus=1,memory=1073741824" \ --volume="pool_name=default,capacity=20G,format_type=qcow2"
See Appendix B, Additional Host Parameters for Hammer CLI for more information on additional host creation parameters for this compute resource.
This new host entry triggers the KVM server to create the virtual machine and start it. If the virtual machine detects the defined Capsule Server through the virtual network, the virtual machine boots to PXE and begins to install the chosen operating system.
7.7. Creating Image-Based Hosts on a KVM Server
The KVM provisioning process also provides the option to create new hosts from existing images on the KVM server.
For Web UI Users
Navigate to Hosts > New host. The UI provides a set of fields where you can input details for the host.
In the Host tab:
-
Enter the Name of the Host. This becomes the provisioned system’s host name. For this example, enter
kvm-test2
. -
The provisioning context (Organization and Location) should automatically set to
ACME
andNew York
. -
Select
Base
from the Host Group field. This should automatically populate most of the new host’s fields. -
In Deploy on, select the KVM connection. For our example,
ACME's KVM Server
. A new tab for virtual machines appears. -
In Compute profile, select a profile to use to automatically populate virtual machine-based settings. For our example:
4-Example
.
-
Enter the Name of the Host. This becomes the provisioned system’s host name. For this example, enter
In the Interface tab:
- Click Edit on the host’s interface.
Most of the fields should automatically contain values. Note in particular:
- The Name from the Host tab becomes the DNS name.
- The Satellite Server automatically assigns an IP address for the new host.
- Leave the MAC address blank. The KVM server assigns one to the host.
- The Satellite Server should automatically select the Managed, Primary, and Provision options for this host. If not, select them.
- The interface screen shows the KVM-specific fields populated with settings from our compute profile. Modify these settings to suit your needs.
In the Operating System tab:
- All fields should automatically contain values. Confirm each aspect of the operating system.
-
Make sure the Provisioning Method is set to
Image Based
. A new Image field appears. This field allows you to select the image as a basis for the new host’s root volume. This is also automatically populated from the compute profile you chose in the Host tab. - Click Resolve in Provisioning templates to check the new host can identify the right provisioning templates to use.
In the Virtual Machine tab:
- These settings should be populated with details from the chosen host group and compute profile. Modify these settings to suit your needs.
In the Parameters tab:
-
Confirm the
kt_activation_keys
parameter exists and is using theexample
activation key.
-
Confirm the
Click Submit.
For CLI Users
Create the host with the hammer host create
command and include --provision-method image
to use image-based provisioning. For example:
# hammer host create --name "kvm-test2" --organization "ACME" \ --location "New York" --hostgroup "Base" \ --compute-resource "ACME's KVM Server" --provision-method image \ --image "Test KVM Image" --enabled true --managed true \ --interface "managed=true,primary=true,provision=true,compute_type=network,compute_network=acmenetwork" \ --compute-attributes="cpus=1,memory=1073741824" \ --volume="pool_name=default,capacity=20G,format_type=qcow2"
See Appendix B, Additional Host Parameters for Hammer CLI for more information on additional host creation parameters for this compute resource.
This new host entry triggers the KVM server to create the virtual machine, using the pre-existing image as a basis for the new volume.
7.8. Chapter Summary
This chapter showed how to configure Red Hat Satellite 6 to use a KVM server and how to provision new hosts through a KVM server. This included both network-based hosts and image-based hosts.
If you have no further compute resources to configure with Red Hat Satellite 6, see Chapter 13, Finalizing Provisioning for some final notes on provisioning.
The next chapter explores methods of provisioning from a Red Hat Enterprise Virtualization environment.