2017 11-27 kvm虚拟化技术

一.虚拟化技术的介绍

(1)虚拟化技术类型:

1.主机虚拟化:xen,kvm.virtualbox.openv
2.系统虚拟化:wine
3.容器(用户隔离空间):lxc(Linux container),openv
4.应用程序级虚拟化:jvm,pvm
5.模拟器:qemu

(2)主机虚拟化

1.CPU:

模拟:emulation, 虚拟机的arch与物理平台的arch可以不相同;qemu;
虚拟:virtualization
完全虚拟化(full-virt)
BT: 二进制转换 (软件)
HVM:硬件辅助的虚拟化(硬件)
半(准)虚拟化 (para-virt)
GuestOS得明确知道自己运行于虚拟化技术

2.cpu环的概念

cpu环0,cpu环1,cpu环2,cpu环3


2017 11-27 kvm虚拟化技术_第1张图片
搜狗截图20171202162920.png

解释:cpu从里到外分为环0,环1,环2,环3,一般情况下环和环2不进行工作,环3会执行一些简单的普通命令,而环0则执行一些特殊命令。例如执行一个计算命令2*3,该命令就会直接在环3上执行,但是一旦关机后该结果就会消失,如果想要执行io读写命令,此时环0就会工作,将计算结果存储到磁盘上,这一过程的实现是通过环0能够执行特殊指令去调用内核空间实现存储。,而用户空间没有权限执行。
注意:对此引入了cpu级别的硬件虚拟化概念,就是在环0内又加入了环-1,环0用来运行虚拟机的操作系统,而环-1则运行宿主机的操作系统。因此常常以cpu环是否存在环-1来判断该系统是否支持虚拟化

3.主机虚拟化类型

  • TYPE-I:基于硬件级别直接运行hypervisor
    例: xen,vmware,ESX/ESXI
    Hypervisor:是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的"元"操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor)。Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
  • TYPE-II:
    于硬件级别运行一个OS(Host OS),而此OS上运行一个VMM;
    例:vmware workstation, virtualbox, kvm
  • Linux目前流行的开源虚拟化技术解决方案:
    主机虚拟化:xen, kvm, virtualbox
    容器级:lxc, libcontainer, runC, openvz
    模拟器:qemu
  • KVM的组件:
    kvm.ko:模块
    API:系统应用接口,系统留给应用程序的一个调用接口
    qemu-kvm:用户空间的工具程序
    qemu-kvm是一个开源仿真器,为kvm虚拟机监控程序提供了硬件仿真
    libvirt:是一套免费的,开源的支持linux系统的主流虚拟化工具的C函数库,其为包括xen,kvm等各种虚拟化工具提供一套方便的可靠的编程接口,本身属于工具,而是一种可以建立工具来管理客户操作系统的API

