Difference between revisions of "Kernel-based Virtual Machine (KVM)"

From wikieduonline
Jump to navigation Jump to search
 
(82 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[wikipedia:Kernel-based_Virtual_Machine|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<ref>https://www.linux-kvm.org/page/FAQ#Is_dynamic_memory_management_for_guests_supported.3F</ref> and [[Live Migration]]<ref>https://www.linux-kvm.org/page/Migration</ref> since 2007 among other features.
+
[[wikipedia:Kernel-based_Virtual_Machine|Kernel-based Virtual Machine]] (KVM) ([[2007]]) is a [[virtualization]] module in the Linux kernel that allows the kernel to function as a hypervisor. KVM support dynamic memory management<ref>https://www.linux-kvm.org/page/FAQ#Is_dynamic_memory_management_for_guests_supported.3F</ref> and [[Live Migration]]<ref>https://www.linux-kvm.org/page/Migration</ref> since [[2007]] ([[Linux Kernel changelog|kernel version 2.6.20]]), 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 [[Red Hat Virtualization|RHV]] with unlimited VM.<ref>https://www.redhat.com/en/topics/virtualization/what-is-KVM</ref>  
+
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 [[Red Hat Virtualization|RHV]] with unlimited VM.<ref>https://www.redhat.com/en/topics/virtualization/what-is-KVM</ref>  
  
 
<code>[[systemd-cgtop]]</code> can be used for showing [[control group]]s resource utilization.
 
<code>[[systemd-cgtop]]</code> can be used for showing [[control group]]s resource utilization.
Line 9: Line 9:
  
 
=== Config files and directories ===
 
=== Config files and directories ===
<code>/etc/[[libvirt]]/[[qemu]]</code>
+
* <code>/etc/[[libvirt]]/[[qemu]]</code>
 +
* <code>[[/etc/libvirt/qemu.conf]]</code>
 +
* <code>[[/etc/libvirt/virtlogd.conf]]</code>
 +
* <code>[[/var/lib/libvirt/images/]]</code>
  
 
=== Information ===
 
=== Information ===
 
* Show information by pool: <code>[[virsh pool-info]] YOUR_POOL_NAME</code>
 
* Show information by pool: <code>[[virsh pool-info]] YOUR_POOL_NAME</code>
 +
* <code>[[virsh pool-list]]</code>
 
* <code>[[virsh guestinfo]]</code>
 
* <code>[[virsh guestinfo]]</code>
  
 
=== Operations ===
 
=== Operations ===
* Editing Virtual Machine configuration: <code>[[/virsh edit/]] $VM_ID</code>
+
* Editing Virtual Machine configuration: <code>[[virsh edit]] $VM_ID</code>
* Create VM_MACHINE: <code>[[/virsh define/]] [[/MY_XML_VM_DEFINITION.XML/]]</code><ref>https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/section-libvirt-dom-xml-example</ref>
+
* Create VM_MACHINE: <code>[[virsh define]] [[MY_XML_VM_DEFINITION.XML]]</code><ref>https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/section-libvirt-dom-xml-example</ref>
* Modifying CPUs: <code>virsh setvcpus $VM_NAME ([--maximum] [[--config] [--live] | [--current]])</code>  // Can be live or offline in the next reboot <ref>http://wiki.stoney-cloud.org/wiki/VM_CPU_Hotplug</ref>
+
* Modifying [[CPU]]s: <code>virsh setvcpus $VM_NAME ([--maximum] [[--config] [--live] | [--current]])</code>  // Can be live or offline in the next reboot <ref>http://wiki.stoney-cloud.org/wiki/VM_CPU_Hotplug</ref>
** To check vcpu info: <code>[[/virsh vcpuinfo/]] $VM_NAME</code>
+
** To check vcpu info: <code>[[virsh vcpuinfo]] $VM_NAME</code>
* Modifying Memory: <code>[[Virsh/virsh setmem|virsh setmem]] <vm_name> <memsize></code>
+
* Modifying Memory: <code>[[virsh setmem]] <vm_name> <memsize></code>
* Connection by console: <code>virsh console VM_NAME</code>. See also: [[virt-manager]]
+
* [[Enable serial console|Connection by console]]:
* Clone a virtual machine: <code>virt-clone</code>
+
: <code>[[virsh console]] VM_NAME</code>. See also: <code>[[virt-manager]]</code>
* Create image: <code>[[qemu-img]] create</code>
+
* Clone a virtual machine:
* Resize image: <code>[[qemu-img]] resize</code>
+
:<code>virt-clone</code>
* Create domain/virtual machine: <code>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</code>
+
* Create image:
* <code>[[/virsh migrate/]]</code>
+
:<code>[[qemu-img]] create</code>
 +
* Resize image:
 +
: <code>[[qemu-img]] resize</code>
 +
* Create domain/virtual machine: <code>[[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</code>
 +
* <code>[[virsh migrate]]</code>
  
 
=== Monitoring ===
 
=== Monitoring ===
Line 32: Line 40:
 
* <code>[[virsh domstats]]</code>
 
* <code>[[virsh domstats]]</code>
  
=== KVM Networking ===
+
=== [[KVM Networking]] ===
* <code>virsh [[virsh/net-list|net-list]]</code>
+
* <code>[[virsh net-list]]</code>
* <code>virsh [[virsh/net-info|net-info]] YOUR_NET_NAME</code>
+
* <code>[[virsh net-info]] YOUR_NET_NAME</code>
 
* <code>virsh net-destroy YOUR_NET_NAME</code>
 
* <code>virsh net-destroy YOUR_NET_NAME</code>
See also: [[MacVTap]], virbr0, ovirtmgmt, [[virtio]]<ref>https://wiki.libvirt.org/page/Virtio</ref> and [[brctl]].  
+
See also: [[MacVTap]], virbr0, ovirtmgmt, [[virtio]]<ref>https://wiki.libvirt.org/page/Virtio</ref> and <code>[[brctl]]</code>.  
  
 
==== Activities ====
 
==== Activities ====
Line 43: Line 51:
  
 
=== Storage ===
 
=== Storage ===
 +
File based (raw or [[qcow2]]) or [[block]] based.
 +
 
* List Storage pools:
 
* List Storage pools:
 
::<code>[[virsh pool-list]]</code><ref>http://manpages.ubuntu.com/manpages/precise/man1/virsh.1.html#storage%20pool%20commands</ref>
 
::<code>[[virsh pool-list]]</code><ref>http://manpages.ubuntu.com/manpages/precise/man1/virsh.1.html#storage%20pool%20commands</ref>
 
::<code>virsh pool-list --all</code>
 
::<code>virsh pool-list --all</code>
* Show information by pool: <code>[[/virsh pool-info/]] YOUR_POOL_NAME</code>
+
* Show information by pool: <code>[[virsh pool-info]] YOUR_POOL_NAME</code>
* List Volumes from a pool: <code>[[/virsh vol-list/]] YOUR_POOL_NAME</code>
+
* List Volumes from a pool: <code>[[virsh vol-list]] YOUR_POOL_NAME</code>
 
* Create pool:(RHEL 6 documentation <ref>https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/sect-virtualization-storage_pools-creating-local_directories-virsh</ref>)
 
* Create pool:(RHEL 6 documentation <ref>https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/sect-virtualization-storage_pools-creating-local_directories-virsh</ref>)
 
<pre>
 
<pre>
Line 72: Line 82:
  
 
== Hybernate VM ==
 
== Hybernate VM ==
* <code>virsh save</code>
+
* <code>[[virsh save]]</code>
  
 
== Performance ==
 
== Performance ==
 
* <code>[[systemd-cgtop]]</code> can be used for showing control groups resource utilization.
 
* <code>[[systemd-cgtop]]</code> can be used for showing control groups resource utilization.
 +
 +
 +
== KVM [[timeline]] ==
 +
* 2013 KVM virtual machine in [[ARM]] architecture [[Linux Kernel 3.9]] in April 2013
 +
* [[2009]] [[RHV]]
 +
* [[2007]] [[Live Migration]] support
  
 
== Activities ==
 
== Activities ==
 
=== General ===
 
=== General ===
# [[/Install KVM in an Ubuntu Server/]] following https://help.ubuntu.com/community/KVM/Installation instructions:
+
# [[Install KVM in an Ubuntu Server]] following https://help.ubuntu.com/community/KVM/Installation instructions.
# Connect to KVM using [[/Virt Manager/]] (<code>brew install [[virt-manager]]</code> <ref>https://help.ubuntu.com/community/KVM/VirtManager</ref>
+
# Connect to KVM using [[Virt Manager]] (<code>brew install [[virt-manager]]</code> <ref>https://help.ubuntu.com/community/KVM/VirtManager</ref>
# Create a KVM virtual machine with Ansible: [[DevOps/Ansible/ovirt-RHV module]]
+
# Create a KVM virtual machine with 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/
 
# Read about raw files and [[qcow2]] differences: https://www.berrange.com/posts/2017/02/10/the-surprisingly-complicated-world-of-disk-image-sizes/
 +
# Read StackOverflow most popular questions https://stackoverflow.com/questions/tagged/kvm?tab=Votes
 +
* [[Virt-install Windows]]: [[Install virtio-win]]
  
 
=== Snapshots ===
 
=== Snapshots ===
Line 90: Line 108:
  
 
=== Advanced ===
 
=== Advanced ===
* [[/Extend LVM on qcow2 images/]]: https://www.technomenace.com/2014/08/how-to-extend-lvm-on-qcow2-images/
+
* [[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<ref>https://www.berrange.com/posts/2016/05/12/analysis-of-techniques-for-ensuring-migration-completion-with-kvm/</ref>.
 
* Live Migrate a machine between two servers<ref>https://www.berrange.com/posts/2016/05/12/analysis-of-techniques-for-ensuring-migration-completion-with-kvm/</ref>.
* [[/Offline Migrate or move a virtual machine between two KVM servers without shared storage/]]<ref>https://serverfault.com/questions/434064/correct-way-to-move-kvm-vm</ref>: <code>[[virsh/virsh dumpxml|virsh dumpxml]]</code> and <code>[[virsh/MY XML VM DEFINITION.XML|virsh define]]</code>
+
* [[Offline Migrate or move a virtual machine between two KVM servers without shared storage]]<ref>https://serverfault.com/questions/434064/correct-way-to-move-kvm-vm</ref>: <code>[[virsh dumpxml]]</code> and <code>[[virsh define]]</code>
 +
* Recover a VM using <code>[[virt-rescue]]</code>
 +
 
 +
 
 
[[Backup]]:
 
[[Backup]]:
* [[virsh/Create Live backups]] using [[virsh/virsh blockcommit|virsh blockcommit]]
+
* [[Create Live backups]] using <code>[[virsh blockcommit]]</code>
 
* Review [[Bacula]] Enterprise KVM plugin: http://www.bacula.lat/kvm-plugin-bacula-enterprise-quick-guide/?lang=en
 
* Review [[Bacula]] Enterprise KVM plugin: http://www.bacula.lat/kvm-plugin-bacula-enterprise-quick-guide/?lang=en
* Review [[Bacula]] solution with <code>bpipe</code>: http://www.bacula.lat/kvm-hot-online-virtual-machines-backup-with-bacula-bpipe/?lang=en
+
* Review [[Bacula]] solution with <code>[[bpipe]]</code>: http://www.bacula.lat/kvm-hot-online-virtual-machines-backup-with-bacula-bpipe/?lang=en
 
* Review Veritas [[Netbackup]] support for [[Red Hat Virtualization|RHV]]
 
* Review Veritas [[Netbackup]] support for [[Red Hat Virtualization|RHV]]
 +
 +
== Related terms ==
 +
* [[Avi Kivity]]
 +
* [[VM-Exits]]
 +
* [[Amazon Firecracker]]
 +
* [[MacVTap]] device driver
 +
* [[Ansible]] [[ovirt-RHV module]] (ovirt_vm)
 +
* [[KubeVirt]]
 +
* [[QEMU Logs]]
 +
* [[OVirt]] and [[RHV]]
 +
* <code>[[/dev/kvm]]</code>
 +
* [[vhost_net]] kernel module
 +
* [[KVM switch]]
 +
* [[PCI passthrough]]
 +
* [[AWS Nitro System]]
  
 
== See also ==
 
== See also ==
* CompTIA [[IT Fundamentals/Virtualization]]
+
* {{virtinst}}
* [[wikipedia:kernel-based_Virtual_Machine]]
+
* {{virt}}
* [[VirtualBox]], [[multipass]]
+
* {{virt-manager}}
 +
* {{libvirtd}}
 +
* {{QEMU}}
 
* {{KVM}}
 
* {{KVM}}
* <code>[[virtinst]]</code> package<ref>https://github.com/virt-manager/virt-manager/tree/master/virtinst</ref>, includes following python binaries: <code>virt-clone</code>, <code>virt-convert</code>, <code>[[/virt-install/]]</code><ref>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</ref>
+
* {{Virtualization}}
* [[virt-manager]] (<code>virsh console VM_NAME</code>)
+
 
* [[MacVTap]] device driver
+
 
* [[/virt-sysprep/]]
 
* [[Ansible]] [[DevOps/Ansible/ovirt-RHV module|ovirt-RHV module]] (ovirt_vm)
 
https://docs.ansible.com/ansible/latest/modules/ovirt_vm_module.html#ovirt-vm-module
 
* [[Firecracker]]
 
  
  

Latest revision as of 18:16, 29 June 2022

Kernel-based Virtual Machine (KVM) (2007) 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 (kernel version 2.6.20), 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]

Information[edit]

Operations[edit]

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]

File based (raw or qcow2) or block based.

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

Performance[edit]

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


KVM timeline[edit]

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: 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/
  5. Read StackOverflow most popular questions https://stackoverflow.com/questions/tagged/kvm?tab=Votes

Snapshots[edit]

Advanced[edit]


Backup:

Related terms[edit]

See also[edit]

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

  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

Advertising: