KVM

1、虚拟化技术:

虚拟化技术类型:
    主机虚拟化:xen, kvm, virtualbox, ...
    容器(用户空间隔离): lxc(LinuX Container), openvz, ...
    系统库虚拟化:wine, ...
    应用程序级虚拟化:jvm, pvm,...

主机虚拟化:
    CPU:
        模拟:emulation, 虚拟机的arch与物理平台的arch可以不相同;qemu;
        虚拟:virtualization
            完全虚拟化(full-virt)
                BT: 二进制转换 (软件)
                HVM:硬件辅助的虚拟化(硬件)
            半(准)虚拟化 (para-virt)
                GuestOS得明确知道自己运行于虚拟化技术
                
    内存:
        MMU virtualization:
            Intel: EPT, Extended Page Table
            AMD: NPT, Nested Page Table
            
        TLB virtualization:
            tagged TLB
            
    IO:
        Emulation 
        Para-virtualization
        IO-through:IO透传
        

主机虚拟化的类型:
    TYPE-I:
        于硬件级别直接运行hypervisor;
        xen, vmware ESX/ESXI
    TYPE-II:
        于硬件级别运行一个OS(Host OS),而此OS上运行一个VMM;
        vmware workstation, virtualbox, kvm
        
Linux目前流行的开源虚拟化技术解决方案:
    主机虚拟化:xen, kvm, virtualbox
    容器级:lxc, libcontainer, runC, openvz
    模拟器:qemu

2、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

3、快速使用kvm技术:

    安装使用KVM:
        判断CPU是否支持硬件虚拟化:
            # grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
                vmx:Intel VT-x
                svm:AMD AMD-v
    
    # yum install libvirt-daemon-kvm qemu-kvm virt-manager
    # modprobe kvm 
    # systemctl start libvirtd.service
    # virsh iface-bridge INTERFACE BRIDGE_NAME
    # virt-manager

4、kvm: Kernel-based Virtual Machine

        Qumranet公司 --> RedHat
        (1) X86_64
        (2) HVM: 
            Intel VT
            AMD AMD-v

5、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 &

6、网络虚拟化:

    二层的虚拟网络设备:
        kernel net bridge/brctl
        openvswitch
        
    CentOS 7创建物理桥,使用内核自带的桥接模块实现:
        桥接口配置文件保留地址信息;
            TYPE=Bridge
            Device=BRIDGE_NAME
            
        物理网卡配置文件:
            删除地址、掩码和网关等相关的配置,添加
            BRIDGE=BRIDGE_NAME
            
        重启网络服务即可:

7、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]
            
            选项有很多类别:
                标准选项、块设备相关选项、显示选项、网络选项、...
                
                标准选项:
                    -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:磁盘映像文件的格式;
                        
                    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 -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
                     
            半虚拟化:virtio
                建议:Network IO, Disk IO使用virtio,性能会有显著提升;
                
            dnsmasq:
                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

8、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格式的配置文件创建并启动虚拟机;
                    define:从xml格式的配置文件创建虚拟机;
                
                停止:
                    destroy:强行关机;
                    shutdown:关机;
                
                启动:
                    start:启动
                
                reboot:重启;
                
                undefine:删除虚拟机;
                
                suspend/resume:暂停于内存中,或继续运行暂停状态的虚拟机;
                    真正实现的效果:pause/unpause
                
                save/restore:保存虚拟机的当前状态至文件中,或从指定文件恢复虚拟机;
                
                console:连接至指定domain的控制台;
                
                域的设备资源管理:
                    cpu-stats
                    vcpuinfo
                    vcpucount
                    setvcpus
                    vcpupin
                    
                    setmaxmem
                    setmem
                    
                
                    attach-disk/detach-disk/domblklist:磁盘设备的热插拔;
                
                    attach-interface/detach-interface/domiflist:网络接口设备的热插拔;
                        type:bridge
                        source:BRIDGE_NAME
                    
                        注意 :无须事先创建网络接口设备;
                    
            Domain Monitoring (help keyword 'monitor')
                domiflist
                domblklist
                ...

9、图形管理工具:

        kimchi:基于H5研发web GUI; virt-king;
        OpenStack: IaaS
        oVirt:
        proxmox:
        
        管理工具栈:https://www.linux-kvm.org/page/Management_Tools
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容