KVM的虚拟化简介
KVM(全称Kernel-based Virtual Machine)是一套开源的全虚拟化解决方案,同时也支持半虚拟化。KVM不同于其他(如Xen),它是集成到Linux内核的Hypervisor,在X86架构上需要硬件支持(如Intel VT技术或者AMD V技术)虚拟化技术。KVM由一个可加载的内核模块kvm.ko提供核心虚拟化基础构造,和一个处理器特殊的模块kvm-intel.ko 或者 kvm-amd.ko组成。
在KVM虚拟主机上,可以允许运行多个Linux或Windows虚拟机,每个虚拟机都有各自的虚拟硬件:网卡、磁盘、图形适配器等。
这里KVM的安装环境是VMware和CentOS6.7_64位系统
前提需要足够大的硬件配置支持,如KVM主机内存需要至少2个G,硬盘需要40G以上。
检查CPU是否支持虚拟化技术,查看虚拟机设置虚拟化引擎部分,把【虚拟化Inter VT-x/EPT或AMD-V/RVI(V)】选项打钩。
同时可以在主机下查看CPU是否支持虚拟化,可以使用egrep 'vmx|svm' --color /proc/cpuinfo查看,若有输出则支持。
现在开始安装KVM
Step1:清除防火墙规则并把Selinux关闭
[root@kvm ~]# service iptables stop [root@kvm ~]# iptables -F [root@kvm ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config [root@kvm ~]# setenforce 0
Step2:安装KVM核心包和其他所必须的虚拟化软件包
kvm: KVM核心模块,它在默认Linux内核中提供KVM管理程序
virt: 创建、克隆、虚拟机命令,以及图形化管理工具virt-manager
qemu-img: qemu组件,使用qemu命令来创建磁盘等
libvirts: 虚拟机管理工具,使用virsh等命令来管理和控制虚拟机
bridge-utils: 设置网络网卡桥接
KVM的安装需要解决的依赖比较多,其中virt需要安装200多个依赖包,安装过程比较费时,大约十几分钟,这取决于你的机器。
[root@kvm ~]# yum -y install kvm virt* libvirt qemu-img bridge-utils
Step3:确认安装KVM是否已经成功
检查KVM模块是否加载
[root@kvm ~]# lsmod |grep kvm kvm_intel 55624 0 kvm 341551 1 kvm_intel
查看virt版本
[root@kvm ~]# virt-install --version 0.600.0 [root@kvm ~]# virsh --version 0.10.2
[root@kvm ~]# virsh list --all Id Name State ----------------------------------------------------
Step4:接下来可以创建并安装虚拟机,首先是配置网卡
进入/etc/sysconfig/network-scripts/目录下,拷贝eth0网卡配置文件ifcfg-eth0为ifcfg-br0
[root@kvm ~]# cd /etc/sysconfig/network-scripts/ [root@kvm network-scripts]# cp ifcfg-eth0 ifcfg-br0
编辑ifcfg-eth0文件
DEVICE=eth0 HWADDR=00:0C:29:6C:57:4E TYPE=Ethernet UUID=41b2bd36-fc1a-4bbf-ab3f-2e11a9fc888a ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none BRIDGE=br0
编辑ifcfg-br0文件
DEVICE=br0 #HWADDR=00:0C:29:6C:57:4E TYPE=Bridge UUID=41b2bd36-fc1a-4bbf-ab3f-2e11a9fc888a ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.1.33 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=192.168.1.1
重启网络服务
[root@kvm network-scripts]# service network restart Shutting down interface br0: [ OK ] Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] Bringing up interface br0: Determining if ip address 192.168.1.33 is already in use for device br0... [ OK ]
查看一下网卡信息,其中br0就是刚刚创建的网卡配置文件,可以看到设置的IP已经生效
[root@kvm ~]# ifconfig br0 Link encap:Ethernet HWaddr 00:0C:29:6C:57:4E inet addr:192.168.1.33 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe6c:574e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1211 errors:0 dropped:0 overruns:0 frame:0 TX packets:193 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:100106 (97.7 KiB) TX bytes:18094 (17.6 KiB) eth0 Link encap:Ethernet HWaddr 00:0C:29:6C:57:4E inet6 addr: fe80::20c:29ff:fe6c:574e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:160842 errors:0 dropped:0 overruns:0 frame:0 TX packets:84216 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:210835385 (201.0 MiB) TX bytes:7062228 (6.7 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:5 errors:0 dropped:0 overruns:0 frame:0 TX packets:5 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:560 (560.0 b) TX bytes:560 (560.0 b) virbr0 Link encap:Ethernet HWaddr 52:54:00:07:F1:48 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Step5:启动或重启libvirtd和messagebus服务
启动libvirtd、messagebus
[root@kvm ~]# service libvirtd start Starting libvirtd daemon: [ OK ] [root@kvm ~]# service messagebus start Starting system message bus: [ OK ]
查看网络接口列表
[root@kvm ~]# brctl show bridge name bridge id STP enabled interfaces br 08000.000c296c574e no eth0 virbr0 8000.52540007f148 yes virbr0-nic
Step6:创建一个虚拟机
首先创建一个用来存放虚拟机的目录/kvm,当然要先查看一下磁盘大小情况再选择的位置
[root@kvm ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/sda3 ext4 43G 1.3G 39G 4% / tmpfs tmpfs 932M 0 932M 0% /dev/shm /dev/sda1 ext4 190M 31M 149M 18% /boot [root@kvm ~]# mkdir /kvm
创建一个预分配的元数据选项的qcow2格式镜像文件(用来存储虚拟机的磁盘镜像)
[root@kvm ~]# qemu-img create -f qcow2 -o preallocation=metadata /kvm/centos6.7_v1.img 10G Formatting '/kvm/centos6.7_v1.img', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 preallocation='metadata'
stat命令输出磁盘镜像信息
[root@kvm ~]# stat /kvm/centos6.7_v1.img File: `/kvm/centos6.7_v1.img' Size: 10739318784Blocks: 3488 IO Block: 4096 regular file Device: 803h/2051dInode: 2490371 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-01-15 17:08:46.695998217 +0800 Modify: 2016-01-15 17:08:46.694998217 +0800 Change: 2016-01-15 17:08:46.694998217 +0800
info命令查看磁盘镜像的大小信息
[root@kvm ~]# qemu-img info /kvm/centos6.7_v1.img image: /kvm/centos6.7_v1.img file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.7M cluster_size: 65536
下面通过文本模式安装一个512内存、1核心、磁盘大小10G的linux系统。使用virt-install命令来创建虚拟机
[root@kvm ~]# virt-install \ --name centos6.7_v1 \ --ram 512 \ --disk path=/kvm/centos6.7_v1.img,format=qcow2,size=10,bus=virtio \ --vcpus 1 \ --os-type linux \ --os-variant rhel6 \ --network bridge=br0 \ --graphics none \ --location=/dev/sr0 \ --console pty,target_type=serial \ --extra-args 'console=ttyS0,115200n8 serial'
部分输出内容
Starting install... Retrieving file .treeinfo... | 676 B 00:00 ... Retrieving file vmlinuz... | 8.1 MB 00:00 ... Retrieving file initrd.img... | 69 MB 00:00 ... Creating domain... | 0 B 00:00 Connected to domain centos6.7_v1 Escape character is ^] [1;256r Google, Inc. Serial Graphics Adapter 12/07/11 SGABIOS $Id: sgabios.S 8 2010-04-22 00:03:40Z nlaredo $ ([email protected]) Wed Dec 7 17:04:47 UTC 2011 Term: 121x32 4 0 SeaBIOS (version seabios-0.6.1.2-30.el6) Machine UUID 51dca1d8-adbc-51d1-1f39-343ad2c7a49f gPXE (http://etherboot.org) - 00:03.0 C100 PCI2.10 PnP BBS PMM1FE0@10 C100 Probing EDD (edd=off to disable)... ok ...... Greetings. anaconda installer init version 13.21.239 starting mounting /proc filesystem... done creating /dev filesystem... usb 2-1: new full speed USB device number 2 using uhci_hcd done starting udev...done mounting /dev/pts (unix98 pty) filesystem... udevd[48]: error setting /sys/class/firmware/timeout: No such file or directory done mounting /sys filesystem... done anaconda installer init version 13.21.239 using a serial console trying to remount root filesystem read write... done Welcome to CentOS for x86_64 ┌───────────┤ Disc Found ├───────────┐ │ │ │ To begin testing the media before │ │ installation press OK. │ │ │ │ Choose Skip to skip the media test │ │ and start the installation. │ │ │ │ ┌────┐ ┌──────┐ │ │ │ OK │ │ Skip │ │ │ └────┘ └──────┘ │ │ │ │ │ └────────────────────────────────────┘ <Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen
接下来的安装操作就变得简单了,安装完成选择Reboot就进入虚拟机了
┌─────────────────────┤ Package Installation ├──────────────────────┐ │ │ │ │ │ 0% │ │ │ │ Packages completed: 6 of 225 │ │ │ │ Installing glibc-common-2.12-1.166.el6.x86_64 (107 MB) │ │ Common binaries and locale data for glibc │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────┘
查看一下磁盘信息和登录信息
[root@localhost ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root ext4 8.3G 644M 7.3G 9% / tmpfs tmpfs 246M 0 246M 0% /dev/shm /dev/vda1 ext4 477M 33M 419M 8% /boot
[root@localhost ~]# last root ttyS0 Fri Jan 15 18:01 still logged in reboot system boot 2.6.32-573.el6.x Fri Jan 15 18:00 - 18:03 (00:02) wtmp begins Fri Jan 15 18:00:36 2016
退出返回到KVM主机,键入ctrl+]即可,在KVM主机中使用virsh list可以查看虚拟机列表
[root@kvm ~]# virsh list --all
Id Name State
----------------------------------------------------
4 centos6.7_v1 running
进入虚拟机,使用virsh console命令
[root@kvm ~]# virsh console centos6.7_v1 Connected to domain centos6.7_v1 Escape character is ^] [root@localhost ~]#
使用virsh命令管理虚拟机
[root@kvm ~]# virsh shutdown hostname #关闭虚拟机,需要在虚拟机中安装acpid服务并启动
[root@kvm ~]# virsh destroy hostname #强制关闭电源
[root@kvm ~]# virsh undefine hostname #删除虚拟机