kvm虚拟化
云计算ips在当下算是最热门的技术,而虚拟化则是构架云计算的架构的基础技术不可或缺。
虚拟化是一个广义含义,是指将一台计算机虚拟成多台逻辑计算机,是一个简化管理优化资源的解决方案。
虚拟化的优点像硬件资源的充分利用以及业务的快速迁移更快的扩容缩绒等,这里就不去说了。
虚拟化的分类:
硬件虚拟化例如kvm
软件虚拟化例如openvz
平台虚拟化例如容器技术
全虚拟化
半虚拟化。
目前主流的虚拟化技术主要有:KVM、Xen、VMware、VirtualBox,虚拟化技术也越来越广泛的应用在企业中,例如Taobao、Google等。
虚拟化原理:
虚拟化解决方案的底部是要进行虚拟化的物理机器。这台机器可能直接支持虚拟化,也可能不会直接支持虚拟化;那么就需要系统管理程序 层的支持。
系统管理程序(Virtual machine monitor),或称为VMM,可以看作是平台硬件和操作系统的抽象化。
在某些情况中,这个系统管理程序就是一个操作系统;此时,它就称为主机操作系统。
上图是虚拟化的简单分层
kvm概述
kvm是基于虚拟化扩展(intelVT或amd-v)的x86硬件,是linux原生的全虚拟化的解决方案。
kvm本身不执行任何模拟,需要用户空间通过/dev/kvm接口设置一个客户机虚拟服务器的地址空间,模拟磁盘io以及网卡
KVM架构简图(来源于互联网)
kvm具体是怎么工作的呢?
首先我们要先说一下KVM和QEMU、Libvirt有什么关系。
上面我们说了什么是kvm,那qemu又是什么呢?
qemu也是一款虚拟化技术,单纯的qemu也可以完全实现一个虚拟机。kvm虽然很成熟了但是他在某些地方无法模拟出一台机器,他只提供cpu以及memory的模拟,所有需要借助qemu来模拟磁盘io以及网络设备。而且在性能上对kvm进行了优化。
libvirt又是什么呢。它是一系列提供出来的库函数,用以其他技术调用,来管理机器上的虚拟机。包括各种虚拟机技术,kvm、xen与lxc等,不同虚拟机技术就可以使用不同驱动,都可以调用libvirt提供的api对虚拟机进行管理。(我们创建的各种虚拟机都是基于libvirt库及相关命令去管理的。)
安装KVM
安装kvm之前需要开启bios虚拟化的支持
egrep 'vmx|svm' /proc/cpuinfo
如果输出的结果包含VMX,它是Intel处理器虚拟机技术的标志;
如果输出的结果包含SVM,它是AMD处理器虚拟机技术的标志;
如果你什么都没有得到,系统不支持虚拟化的处理,不能使用KVM。
另外需要安装epel源
rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum安装kvm
yum install –y qemu-kvm python-virtinst libvirt libvirt-python bridge-utils virt-manager qemu-kvm-tools virt-viewer virt-v2v libguestfs-tools
KVM网卡配置
KVM虚拟机网络配置的两种方式:
NAT模式,让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机。
Bridge模式,主机与主机之间,客户机与主机之间的通信都很容易,使虚拟机成为网络中具有独立IP的主机。
(虚拟机使用桥接方式后,都共享物理网卡,如果有大流量的访问,可+以在交换机和服务器上做网卡绑定,mode可以设置为4链路聚合)
配置网卡为br0桥接模式
在/etc/sysconfig/network-scripts/下修改ifcfg-eth0,添加如下信息:
DEVICE=eth0
HWADDR=00:0C:29:12:4D:30
TYPE=Ethernet
BRIDGE="br0"
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.0.23
NETMASK=255.255.255.0
GATEWAY=192.168.0.100
同时创建ifcfg-br0桥接网卡,内容如下:
DEVICE="br0"
HWADDR=00:0C:29:12:4D:30
BOOTPROTO=none
IPV6INIT=no
NM_CONTROLLED=no
ONBOOT=yes
TYPE="Bridge"
USERCTL=no
IPADDR=192.168.0.23
NETMASK=255.255.255.0
GATEWAY=192.168.0.100
启动libvirt服务
/etc/init.d/libvirtd start
支持基础环境安装完成。
创建第一个虚拟机
kvm支持两种硬盘格式:
raw:原始镜像不支持快照,支持空洞的特性。
qcow2:支持镜像快照,zlib磁盘压缩,AES加密等, I/O性能比RAW低。
无论哪种格式,磁盘的利用率来说,都是一样的,因为实际占用的块数量都是一样的。
创建第一块硬盘:
qemu-ima create -f raw /opt/kvm.raw 10G
创建一块raw硬盘
创建第一个虚拟机
virt-install --name=centos01 --ram 512 --vcpus=1 --disk path=/data/kvm.raw size=10,bus=virtio --accelerate --cdrom /data/iso/centos6.iso --vnc --vncport=5910 --vnclisten=0.0.0.0 --network bridge=br0,model=virtio --noautoconsole
Qcow2格式创建命令:
qemu-img create -f qcow2 /opt/kvm.qcow2 10G
virt-install --name=oelcentos02 --ram 512 --vcpus=1 --disk path=/opt/kvm.qcow2,format=qcow2,size=10,bus=virtio --accelerate --cdrom /data/iso/centos6.iso --vnc --vncport=5910 --vnclisten=0.0.0.0 --network bridge=br0,model=virtio –noautoconsole --no-acpi
virt-install参数说明:
—name指定虚拟机名称
—ram分配内存大小。
—vcpus分配CPU核心数,最大与实体机CPU核心数相同
—disk指定虚拟机镜像,size指定分配大小单位为G。
—network网络类型,此处用的是默认,一般用的应该是bridge桥接。
—accelerate加速
—cdrom指定安装镜像iso
—vnc启用VNC远程管理,一般安装系统都要启用
—vncport指定VNC监控端口,默认端口为5900,端口不能重复
—vnclisten指定VNC绑定IP,设置为0.0.0.0
—no-acpi官方推荐使用 —no-acpi 参数,原因是 qemu/kvm不太支持,可能造成 cpu 的占用偏高,但是win7不支持—-no-acpi参数(ACPI表示高级配置和电源管理接口)
此时通过vnc链接192.168.0.23:5900既可以开始安装服务器。
(启动安装过程中会启动dns服务)
kvm的日常管理
1.KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/ ,其中有一个目录叫做autostart是配置kvm虚拟机开机自启动目录。
2.查看kvm虚拟机状态
virsh list --all
3.KVM虚拟机开机
virsh start kvmname
4.KVM虚拟机关机或断电
virsh关机
virsh shutdown kvmname
强制断电
virsh destroy kvmname
5.配置开机自启动虚拟机
virsh autostar kvmname
6.导出KVM虚拟机配置文件
开机状态下
virsh dumpxml kvmname > /etc/libvirt/qemu/kvm02.xml
7.重新定义虚拟机配置文件
virsh define /etc/libvirt/qemu/kvm02.xml
8.编辑KVM虚拟机配置文件
virsh edit kvm02
virsh edit将调用vi命令编辑/etc/libvirt/qemu/kvm02.xml配置文件。也可以直接通过vi命令进行编辑,修改,保存。
9.复制一个虚拟机
关机状态下
第一步导出配置文件
virsh dumpxml kvmname > /etc/libvirt/qemu/kvm02.xml
第二步复制硬盘
cp kvm.raw kvm02.raw
第三步修改配置文件
virsh edit kvm02
要修改的项:
disk
name
uuid
mac
vnc
udev
注意网卡的参数可能是个坑
第四步重新定义配置文件
virsh define kvm02.xml
第五步启动虚拟机
以上是日常管理工作