虚拟化技术:

虚拟化技术类型:
    主机虚拟化:xen, kvm, virtualbox, ...;主机接口、基础设施
    容器(用户空间隔离): lxc(LinuX Container), openvz, ...docker 内核与用户空间,

隔离不好;不能取代主句虚拟化,vps不用容器,企业内部才用;
系统库虚拟化:wine, ...
应用程序级虚拟化:jvm, pvm,...
kvm讲解:
kernel-based vm:本来是硬件之上是操作系统内核,而装入kvm这个内核模块之后就将操作
系统内核感染变成了hypervisor(系统管理程序),即具有虚拟化和内核两种功能。然后在
上一层可以创建虚拟机,但是io虚拟化还是通过qeum模拟的;用户空间静态的是文件树,动
态的是进程树;强依赖于硬件虚拟化辅助技术;
容器讲解:
硬件平台-->操作系统内核-->用户空间
将用户空间进行拆分,每一块空间运行一个隔离的应用程序,这就是容器;
操作系统内核与用户空间之间需要加一层以管理容器,负责容器的创建与删除
容器与容器之间必须有隔离机制,防止一个关机导致的整个空间的关机
容器中一般只运行一个程序,程序关闭即容器关闭。决定能否使用容器的是内核。
中间管理层有lxc(LinuX container);
容器实质上是在一块空间中网络获取运行程序的伪根文件系统,进行运行单个程序;每次都
要安装,不太方便,故而继lxc又出现了docker,docker出了文件系统镜像仓库,直接下载即
可启动容器。docker之后去掉了lxc支持,研发出了libcontainer;之后标准化runC;容器编
排工具现在以k8s为主。
注意:IAAS是基础架构即服务,将主机通过Cloud OS进行整合协调为虚拟机调用实例以供用户
使用;PaaS是平台即服务,即cloud OS 之上的用户空间容器提供给用户使用,只需按照软件即
可;SaaS是软件即服务,用户直接调用浏览器页面就可以使用软件服务,而不用自己安装。相
似的还有数据库即服务、负载均衡即服务;

主机虚拟化:
CPU:
模拟:emulation, 虚拟机的arch与物理平台的arch可以不相同;qemu;
虚拟:virtualization,
完全虚拟化(full-virt)
BT: 二进制转换 (软件) 虚拟内核
HVM:硬件辅助的虚拟化(硬件)-1环运行物理机内核,0环让出来跑虚拟
机内核;
半(准)虚拟化 (para-virt)
GuestOS得明确知道自己运行于虚拟化技术,需要改内核。调用管理平台以
实现内核调用;
注意:CPU是通过EPT(扩展页表)和NPT(嵌入式页表),解决了从进程线性地址
转为虚拟机中的线性地址,再转换为实际主机的物理地址的多级转换问题;-1环实现了
CPU和虚拟内核的关联;tagged TLB实现了cpu的MMU(内存管理单元)的不同虚拟
机地址的识别,不用变虚拟机就清除MMU数据;虚拟机与模拟器的区别(以CPU为
例):环0和环3中,只有环0的特权指令才需要虚拟隐藏,而环3普通指令是直接可以
cpu上运行的,此为虚拟机。而模拟器是将整个CPU隐藏,模拟成另一种不同类型的
CPU;
内存:
MMU virtualization:
Intel: EPT, Extended Page Table
AMD: NPT, Nested Page Table

        TLB virtualization:
            tagged TLB

    IO:
        Emulation 
        Para-virtualization 半虚拟化,实现容易
        IO-through:IO透传
        注意:一个文件要被识别成一个磁盘,需要虚拟机软件模拟出一个适配器;虚拟机内

核也使用相应的驱动程序;当一个虚拟机要在磁盘上存储一个文件时,先发起虚拟机
系统调用,然后虚拟机将要存储的文件封装成相应的适配器协议放到磁盘,但是由于
此磁盘实质上是一个文件,故而通过实际主机将文件封装成磁盘协议的数据存储到硬
盘上;如果使用半虚拟化技术,就可以虚拟机告诉io存储这就是一个文件模拟的磁盘,
直接和文件接口通信就可以,不用进行封装,效率提高,并且容易实现虚拟机的迁
移;使用IO透传技术是在虚拟IO和实体IO直接通过桥梁连接,使用物理磁盘作为虚拟
磁盘,效率更加高,但是不易迁移;

网卡:
2个虚拟机三角形式连接到交换机上,虚拟机和交换机是通过一对虚拟的网卡进行通信
的,一个放在交换机上,一个放到虚拟机上,之后通过软件模拟的mac地址实现虚拟机
之间的通信;
仅主机:在实际主机上虚拟出一块网卡连接到交换机上,以进行虚拟机和主机间的通信
桥接:是将物理网卡当做交换机来使用,接收外界的一切请求
nat:是在物理主机上打开网络转发功能,并将虚拟机发到物理主机虚拟网卡的请求的原
地址进行地址转换,变成物理主机的联网地址,然后进行互联网请求。是把物理机当做
路由器来进行使用的;
两台主机中的虚拟机进行通信:
直接使用nat要经过2此地址转换,效率很低;所以又出现了一种叫做隧道的技术,
通过gre(通用路由封装)协议以解决此问题;gre是一种隧道转发技术,可以将一
个报文通过物理主机的2个网卡转发过去,mac层不改变;mac层通过gre封装又加
上传输层、ip层、以太网链路层,之后转发过去,拆开得到mac层和交换机有关,
通过交换机发到虚拟机;此过程不涉及地址的转换
如果在公有云中,2个主机中有虚拟机,又在同一个网段,容易被相互窃取数据。
因此有VLAN(虚拟局域网)技术将二层进行隔离,不允许访问数据。但是VLAN只
有四千多个,不够用,所以出现了VxLAN技术,自带路由封装功能。VxLan是构建
虚拟网络SDN(software defined network)的流行技术。还有NFV(网络功能虚拟
化),这2个技术都是将设备某个功能抽取出来,统一管理设备。虚拟化技术结合
可以进行云计算的构建;

注意:将多个主机中的虚拟机的虚拟化技术进行协调工作的上一个层为Cloud OS(云操
作系统);

主机虚拟化的类型:
    TYPE-I:
        于硬件级别直接运行hypervisor(系统管理程序);然后是虚拟机、程序
        xen, vmware ESX/ESXI

xen讲解:半虚拟化技术,需要修改内核才能使用,故而在windows上不能使用。需要在更
改内核后重启操作系统,一旦操作系统重启后,结构发生了变化,硬件层之上多个一个
hypervisor层进行cpu和内存的的虚拟化;但是hypervisor层没有提供管理接口和IO接口;
hypervisor层之上是重启后被挤压上去的操作系统(作为虚拟机内核使用)是Dom0(特权
域,有一部分管理功能),其他的虚拟机统称为Dom1,需要通过Dom0进行IO的虚拟调用管
理,CPU和内存可以通过hypervisor层进行调用;qemu是一个完整的虚拟机,还是一个模拟
器,可以模拟多种cpu,大小有1M,在此用于IO磁盘的模拟

    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 is an open source virtualizer that provides hardware emulation for the KVM hypervisor. 

    libvirt:Libvirt is a C toolkit to interact with the virtualization capabilities of recent versions of Linux (and other OSes). The main package includes the libvirtd server exporting the virtualization support.

        C/S:
            Client:
                libvirt-client
                virt-manager
            Daemon:
                libvirt-daemon
                快速使用kvm技术:
    注意:四层以下的如tcp、ip都是在内核级进行实现的
    安装使用KVM:
        判断CPU是否支持硬件虚拟化:
            # grep -i -E '(vmx|svm|lm)' /proc/cpuinfo       判定命令
                vmx:Intel VT-x  要想显示信息必须勾选设置中的cpu选项
                svm:AMD AMD-v
lm:load mod 即支持64位平台
注意:本身就是虚拟机,要进行虚拟化嵌套,就需要开放-1环通过设置中
cpu选项的Intel VT-x勾选来进行

    # yum install libvirt-daemon-kvm qemu-kvm virt-manager libvirt
    # modprobe kvm 
    # systemctl start libvirtd.service
    # virsh iface-bridge INTERFACE BRIDGE_NAME
    # virt-manager
 modinfo kvm    查看kvm模块信息
 cat /proc/cpuinfo  查看CPU信息
 qemu-img info c1.img       查看镜像文件的信息
 virsh list 查看当前在运行的虚拟机
  console centos7.0 控制台连接虚拟机
  xhost +   在要访问的目标屏幕一侧进行授权
 virt-manager & 访问图形界面
 ssh [email protected]      直接远程连接
     qemu-kvm:底层命令行管理,需要了解大量的选项和命令
 virsh:基于kvm字符设备文件的API又开发了另一管理接口libvirt,此接口支持c/s模型,
  可以在远程通过virsh进行连接到基于libvirt库的libvirtd接口进行操作;当然也可以开发图   

