KVM

From Wikiversity
Jump to navigation Jump to search

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[edit]

Config files and directories[edit]

/etc/libvirt/qemu

Information[edit]

Operations[edit]

  • 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]
  • 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[edit]

KVM Networking[edit]

See also: MacVTap, virbr0, ovirtmgmt, virtio[6] and brctl.

Activities[edit]

  1. Read KVM Network Performance - Best Practices and Tuning Recommendations [7]
  2. Learn about KVM Host Networking Configuration Choices https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaag/wkvm/wkvm_c_net.htm

Storage[edit]

  • List Storage pools:
virsh pool-list[8]
virsh pool-list --all
    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

See also: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-managing_guest_virtual_machines_with_virsh-storage_pool_commands

  • Create volume
virsh vol-create-as --format qcow2 --capacity VM_DISK_SIZE --pool VM_STORAGE_POOL_NAME --name VM_SERVER_NAME.qcow2

Snapshots [10][edit]

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
  • Snapshots with blockcommit[14] and blockpull[15]

Hybernate VM[edit]

  • virsh save

Performance[edit]

  • systemd-cgtop can be used for showing control groups resource utilization.

Activities[edit]

General[edit]

  1. Install KVM in an Ubuntu Server following https://help.ubuntu.com/community/KVM/Installation instructions:
  2. Connect to KVM using Virt Manager (brew install virt-manager [16]
  3. Create a KVM virtual machine with Ansible: DevOps/Ansible/ovirt-RHV module
  4. Read about raw files and qcow2 differences: https://www.berrange.com/posts/2017/02/10/the-surprisingly-complicated-world-of-disk-image-sizes/

Snapshots[edit]

Advanced[edit]

Backup:

See also[edit]

https://docs.ansible.com/ansible/latest/modules/ovirt_vm_module.html#ovirt-vm-module

References[edit]

  1. https://www.linux-kvm.org/page/FAQ#Is_dynamic_memory_management_for_guests_supported.3F
  2. https://www.linux-kvm.org/page/Migration
  3. https://www.redhat.com/en/topics/virtualization/what-is-KVM
  4. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/section-libvirt-dom-xml-example
  5. http://wiki.stoney-cloud.org/wiki/VM_CPU_Hotplug
  6. https://wiki.libvirt.org/page/Virtio
  7. https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaag/wkvm/l0wkvm00_2016.htm
  8. http://manpages.ubuntu.com/manpages/precise/man1/virsh.1.html#storage%20pool%20commands
  9. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/sect-virtualization-storage_pools-creating-local_directories-virsh
  10. http://manpages.ubuntu.com/manpages/xenial/man1/virsh.1.html#snapshot%20commands
  11. 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
  12. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/configuring_and_managing_virtualization/index
  13. https://www.cyberciti.biz/faq/how-to-create-create-snapshot-in-linux-kvm-vmdomain/
  14. https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit
  15. https://kashyapc.wordpress.com/2013/01/22/live-backup-with-external-disk-snapshots-and-libvirts-blockpull/
  16. https://help.ubuntu.com/community/KVM/VirtManager
  17. https://www.berrange.com/posts/2016/05/12/analysis-of-techniques-for-ensuring-migration-completion-with-kvm/
  18. https://serverfault.com/questions/434064/correct-way-to-move-kvm-vm
  19. https://github.com/virt-manager/virt-manager/tree/master/virtinst
  20. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_virtualization/getting-started-with-virtualization-in-rhel-8_configuring-and-managing-virtualization