4.快速使用kvm技术

  • 首先yum install libvirt-daemonize-kvm qemu-kvm virt-manager


    2017 11-27 kvm虚拟化技术_第2张图片
    搜狗截图20171202170555.png
  • 此时加载kvm模块,modprobe kvm
  • systemctl start libvirtd.service
  • grep -i -E '(vmx|svm|lm)' /proc/cpuinfo——cpu是否支持虚拟化


    2017 11-27 kvm虚拟化技术_第3张图片
    搜狗截图20171202171118.png
  • lsmod |grep kvm——查看kvm类型


    2017 11-27 kvm虚拟化技术_第4张图片
    搜狗截图20171202171426.png
  • 创建一个物理网桥
    拓扑图解释原理:


    2017 11-27 kvm虚拟化技术_第5张图片
    搜狗截图20171202174517.png

    因此在创建虚拟机之前要先创建一个虚拟网卡(物理网桥),这是因为在安装虚拟机操作系统时,需要安装PXE系统,那么就需要该虚拟机具有外部通讯的功能,只有这样才能DhCP获取ip地址从而实现自动化安装,物理网桥的作用就是一个虚拟网卡,通过物理交换机和外部进行信息的交换与通讯

  • cd /etc/sysconfig/network-scripts
    vim ifcfg-ens37
    NAME=ens37
    DEVICE=ens37
    ONBOOT=yes
    IPADDR=172.18.250.223——将该地址删除,没有ip地址就相当于一个交换机/
    BRIDGE=br0——网桥为br0
  • Vim ifcfg-br0——创建物理网桥
    NAME=br0
    DEVICE=br0
    ONBOOT=yes
    IPADDR=172.18.250.223
    DNS=172.18.0.1
    PREFIX=16
    此时br0被设置成物理网桥(虚拟网卡)
  • 重启network
    ip a


    2017 11-27 kvm虚拟化技术_第6张图片
    搜狗截图20171202175618.png

    brctl show


    2017 11-27 kvm虚拟化技术_第7张图片
    搜狗截图20171202175749.png
  • 在 VMware Workstation上
    virt-manager


    2017 11-27 kvm虚拟化技术_第8张图片
    搜狗截图20171202180152.png

    创建虚拟机


    2017 11-27 kvm虚拟化技术_第9张图片
    搜狗截图20171202200739.png

    选择内存大小和cpu数量
    2017 11-27 kvm虚拟化技术_第10张图片
    搜狗截图20171202200839.png

    选择虚拟机磁盘大小
    2017 11-27 kvm虚拟化技术_第11张图片
    搜狗截图20171202200931.png

    配置主机名,选择网桥


    2017 11-27 kvm虚拟化技术_第12张图片
    搜狗截图20171202201041.png

    开始安装
    2017 11-27 kvm虚拟化技术_第13张图片
    搜狗截图20171202201118.png

    实现快速安装

5.总结

虚拟化技术的分类:
(1) 模拟:Emulation
Qemu, PearPC, Bochs, ...
(2) 完全虚拟化:Full Virtualization,Native Virtualization
BT/hvm
VMWare Workstation, VirtualBox, VMWare Server, Parallels Desktop, KVM(hvm), XEN(hvm)
(3) 半虚拟化:Para-Virutalization
特点:GuestOS(运行在虚拟机上的操作系统)明确知道自己运行虚拟机之上;
xen, UML(user-mode linux)
(4) 容器级虚拟化:
LXC, OpenVZ, libcontainer, runC, rkt, Linux V Servers, Virtuozzo, ...
(5) 库级别虚拟化:
wine
(6) 程序级虚拟化
jvm, pvm, ...

二.通过磁盘镜像文件实现虚拟机的下载

(1)镜像文件的下载地址:https://launchpad.net/cirros/
下载的镜像文件:http://download.cirros-cloud.net/0.3.0/cirros-0.3.0-x86_64-disk.img
(2)在宿主机上执行qemu-img -h来查看磁盘镜像文件的格式及创建选项,一般使用qcow2格式。其中co=copy,w=write.是一种非常高级的格式,支持镜像文件的压缩加密及快照等功能
(3)开始创建
mkdir -pv /app/vm/images,cd到该目录下
开始执行qemu-img create -f qcow2 -o ? /app/vm/images/test.qcow2
解释上述命令:创建磁盘镜像文件时需要的选项并且如何查询帮助,-f代表文件的格式类型,-o代表选项并且后面要加?,后面要接preallocation,表示有关镜像文件的分配,其中off表示不分配内容,使用时再分配,而metadata表示只分配元数据,full表示指定分配多大空间。一般情况下选择metadata
具体的命令操作: qemu-img create -f qcow2 -0 size=120G,preallocation=metadata /app/vm/images/test.qcow2
创建成功后执行ll -h来查看

2017 11-27 kvm虚拟化技术_第14张图片
搜狗截图20171202211151.png

(4)开始图形化安装虚拟机
virt-manager
其他选择与之前快速安装虚拟机类似,只是在选择磁盘大小时选择第二个select or create cutom storage
然后加入路径 /app/vm/images/test.qcow2
然后其他选项不变进行安装即可
(5)以上方式是人为自创建得一个镜像文件,接下来通过下载的镜像的文件来实现
(6)mkdir /app/vm/iamges2,将cirros-0.3.0-x86_64-disk.img镜像文件下载当前目录下,并且 cp cirros-0.3.0-x86_64-disk.img
c1.img 和c2.img
通过qemu-img info c1.img来查看信息
2017 11-27 kvm虚拟化技术_第15张图片
搜狗截图20171202213331.png

在物理机上执行virt-manager
2017 11-27 kvm虚拟化技术_第16张图片
搜狗截图20171202213446.png

选择虚拟机镜像文件路径
2017 11-27 kvm虚拟化技术_第17张图片
搜狗截图20171202213546.png

配置内存大小和cpu数量
2017 11-27 kvm虚拟化技术_第18张图片
搜狗截图20171202213605.png

修改主机名,选择网桥等选项后开始安装
出现如图选项后根据默认的用户名和密码进行登录
2017 11-27 kvm虚拟化技术_第19张图片
搜狗截图20171202214114.png

进行sudo su -切换成root用户
ip a 发现已经配置好网址,此时可以利用c2.img再创建一个虚拟机进行相互之间的通讯

三.使用qemu-kvm来手动安装虚拟机

(1)使用qemu-kvm管理vms:

Qemu:
处理器模拟器
仿真各种IO设备
将仿真设备连接至主机的物理设备
提供用户接口

(2)标准选项的介绍

qemu-kvm命令语法:
qemu-kvm [options] [disk_image]
选项有很多类别:
标准选项、块设备相关选项、显示选项、网络选项、...

  • 标准选项:
    -machine [type=]name:-machine help来获取列表,用于指定模拟的主机类型;
    -cpu cpu:-cpu help来获取列表;用于指定要模拟的CPU型号;
    -smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]:指明虚拟机上vcpu的数量及拓扑;
    -boot [order=drives][,once=drives][,menu=on|off] [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
    order:各设备的引导次序:c表示第一块硬盘,d表示第一个光驱设备;-boot order=dc,once=d
    -m megs:虚拟机的内存大小;
    -name NAME:当前虚拟机的名称,要惟一;
  • 块设备相关的选项:
    -hda/-hdb file:指明IDE总线类型的磁盘映射文件路径;第0和第1个;
    -hdc/-hdd file:第2和第3个;
    -cdrom file:指定要使用光盘映像文件;
    -drive [file=file][,if=type][,media=d][,index=i] [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]:
    file=/PATH/TO/SOME_IMAGE_FILE:映像文件路径;
    if=TYPE:块设备总线类型,ide, scsi, sd, floppy, virtio,...
    media=TYPE:介质类型,cdrom和disk;
    index=i:设定同一类型设备多个设备的编号;
    cache=writethrough|writeback|none|directsync|unsafe:缓存方式;
    format=f:磁盘映像文件的格式;
  • 显示选项:
    -display type:显示的类型,sdl, curses, none和vnc;
    -nographic:不使用图形接口;
    -vga [std|cirrus|vmware|qxl|xenfb|none]:模拟出的显卡的型号;
    -vnc display[,option[,option[,...]]]]:启动一个vnc server来显示虚拟机接口; 让qemu进程监听一个vnc接口;
    display:
    (1) HOST:N
    在HOST主机的第N个桌面号输出vnc;
    5900+N
    (2) unix:/PATH/TO/SOCK_FILE
    (3) none
    options:
    password:连接此服务所需要的密码
    -monitor stdio:在标准输出上显示monitor界面;
    Ctrl-a, c:在console和monitor之间切换;
    Ctrl-a, h

(3)qemu-kvm的使用