形界面;
virt-manager:远程图形工具,全程管理kvm,包括安装;而virsh则不能安装。需要在
本地使用,远程ssh如xshell是不能启动此图形界面工具的;
虚拟磁盘格式:raw、vmdk、vdi、qcow(qemu写时复制)、qcow2
qemu-img是进行虚拟磁盘管理工具
要点:
首先kvm.ko是个内核模块,需要被装入,装入后表现为一个字符设备文件;通过ioctl
系统调用接口被用户空间的qemu-kvm管理接口所调用;只适用于x86平台(intel和AMD
的);kvm.ko依赖于kvm-intel.ko或kvm-amd.ko;kvm已被红帽编译为内核模块,只是没有
装载。
然后需要支持硬件虚拟化辅助技术
上图为kvm的使用架构
cpu在宿主机上被处理为一个线程,在虚拟机上则显示为内核
云平台工作机制:是将每一类系统镜像做成模板放到共享存储中,选中以后就从共享存储下载镜像模板,而在镜像启动后创建的文件数据不存储在本地,而是存储到特定的远程存储中;这个远程存储是由物理卷、卷组、逻辑卷构成的的存储池,每个机器选定外部存储大小时就从存储池分配一定的空间给云机器。存储数据不易丢失。
kvm中硬盘和网卡支持热插拔
总结:
虚拟化技术的分类:
(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, ...

主机虚拟化:Emulation, Full Virtualization, Para-Virutalization

    Type-I:Hypervisor直接运行于硬件;
    Type-II:VMM运行主机OS之上;

云栈的类别:
    IaaS, PaaS, SaaS, FWaaS, DBaaS, LBaaS, ...

KVM(02)

kvm: Kernel-based Virtual Machine
        Qumranet公司 --> RedHat
        (1) X86_64
        (2) HVM: 
            Intel VT
            AMD AMD-v

    KVM的组件:
        两类组件:
            (kvm.ko)/dev/kvm:工作为hypervisor,在用户空间可通过系统调用ioctl()与内核中的kvm模块交互,从而完成虚拟机的创建、启动、停止、删除等各种管理功能;
            qemu-kvm进程:工作于用户空间,用于实现IO设备模拟;用于实现一个虚拟机实例;

    KVM模块load进内存之后,系统的运行模式:
        内核模式:GuestOS执行IO类的操作时,或其它的特殊指令操作时的模式;它也被称为“Guest-Kernel”模式;
        用户模式:Host OS的用户空间,用于代为GuestOS发出IO请求;
        来宾模式:GuestOS的用户模式;所有的非IO类请求;

    安装使用KVM:
        判断CPU是否支持硬件虚拟化:
            grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
                vmx:Intel VT-x
                svm:AMD AMD-v

        运行中的一个kvm虚拟机就是一个qemu-kvm进程,运行qemu-kvm程序并传递给它合适的选项及参数即能完成虚拟机启动,终止此进程即能关闭虚拟机;

        kvm工具栈:
            qemu:
                qemu-kvm 
                qemu-img
            libvirt:
                GUI:virt-manager, virt-viewer
                CLI: virsh, virt-install 

                C/S:
                    libvirtd

        安装:
            (1) 装载内核模块
                kvm:核心模块
                kvm-intel|kvm-amd

使用virt-manager管理KVM
    # yum install qemu-kvm libvirt-daemon-kvm  virt-manager
    # modprobe kvm 

    # systemctl start libvirtd.service 

    # virt-manager &

网络虚拟化:
    二层的虚拟网络设备:
        kernel net bridge/brctl:内核提供的非智能化二层交换机,非常简单的网桥;软交换机
        openvswitch:简称ovs开源虚拟交换机,功能强大,支持软交换机、VLAN、

VxLAN、gre、float control(流控)如vps的带宽控制、SDN中的交换机使用

    CentOS 7创建物理桥,使用内核自带的桥接模块实现:
        桥接口配置文件保留地址信息;
            TYPE=Bridge
            Device=BRIDGE_NAME

        物理网卡配置文件:
            删除地址、掩码和网关等相关的配置,添加
            BRIDGE=BRIDGE_NAME

        重启网络服务即可:

kvm的管理工具栈:
    qemu:
        qemu-kvm
        qemu-img 
    libvirt:
        GUI:virt-manager
        CLI:virsh, virt-install

    使用qemu-kvm管理vms:

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

        qemu-kvm命令语法:
            qemu-kvm [options] [disk_image]
            yum install qemu-kvm    安装qemu-kvm软件
rpm -ql qemu-kvm    列出安装软件的文件

ln -sv /usr/libexec/qemu-kvm /usr/bin/ 创建软链接,方便启动
选项有很多类别:
标准选项、块设备相关选项、显示选项、网络选项、...

                标准选项:
                    -machine [type=]name:-machine help来获取列表,用于指定模拟的主机类型; 
                    -cpu cpu:-cpu help来获取列表;用于指定要模拟的CPU型号;

qemu-kvm -cpu ? 显示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:磁盘映像文件的格式;

                    CentOS磁盘镜像文件下载:
                        https://cloud.centos.org/centos/7/images/

                显示选项:
                     -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

                网络选项:
                    -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 2
                            fi  

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

实验1:实现qemu-kvm创建虚拟机,并将网络搭建为仅主机模式
brctl addbr mybr0 添加桥接网卡
ip link set mybr0 up 激活桥接网卡
ip link show 显示网卡信息
ip addr add 10.1.0.1/16 dev mybr0 在网卡上添加ip地址
vim /etc/qemu-ifup 编辑脚本文件以传输2个虚拟网卡在虚拟机和宿主机之间
#!/bin/bash
#
bridge=mybr0

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
bash -n /etc/qemu-ifup 检查脚本的语法
chmod +x /etc/qemu-ifup 给脚本添加执行权限
mkdir /data/VMs/c1 -pv 创建存放系统镜像的目录
mv cirros-no_cloud-0.3.0-x86_64-disk.img c1.img 将镜像改简短的名
qemu-img info c1.img 查看镜像文件的信息
qemu-kvm -name c1 -m 128 -cpu host -smp 2 -drive file=/data/VMs/c1/c1.img,if=virtio,media=disk,cache=writeback,format=qcow2 -net nic,macaddr=52:54:00:88:88:88,model=virtio -net tap,script=/etc/qemu-ifup -vnc :0
vncviewer 172.18.62.64:0 用vnc连接5900端口,0桌面
登录后查看ip地址,发现没有,可以手动添加,也可以dhcp服务进行分配
dhcp:
yum install dnsmasq
dnsmasq --listen-address=172.18.62.64,127.0.0.1 --dhcp-
range=10.1.0.100,10.1.0.150,48h --dhcp-option=3,10.1.0.1
poweroff 关机重启创建的虚拟机,发现ip地址从ip地址池中自动分配好了
注意:如果出现如下错误,就说明已经有dnsmasq进程启动了,需要先杀死进程
dnsmasq: failed to bind DHCP server socket: Address already in use
手动分配:
ifconfig eth0 10.1.0.2 up
设置nat模式:
echo 1 > /proc/sys/net/ipv4/ip_forward 开启核心转发功能
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j MASQUERADE 设置地址转换伪装
如此可以直接通过虚拟机ping通外网
原始简单添加网桥br0: 不易断开连接
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens37 ifcfg-br0
vim ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
BRIDGE=br0 关键
vim ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.43.64
NETMASK=255.255.255.0
GATEWAY=192.168.43.1
DNS1=114.114.114.114
DNS2=8.8.8.8
systemctl restart network 重启网络,发现没有断开
cp qemu-ifup qemu-ifup-br0 将虚拟网卡的一半传输,桥接到外网
vim qemu-ifup-br0
bridge=br0 将mybr0改为br0
qemu-kvm -name c1 -m 128 -cpu host -smp 2 -drive
file=/data/VMs/c1/c1.img,if=virtio,media=disk,cache=writeback,format=qcow2 -net
nic,macaddr=52:54:00:88:88:88,model=virtio -net tap,script=/etc/qemu-ifup-br0 -vnc :0 -
daemonize 再次启动,可以得到桥接外网的虚拟机

示例1:
~]# qemu-kvm -name c2 -smp 2,maxcpus=4,sockets=2,cores=2 -m 128 -drive file=/images/kvm/cos-i386.qcow2,if=virtio -vnc :1 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:11 -net tap,script=/etc/qemu-ifup
示例2:
~]# qemu-kvm -name winxp -smp 1,maxcpus=2,sockets=1,cores=2 -m 1024 -drive file=/data/vms/winxp.qcow2,media=disk,cache=writeback,format=qcow2 file=/tmp/winxp.iso,media=cdrom -boot order=dc,once=d -vnc :1 -net nic,model=rtl8139,macaddr=52:54:00:00:aa:11 -net tap,ifname=tap1,script=/etc/qemu-ifup -daemonize 虚拟机中安装windows,很慢。
半虚拟化:virtio
建议:Network IO, Disk IO使用virtio,性能会有显著提升;

            dnsmasq:    是dhcp服务器也提供dhcp转发功能
                listen-address=192.168.1.132,127.0.0.1
                dhcp-range=192.168.1.50,192.168.1.150,48h
                dhcp-option=3,192.168.0.1   指定网关

        virsh命令:
            虚拟机的生成需要依赖于预定义的xml格式的配置文件;其生成工具有两个:virt-manager, virt-install; 

            virsh [OPTION]... COMMAND [ARG]..

            子命令的分类:
                Domain Management (help keyword 'domain')
                Domain Monitoring (help keyword 'monitor')
                Host and Hypervisor (help keyword 'host')
                Interface (help keyword 'interface')
                Networking (help keyword 'network')
                Network Filter (help keyword 'filter')
                Snapshot (help keyword 'snapshot')
                Storage Pool (help keyword 'pool')
                Storage Volume (help keyword 'volume')

            Domain Management (help keyword 'domain')
                创建虚拟机:
                    create:从xml格式的配置文件创建并启动虚拟机;而且要准备好镜像文件
    virsh help create   查看create的用法

virsh create --console /etc/libvirt/qemu/centos6.0.xml 根据配置文件创建并启动
虚拟机;
virsh console centos6.0 显示虚拟机centos6.0
define:从xml格式的配置文件创建虚拟机;创建但是不启动;
virsh define /etc/libvirt/qemu/
停止:
destroy:强行关机; 销毁实例
virsh destroy centos6.0
shutdown:关机;
virsh shutdown centos6.0
启动:
start:启动
virsh start centos6.0
reboot:重启;
virsh list --all 显示所有的虚拟机
undefine:删除虚拟机; 配置文件也进行删除

        suspend/resume:暂停于内存中,或继续运行暂停状态的虚拟机;
                    真正实现的效果:pause/unpause;与vmware中的挂起不是一个意思,后者的挂起是

指将当前运行状态信息保存到磁盘中,在要运行虚拟机时再将其加载到内存中;

        save/restore:保存虚拟机的当前状态至文件中,或从指定文件恢复虚拟机;
virsh save centos7.0 /tmp/snap.txt
                virsh restore /tmp/snap.txt
        console:连接至指定domain的控制台;
                virsh console centos7.0
                域的设备资源管理:
                    cpu-stats
                    vcpuinfo
                    vcpucount
                    setvcpus
                    vcpupin

                    setmaxmem
                    setmem
                    virsh dumpxml   centos7.0   查看centos7.0虚拟机的镜像配置文件

                    attach-disk/detach-disk/domblklist:磁盘设备的热插拔;
            qemu-img create -f qcow2 -o ? ./second.img  查看创建磁盘时的-o有哪些选项
