Kernel-based Virtual Machine (KVM)
Kernel-based Virtual Machine (KVM) is a virtualization module in the Linux kernel that allows the kernel to function as a hypervisor. KVM support dynamic memory management[1] and Live Migration[2] since 2007 among other features.
KVM is included in all mayor distribution including Ubuntu and RHEL (RedHat), RedHat provides 2 version of KVM, the one included with RHEL which allows to run up to 4 VM or the one included with RHV with unlimited VM.[3]
systemd-cgtop
can be used for showing control groups resource utilization.
Basic KVM commands
Config files and directories
Information
- Show information by pool:
virsh pool-info YOUR_POOL_NAME
virsh pool-list
virsh guestinfo
Operations
- Editing Virtual Machine configuration:
virsh edit $VM_ID
- Create VM_MACHINE:
virsh define /MY_XML_VM_DEFINITION.XML/
[4] - Modifying CPUs:
virsh setvcpus $VM_NAME ([--maximum] [[--config] [--live] | [--current]])
// Can be live or offline in the next reboot [5]- To check vcpu info:
virsh vcpuinfo $VM_NAME
- To check vcpu info:
- Modifying Memory:
virsh setmem <vm_name> <memsize>
- Connection by console:
virsh console VM_NAME
. See also:virt-manager
- Clone a virtual machine:
virt-clone
- Create image:
qemu-img create
- Resize image:
qemu-img resize
- Create domain/virtual machine:
virt-install --autostart --check all=on --name VM_DOMAIN_NAME --memory VM_MEMORY_SIZE --vcpus VM_VCPUs --os-variant ubuntu18.04 --cdrom VM_INSTALLATION_MEDIA --disk /path/to/VM_STORAGE_POOL_NAME/VM_DOMAIN_NAME.qcow2 --noautoconsole --wait VM_CREATION_WAIT_TIME --network VM_NETWORK_SETTINGS
virsh migrate
Monitoring
KVM Networking
virsh net-list
virsh net-info YOUR_NET_NAME
virsh net-destroy YOUR_NET_NAME
See also: MacVTap, virbr0, ovirtmgmt, virtio[6] and brctl.
Activities
- Read KVM Network Performance - Best Practices and Tuning Recommendations [7]
- Learn about KVM Host Networking Configuration Choices https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaag/wkvm/wkvm_c_net.htm
Storage
File based (raw or qcow2) or block based.
- List Storage pools:
virsh pool-list
[8]virsh pool-list --all
- Show information by pool:
virsh pool-info YOUR_POOL_NAME
- List Volumes from a pool:
virsh vol-list YOUR_POOL_NAME
- Create pool:(RHEL 6 documentation [9])
virsh pool-define-as --name YOUR_POOL_NAME --type dir --target /your/path/YOUR_POOL_NAME/ virsh pool-build YOUR_POOL_NAME virsh pool-start YOUR_POOL_NAME virsh pool-autostart YOUR_POOL_NAME
- Create volume
virsh vol-create-as --format qcow2 --capacity VM_DISK_SIZE --pool VM_STORAGE_POOL_NAME --name VM_SERVER_NAME.qcow2
Snapshots [10]
Snapshots can be offline or live and internal or external:
- RedHat recommend using external snapshots using
virsh snapshot-create-as
command. [11] - Live snapshot are not supported in RHEL 8[12]
- List snapshots:
virsh snapshot-list $DOMAIN
[13] - Create snapshot:
virsh snapshot-create-as --domain {VM-NAME} --name "{SNAPSHOT-NAME}"
- Revert snapshot:
virsh snapshot-revert --domain YOUR_DOMAIN --snapshotname YOUR_SNAPSHOT_NAME --running
Hybernate VM
virsh save
Performance
systemd-cgtop
can be used for showing control groups resource utilization.
Activities
General
- Install KVM in an Ubuntu Server following https://help.ubuntu.com/community/KVM/Installation instructions.
- Connect to KVM using Virt Manager (
brew install virt-manager
[16] - Create a KVM virtual machine with Ansible: DevOps/Ansible/ovirt-RHV module
- Read about raw files and qcow2 differences: https://www.berrange.com/posts/2017/02/10/the-surprisingly-complicated-world-of-disk-image-sizes/
Snapshots
- Read KVM virsh external vs internal snapshots: https://rentry.co/644h6
- Read RedHat recommendations: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-Troubleshooting-Workaround_for_creating_external_snapshots_with_libvirt
- Read this guide about handling snapshots: https://www.cyberciti.biz/faq/how-to-create-create-snapshot-in-linux-kvm-vmdomain/
Advanced
- Extend LVM on qcow2 images: https://www.technomenace.com/2014/08/how-to-extend-lvm-on-qcow2-images/
- Live Migrate a machine between two servers[17].
- Offline Migrate or move a virtual machine between two KVM servers without shared storage[18]:
virsh dumpxml
andvirsh define
- Create Live backups using
virsh blockcommit
- Review Bacula Enterprise KVM plugin: http://www.bacula.lat/kvm-plugin-bacula-enterprise-quick-guide/?lang=en
- Review Bacula solution with
bpipe
: http://www.bacula.lat/kvm-hot-online-virtual-machines-backup-with-bacula-bpipe/?lang=en - Review Veritas Netbackup support for RHV
See also
virtinst
(package):virt-install
,virt-clone
,virt-convert
andvirt-xml
libguestfs-tools
:virt-sysprep
,virt-clone
,virt-builder
,virt-customize
,virt-resize
,virt-rescue
,virt-sparsify
,guestmount
,guestfish
,virt-inspector
,virt-cat
,virt-log
,virt-df
,virt-ls
,virt-filesystems
,virt-list-filesystems
,virt-edit
- virt-manager (
virsh console VM_NAME
) - MacVTap device driver
- virt-sysprep
- Ansible ovirt-RHV module (ovirt_vm)
https://docs.ansible.com/ansible/latest/modules/ovirt_vm_module.html#ovirt-vm-module
- Amazon Firecracker
- QEMU:
qemu-img
,qemu-ga
,qemu.conf
,virsh qemu
, QEMU guest agent (qemu-ga
), qcow2,qemu-nbd, qemu-img map
,qemu-io
,/etc/libvirt/qemu.conf
, QEMU releases, VENOM,qemu-nbd --help, qemu-system
- KVM, Installation, QEMU,
virsh
,virtinst
,libguestfs-tools
, libvirt, qemu, Red Hat Virtualization (RHV), MacVTap, Virtio, oVirt, KVM services, KVM networking, KVM graphics, CPU, KVM on ARM - Virtualization: KVM, VirtualBox, multipass, containers, Vagrant, Packer, Hyper-V, VMware, Parallels, Bhyve, Virtual machine
- Kata containers
- KVM services
Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy.
Source: https://en.wikiversity.org/wiki/KVM
- ↑ https://www.linux-kvm.org/page/FAQ#Is_dynamic_memory_management_for_guests_supported.3F
- ↑ https://www.linux-kvm.org/page/Migration
- ↑ https://www.redhat.com/en/topics/virtualization/what-is-KVM
- ↑ https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/section-libvirt-dom-xml-example
- ↑ http://wiki.stoney-cloud.org/wiki/VM_CPU_Hotplug
- ↑ https://wiki.libvirt.org/page/Virtio
- ↑ https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaag/wkvm/l0wkvm00_2016.htm
- ↑ http://manpages.ubuntu.com/manpages/precise/man1/virsh.1.html#storage%20pool%20commands
- ↑ https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/sect-virtualization-storage_pools-creating-local_directories-virsh
- ↑ http://manpages.ubuntu.com/manpages/xenial/man1/virsh.1.html#snapshot%20commands
- ↑ https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-managing_guests_with_the_virtual_machine_manager_virt_manager-managing_snapshots
- ↑ https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/configuring_and_managing_virtualization/index
- ↑ https://www.cyberciti.biz/faq/how-to-create-create-snapshot-in-linux-kvm-vmdomain/
- ↑ https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit
- ↑ https://kashyapc.wordpress.com/2013/01/22/live-backup-with-external-disk-snapshots-and-libvirts-blockpull/
- ↑ https://help.ubuntu.com/community/KVM/VirtManager
- ↑ https://www.berrange.com/posts/2016/05/12/analysis-of-techniques-for-ensuring-migration-completion-with-kvm/
- ↑ https://serverfault.com/questions/434064/correct-way-to-move-kvm-vm
Advertising: