linux_wiki:kernel-based_virtual_machine_kvm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
linux_wiki:kernel-based_virtual_machine_kvm [2015/02/13 21:16]
billdozor
linux_wiki:kernel-based_virtual_machine_kvm [2019/05/25 23:50] (current)
Line 1: Line 1:
 ====== Kernel-based Virtual Machine (KVM) ====== ====== Kernel-based Virtual Machine (KVM) ======
  
-Description: KVM is "a full virtualization solution for Linux on x86 hardware containing virtualization extensions." ([[http://www.linux-kvm.org/page/Main_Page|KVM Main Page]]) It can be run on the desktop with GUI managers or on a headless server.+**General Information**
  
-Assumption: Some Red Hat based distro is already installed. (CentOS, Scientific, RHEL, etc)+KVM is "a full virtualization solution for Linux on x86 hardware containing virtualization extensions.([[http://www.linux-kvm.org/page/Main_Page|KVM Main Page]]It can be run on the desktop with GUI managers or on a headless server.
  
-2015-02-13: These are rough notes and in progress as I learn KVM.+**Checklist**  
 +  * Distro(s): Enterprise Linux 6 
 +  * Other: This page was written using CentOS 6.6 with GNOME desktop (headless KVM is on the to do list!) 
 +  * 2015-02-13: These are rough notes and in progress as I learn KVM.
  
-===== Installation =====+----
  
-  * Install: Virtualization Groups+====== Installation ====== 
 + 
 +==== Install: Required Virtualization Packages (CLI) ====
  
 <code bash> <code bash>
-yum groupinstall "Virtualization*"+yum install qemu-kvm python-virtinst virt-top libvirt libvirt-client
 </code> </code>
  
-**Group Explanations** +**CLI Package Explanations** 
-This will install the following package groups: +  * qemu-kvm => The main KVM package. 
-  * Virtualization Tools => Tools for offline virtual image management+  * python-virtinst => CLI tools and libraries for creating VMs
-  * Virtualization Platform => Provides an interface for accessing and controlling virtualized guests and containers+  * virt-top => CLI VM stats
-  * Virtualization Client => Clients for installing and managing virtualization instances+  * libvirt => Toolkit for libvirtd service
-  * Virtualization => Provides an environment for hosting virtualized guests.+  * libvirt-client => Toolkit for VM clients.
  
-For detailed info and a list of packages that will be installed:+==== InstallOptional Virtualization Packages (GUI) ====
 <code bash> <code bash>
-yum groupinfo "Virtualization*"+yum install virt-manager virt-viewer
 </code> </code>
  
-  * Install: Additional Useful Packages+**GUI Package Explanations** 
 +  * virt-manager => GUI VM administration tool. 
 +  * virt-viewer => GUI local console connection to VMs. 
 + 
 + 
 +==== Install: Optional Useful Packages ====
 <code bash> <code bash>
 yum install bridge-utils dejavu-lgc-sans-fonts tigervnc xorg-x11-xauth yum install bridge-utils dejavu-lgc-sans-fonts tigervnc xorg-x11-xauth
Line 35: Line 45:
   * bridge-utils => network bridging to allow the VMs to use the host machine's physical interfaces as a bridge.   * bridge-utils => network bridging to allow the VMs to use the host machine's physical interfaces as a bridge.
   * dejavu-lgc-sans-fonts => Fonts for virt-manager (GUI VM manager)   * dejavu-lgc-sans-fonts => Fonts for virt-manager (GUI VM manager)
-  * tigervnc => VNC to connect locally to VM console+  * tigervnc => VNC to connect remotely to VM's GUI.
   * xorg-x11-xauth => X11 forwarding through ssh. (Remote virt-manager for headless servers)   * xorg-x11-xauth => X11 forwarding through ssh. (Remote virt-manager for headless servers)
  
 ---- ----
  
-===== Verify Installation and Start Services =====+====== Verify Installation and Start Services ======
  
   * Ensure that the KVM kernel module is loaded   * Ensure that the KVM kernel module is loaded
  
 <code bash> <code bash>
-lsmod | grep kvm+[root@bash ~]# lsmod | grep kvm 
 +kvm_intel              55496  0  
 +kvm                   337900  1 kvm_intel 
 +</code> 
 + 
 +    * If it is not loaded, attempt to load the module: 
 +<code bash> 
 +modprobe -v kvm
 </code> </code>
  
Line 60: Line 77:
 </code> </code>
  
-  * Verify libvirtd is running successfully+  * Verify libvirtd is running successfully (Yes, 3 forward slashes)
  
 <code bash> <code bash>
 service libvirtd status service libvirtd status
-virsh -c qemu://system list+virsh -c qemu:///system list
 </code> </code>
  
 ---- ----
  
-===== Setup Networking =====+====== Setup Networking ======
 By default, VMs will be on a private network with no access to the outside world unless they use a physical host network interface as a bridge. By default, VMs will be on a private network with no access to the outside world unless they use a physical host network interface as a bridge.
  
Line 125: Line 142:
 NETMASK="255.255.255.0" NETMASK="255.255.255.0"
 GATEWAY="192.168.0.1" GATEWAY="192.168.0.1"
 +DNS1="208.67.222.222"
 +DNS2="208.67.220.220"
 </code> </code>
 +Note: Those DNS entries are for OpenDNS.
  
 ==== IP Forwarding ==== ==== IP Forwarding ====
Line 148: Line 168:
 ---- ----
  
-===== SELinux ===== +====== SELinux ====== 
-If SELinux is in Enforcing mode, there is additional configuration if you change the default directory for VM images.+If SELinux is on and in Enforcing mode, there is additional configuration if you change the default directory for VM images. 
 + 
 +**Check if SELinux is on/enabled** 
 +<code bash> 
 +[bash]# sestatus 
 +SELinux status:                 enabled 
 +SELinuxfs mount:                /selinux 
 +Current mode:                   enforcing 
 +</code>
  
 **Default VM Image directory:** /var/lib/libvirt/images/ **Default VM Image directory:** /var/lib/libvirt/images/
Line 159: Line 187:
 </code> </code>
  
-  * Install the following package to enable use of the "semanage" utility.+  * Set the context of the new directory, referencing the default 
 +<code bash> 
 +chcon -R --reference /var/lib/libvirt/images /vm-images 
 +</code>
  
 +  * Verify
 <code bash> <code bash>
-yum install policycoreutils-python+ls -Z /vm-images
 </code> </code>
  
-  * Set security context for the vm-images directory and everything that is created under it.+  * Create a symlink to the new location to ensure that is survives a SELinux relabel. 
 +<code bash> 
 +rmdir /var/lib/libvirt/images 
 +ln -s /vm-images /var/lib/libvirt/images 
 +</code>
  
 +----
 +
 +====== Creating VMs ======
 +
 +VMs can be installed via a command line tool (virt-install) or a GUI (virt-manager).
 +
 +==== CLI: virt-install ====
 +virt-install has many options, see them with "virt-install --help".
 +
 +Common options:
 <code bash> <code bash>
-semanage fcontext --t virt_image_t "/vm-images(/.*)?"+General Options 
 +--name=NAME  (Name of the guest) 
 +--ram=MEMORY  (Memory in megabytes) 
 +--vcpus=VCPUS  (Number of vcpus) 
 + 
 +Installation Method 
 +--cdrom=CDROM  (CD-ROM installation media, can be ISO or physical cd-rom drive) 
 +--location=LOCATION  (Installation source via http, ftp, or nfs.) 
 +--pxe  (Boot from network using PXE) 
 +--extra-args "ks=http://myserver/mykickstartfile.ks"  (Path to kickstart file for automated installs) 
 + 
 +Storage Configuration 
 +--disk=DISKOPTS  (Storage with different options) 
 +  --disk path=/my/existing/disk  
 +  --disk path=/my/new/disk,size=10 (in GB) 
 + 
 +Network 
 +--network bridge=br0  (Guest network interface) 
 + 
 +Graphics 
 +--graphics=GRAPHICS  (Guest display settings) 
 +  --graphics vnc  (Default if DISPLAY environment variable is set) 
 +  --graphics none  (Default if DISPLAY environment variable is not set)
 </code> </code>
  
-  * Restore the security context (I don't know why you have to do this yet...but you do)+=== Example: Interactive Install with VNC === 
 +Install a VM called "centos1", create a 20GB hard drive, 1 CPU, 1GB ram, point it to the iso, have it use the network interface "br0" 
 +<code bash> 
 +virt-install \ 
 +--name=centos1 \ 
 +--disk path=/vm-images/centos1.img,size=20 \ 
 +--vcpus=1 --ram=1024 \ 
 +--cdrom=/vm-images/CentOS-6.6-x86_64-netinstall.iso \ 
 +--network bridge=br0 
 +</code>
  
 +=== Connect to Guest for Installation ===
 +After the VM is created, if you are using the "--graphics vnc" option (either by default or explicitly), a console is opened up for interactive install.
 +
 +If you close it, this is how you can connect back to the guest:
 +
 +  * **Method 1: Connect directly to the guest console**
 +Example connect to the guest named "centos1" (Yes, that is 3 slashes)
 <code bash> <code bash>
-restorecon -R /vm-images+virt-viewer --connect qemu:///system centos1
 </code> </code>
  
-  * Verify+  * **Method 2: Open virt-manager**
  
 +Example open virt-manager and then the VM "centos1"
 <code bash> <code bash>
-ls -Z /vm-images+virt-manager
 </code> </code>
 +    * Select the VM
 +    * Click "Open"
 +
 +
 +Proceed with installation as normal.
 +
 +----
 +
 +==== GUI: virt-manager ====
 +Installing locally via a GUI.
 +
 +  * Open a terminal and type:
 +<code bash>
 +virt-manager
 +</code>
 +  * The virt-manager GUI will open.
 +  * Select the name of the host (probably "localhost (QEMU)")
 +  * Click the "Create a New Virtual Machine" button (the monitor with a play button on it)
 +    * Step 1 => 
 +      * Name: Name the virtual machine
 +      * Choose how to install: Select the install method
 +    * Step 2 => 
 +      * Browse for the media
 +      * OS Type/Version: Optionally, select the OS type and version
 +    * Step 3 =>
 +      * Memory/CPU: Select memory and CPU.
 +    * Step 4 =>
 +      * Storage: Create or use existing storage
 +    * Step 5 =>
 +      * Ready to install: Confirm settings, set advanced options such as Host network device.
 +
 +----
 +
 +====== Disabling virbr0 NAT Interface ======
 +
 +On some desktop installations, a NAT interface "virbr0" is auto created.
 +
 +To disable this interface:
 +  * View the interface<code bash>virsh net-list</code>
 +  * Turn off the interface<code bash>virsh net-destroy default</code>
 +  * Disable auto start on the interface<code bash>virsh net-autostart default –disable</code>
 +  * Verify State is "inactive" and Autostart is "no", then ensure virbr0 is not in the interface list<code bash>virsh net-list --all
 +ip addr show</code>
 +  * Restart the network service
 +    * EL6<code bash>service network restart</code>
 +    * EL7<code bash>systemctl restart network</code>
 +
 +----
 +
  • linux_wiki/kernel-based_virtual_machine_kvm.1423880189.txt.gz
  • Last modified: 2019/05/25 23:50
  • (external edit)