qemu-img create -f qcow2 -o size=20G,preallocation=metadata ./second.img    
创建磁盘文件;
qemu-img info second.img    查看镜像文件的信息
 virsh help attach-disk     添加镜像文件到虚拟机命令的用法
 virsh attach-disk centos7.0 /app/second.img vdb    添加镜像文件为vdb到虚拟
 机中;
 virsh domblklist centos7.0     查看centos7.0虚拟机的磁盘镜像文件
 virsh detach-disk centos7.0 /app/second.img    从虚拟机中分离磁盘
                    attach-interface/detach-interface/domiflist:网络接口设备的热插拔;
                        type:bridge
                        source:BRIDGE_NAME

brctl show 显示桥接控制信息
brctl addbr mybr0 添加桥接网卡
ip link set mybr0 up 激活桥接网卡
ip link show 显示网卡信息
ip addr add 10.1.0.1/16 dev mybr0 在网卡上添加ip地址

             virsh attach-interface centos7.0 bridge virbr0 创建一个桥接网卡

ifconfig eth1 down
virsh detach-interface centos7.0 bridge --mac 52:54:00:C0:AE:98 分离一个桥
接网卡;
注意 :无须事先创建网络接口设备;

            Domain Monitoring (help keyword 'monitor')
                domiflist
                domblklist
                ...

    图形管理工具: 跨节点管理虚拟机
        kimchi:基于H5研发web GUI; virt-king;轻量级
        OpenStack: IaaS 重量级组件,50台服务器以上用比较好
        oVirt:功能强大的管理图形界面工具,相对于openstack来说比较轻量
        proxmox:轻量好用

        管理工具栈:https://www.linux-kvm.org/page/Management_Tools