1.首先如果要执行qemu-kvm命令时,要先执行 in -sv /usr/libexec/qemu-kvm /usr/bin/,链接到/usr/bin/的path路径,可以让qemu-kvm命令生效
2.开始执行命令
qemu-kvm -name c2 -m 64 -smp 2,cores=1(内核数),sockets=1(槽数) -drive file=/vm/images2/c2.img,if=virtio(半虚拟化),media=disk -nographic(不启用图形)
开启之后会进行30多次的连接失败后,才能成功登陆,然后进入虚拟机状态
执行ctrl -a x:退出模拟器状态
ctrl -a h :查看帮助
ctrl -a c :宿主机与虚拟机之间进行切换
3.针对上述情况如果想要快速登录,则要在ftp上下载cirros-0.3.0-i386-disk.img(经过处理后的镜像)
mkdir -pv /app/vm/images3/,并cd 该目录下
cp cirros-0.3.0-i386-disk.img c1.img c2.img
4.yum install tigervnc
执行命令:qemu-kvm -name c1 -smp 2 -m 64 -drive file=/app/vm/images3/c1.img,if=virtio,media=disk -vnc :0(代表vnc监听的端口默认为5900,其中最后一个0代表第一个终端) -daemonize


2017 11-27 kvm虚拟化技术_第20张图片
搜狗截图20171202221302.png

在物理机上执行vncviewer :0,虚拟机登陆成功

四.网络选项的设置

(1)网络选项:

-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
为虚拟机创建一个网络接口,并将其添加至指定的VLAN;model=type:指明模拟出的网卡的型号,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio;
-net nic,model=?
macaddr=mac:指明mac地址;52:54:00:
-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:
通过物理的TAP网络接口连接至vlan n;
script=file:启动虚拟机时要执行的脚本,默认为/etc/qemu-ifup
downscript=dfile:关闭虚拟机时要执行的脚本,/etc/qemu-ifdown
ifname=NAME:自定义接口名称;
/etc/qemu-ifup

#!/bin/bash
#
bridge=br0
if [ -n "$1" ];then
ip link set $1 up
sleep 1
brctl addif $bridge $1
[ $? -eq 0 ] && exit 0 || exit 1
else
echo "Error: no interface specified."
exit 1
fi  

其它选项:
-daemonize:以守护进程运行;

(2)通过网络选项实现创建虚拟机

1.cd /app/vm/images3 cp c2.img c3.img

vim /etc/qemu-ifup

#!/bin/bash
#
 bridge=vnet0
 if [ -n "$1" ];then
 ip link set $1 up
  sleep 1
  brctl addif $bridge $1
  [ $? -eq 0 ]&& exit 0 || exit 1
  else
  echo "Error: no interface specified."
  exit 2
  fi

2.创建物理网桥(虚拟网卡)

brctl addbr vnet0
ip link set vnet0 up


搜狗截图20171202222550.png

vim /etc/qemu-ifdown——拆除网卡

#!/bin/bash
#
 bridge=vnet0
 if [ -n "$1" ];then


  brctl delif $bridge $1
  [ $? -eq 0 ]&& exit 0 || exit 1
  else
  echo "Error: no interface specified."
  exit 2
  fi

注意:两个脚本都要加执行权限

3.执行命令

  • qemu-kvm -name c1 -m 64 -smp 2 -drive file=/app/vm/images3/c1.img,if=virtio,media=disk -vnc :0 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:10(mac地址52:54:00:00为固定的) -net tap,script=/etc/qemu-ifup
  • qemu-kvm -name c2 -m 64 -smp 2 -drive file=/app/vm/images3/c2.img,if=virtio,media=disk -vnc :0 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:11(mac地址要改变)-net tap,script=/etc/qemu-ifup
    在物理机上执行vncviewer :0


    2017 11-27 kvm虚拟化技术_第21张图片
    搜狗截图20171202223736.png

    为了实现通讯为该虚拟机配置ip地址
    ifconfig eth0 10.1.0.1/24 up
    在另一台虚拟机上 ifconfig eth0 10.1.0.2/24 up
    此时两台虚拟机可以进行Ping命令

4.为vnet0配置ip地址

ifconfig vnet0 10.1.0.254/24 up
此时vnet0网卡既可以作为交换机,也可以作为虚拟网卡
拓扑图解释:


2017 11-27 kvm虚拟化技术_第22张图片
搜狗截图20171202224837.png

在宿主机上创建了一个网桥(vnet0),如果不给这个网桥配置ip地址,那就相当于一个交换机,两个虚拟机通过交换机可以进行ping命令,但是不能和宿主机进行通讯,因此为网桥配置ip地址后就可以实现虚拟机与宿主机之间的通讯了,此时就相当于一个仅主机模式,如果通过iptables策略开启snat策略实现跳转的话,就可以和外部进行通讯,此环境就相当于nat模式

5在虚拟机上分别将网关指向虚拟网卡的ip地址

ip route add default via 10.1.0.254/24
此时虚拟机和宿主机就可以实现ping命令,此时相当于一个仅主机模式,如果想要实现nat模式就要设置ipatbles策略
开启宿主机的路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
添加iptables的snat规则
iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source 172.18.250.223
此时在虚拟机上ping 172.18.0.1可以Ping通

五.实现虚拟机的自动分配地址

(1)首先查看netns帮助
ip netns help


2017 11-27 kvm虚拟化技术_第23张图片
搜狗截图20171203151626.png

netns主要是可以创建一个新的空间,创建一个新的网络环境
例: ip netns add router0——创建一个名为router0的网络空间,和宿主机无关系
使用ip netns exec router0 ifconfig -a来查看新创建的空间


2017 11-27 kvm虚拟化技术_第24张图片
搜狗截图20171203152136.png

(2)为router0添加虚拟网卡
ip linkn add myeth1 type veth peer name myeth2
创建的网卡是成对出现

ip a查看


搜狗截图20171203152629.png

(3)将其中一个网卡添加到router0的网络空间中
ip link add myeth2 netns router0
2017 11-27 kvm虚拟化技术_第25张图片
搜狗截图20171203152808.png

(4)修改网卡名
ip netns exec router0 ip link set dev myeth2 name eth0 ——将router0中的myeth2改名为eth0
2017 11-27 kvm虚拟化技术_第26张图片
搜狗截图20171203153213.png

(5)为网卡配置ip地址
ip netns exec router0 ifconfig eth0 10.2.0.253/24 up
ifconfig myeth1 10.2.0.252/24 up
2017 11-27 kvm虚拟化技术_第27张图片
搜狗截图20171203153718.png

ping命令测试
2017 11-27 kvm虚拟化技术_第28张图片
搜狗截图20171203153755.png

以上操作属于容器类型的虚拟化,作为了解,下面介绍虚拟机的自动获取ip地址的方式

dnsmasq

通过dnsmasq实现自动获取ip地址
yum install dnsmasq
命令: dnsmasq --listen-address 10.2.0.253,127.0.0.1 --dhcp-range=10.1.0.11,10.1.0.50,24h(地址有效时间) --dhcp-option=3(就是网关的意思),10.2.0.253
qemu-kvm -name c1 -m 64 -smp 2 -drive file=/app/vm/images3/c1.img,if=virtio,media=disk -vnc :0 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:10 -net tap,script=/etc/qemu-ifup
在物理机执行vncviewer :0
就会发现ip地址已经自动获取
如果将 /etc/qemu-ifup脚本中的bridge=vnet0改为br0,再执行 qemu-kvm -name c1 -m 64 -smp 2 -drive file=/app/vm/images3/c1.img,if=virtio,media=disk -vnc :0 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:10 -net tap,script=/etc/qemu-ifup,会发现虚拟机地址是172范围内的


2017 11-27 kvm虚拟化技术_第29张图片
搜狗截图20171203160127.png

六.virsh命令的应用

(1)虚拟机的生成需要依赖于预定义的xml格式的配置文件
生成工具: virt-manager,virt-install
因此要安装 yum install virt-install virt-manager
cd /etc/libvirt/qemu/——查看xml格式的配置文件
(2)创建新的虚拟机,使用


2017 11-27 kvm虚拟化技术_第30张图片
搜狗截图20171203161017.png

重新创建一个名为c2的虚拟机,方式同之前的方式一样
此时在/etc/libvirt/qemu/下会有一个c2.xml配置文件
(3)通过已有的.xml文件来生成一个新的虚拟机
使用virsh命令实现
首先来介绍virsh命令的使用


2017 11-27 kvm虚拟化技术_第31张图片
搜狗截图20171203161515.png

list --all
2017 11-27 kvm虚拟化技术_第32张图片
搜狗截图20171203161730.png

destroy c2:执行该命令就可以将c2虚拟机关闭
start c2:执行start命令就会重新开启虚拟机
virsh console c2:直接连到虚拟机
2017 11-27 kvm虚拟化技术_第33张图片
搜狗截图20171203162329.png

执行ctrl ]就会剥离终端(注意是剥离终端,但是虚拟机还在运行)


2017 11-27 kvm虚拟化技术_第34张图片
搜狗截图20171203162602.png

(4)开始手动创建xml配置文件
cd /etc/libvirt/qemu
cp c2.xml template.xml
vim template.xml
2017 11-27 kvm虚拟化技术_第35张图片
搜狗截图20171203163042.png

virsh create template.xml --console 创建并登录
创建并登录成功后退出并进入virsh中,执行all --list发现没有template虚拟机,因此要将名字改为c3后再加入进来
cp template.xml c3.xml
virsh define /etc/libvirt/qemu/c3.xml
再次list --all查看
2017 11-27 kvm虚拟化技术_第36张图片
搜狗截图20171203163530.png

创建成功,这样就不需要每次都执行qemu-kvm -name等操作来开启虚拟机了,只需要进入visrh,执行start name 和destroy name来实现开启和关闭命令
(5)其他常用命令介绍
dumpxml c2
2017 11-27 kvm虚拟化技术_第37张图片
搜狗截图20171203163921.png

save:挂起
suspend:暂停(暂时存储到内存中),如果关机内容就会丢失
resume:重新运行
例:suspend c2

resume c2


2017 11-27 kvm虚拟化技术_第38张图片
搜狗截图20171203164406.png

使用save命令
开启另一个终端
virsh console c2
执行ping 172.18.0.1,然后ctrl ]退出虚拟机终端
此时在原终端上执行 save c2 /tmp/c2.dump --running——将ping命令的状态保存的路径
之后只要执行restore /tmp/c2.dump --running就可以恢复之前的状态
2017 11-27 kvm虚拟化技术_第39张图片
搜狗截图20171203165014.png

setvcpu——增加虚拟机数量
例 setvcpu c2 2,但是并不是想设置几个都可以,这是和之前的创建时就固定好的,使用setvcpu只是要开启几个cpu的意思
dominfo c2
2017 11-27 kvm虚拟化技术_第40张图片
搜狗截图20171203165415.png

实现热插拔设备的命令操作
在正在运行的c2虚拟机上再加入一个.img的镜像文件,打开另一个终端
cd /app/vm/images3
qemu-img create -f qcow2 -o size=20G,preallocation=metada ./test.img
回到之前的终端 执行domblklist c2
domblkinfo c2 vda——查看磁盘信息
2017 11-27 kvm虚拟化技术_第41张图片
搜狗截图20171203170706.png

attach-disk c2 /app/vm/images3/test.img vdb
2017 11-27 kvm虚拟化技术_第42张图片
搜狗截图20171203170717.png

执行detach-disk c2 vdb拆除该磁盘
2017 11-27 kvm虚拟化技术_第43张图片
搜狗截图20171203170742.png

网卡热插拔
attach-interface c2 bridge vnet0 --model virto
detach-interface bridge --mac——根据指定的mac地址来进行拆除
注意:
hda /app/c1.img #hda时IDE硬盘,在这里不支持热插拔
vda /app/c4.img #注意vda格式的是半虚拟化的支持热插拔

你可能感兴趣的:(2017 11-27 kvm虚拟化技术)