KVM

1、虛擬化技術(shù):

虛擬化技術(shù)類型:
    主機(jī)虛擬化:xen, kvm, virtualbox, ...
    容器(用戶空間隔離): lxc(LinuX Container), openvz, ...
    系統(tǒng)庫(kù)虛擬化:wine, ...
    應(yīng)用程序級(jí)虛擬化:jvm, pvm,...

主機(jī)虛擬化:
    CPU:
        模擬:emulation, 虛擬機(jī)的arch與物理平臺(tái)的arch可以不相同;qemu;
        虛擬:virtualization
            完全虛擬化(full-virt)
                BT: 二進(jìn)制轉(zhuǎn)換 (軟件)
                HVM:硬件輔助的虛擬化(硬件)
            半(準(zhǔn))虛擬化 (para-virt)
                GuestOS得明確知道自己運(yùn)行于虛擬化技術(shù)
                
    內(nèi)存:
        MMU virtualization:
            Intel: EPT, Extended Page Table
            AMD: NPT, Nested Page Table
            
        TLB virtualization:
            tagged TLB
            
    IO:
        Emulation 
        Para-virtualization
        IO-through:IO透?jìng)?        

主機(jī)虛擬化的類型:
    TYPE-I:
        于硬件級(jí)別直接運(yùn)行hypervisor;
        xen, vmware ESX/ESXI
    TYPE-II:
        于硬件級(jí)別運(yùn)行一個(gè)OS(Host OS),而此OS上運(yùn)行一個(gè)VMM;
        vmware workstation, virtualbox, kvm
        
Linux目前流行的開(kāi)源虛擬化技術(shù)解決方案:
    主機(jī)虛擬化:xen, kvm, virtualbox
    容器級(jí):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技術(shù):

    安裝使用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,在用戶空間可通過(guò)系統(tǒng)調(diào)用ioctl()與內(nèi)核中的kvm模塊交互,從而完成虛擬機(jī)的創(chuàng)建、啟動(dòng)、停止、刪除等各種管理功能;
            qemu-kvm進(jìn)程:工作于用戶空間,用于實(shí)現(xiàn)IO設(shè)備模擬;用于實(shí)現(xiàn)一個(gè)虛擬機(jī)實(shí)例;
            
    KVM模塊load進(jìn)內(nèi)存之后,系統(tǒng)的運(yùn)行模式:
        內(nèi)核模式:GuestOS執(zhí)行IO類的操作時(shí),或其它的特殊指令操作時(shí)的模式;它也被稱為“Guest-Kernel”模式;
        用戶模式:Host OS的用戶空間,用于代為GuestOS發(fā)出IO請(qǐng)求;
        來(lái)賓模式:GuestOS的用戶模式;所有的非IO類請(qǐng)求;
        
    安裝使用KVM:
        判斷CPU是否支持硬件虛擬化:
            grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
                vmx:Intel VT-x
                svm:AMD AMD-v
                
        運(yùn)行中的一個(gè)kvm虛擬機(jī)就是一個(gè)qemu-kvm進(jìn)程,運(yùn)行qemu-kvm程序并傳遞給它合適的選項(xiàng)及參數(shù)即能完成虛擬機(jī)啟動(dòng),終止此進(jìn)程即能關(guān)閉虛擬機(jī);
                
        kvm工具棧:
            qemu:
                qemu-kvm 
                qemu-img
            libvirt:
                GUI:virt-manager, virt-viewer
                CLI: virsh, virt-install 
                
                C/S:
                    libvirtd
                
        安裝:
            (1) 裝載內(nèi)核模塊
                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、網(wǎng)絡(luò)虛擬化:

    二層的虛擬網(wǎng)絡(luò)設(shè)備:
        kernel net bridge/brctl
        openvswitch
        
    CentOS 7創(chuàng)建物理橋,使用內(nèi)核自帶的橋接模塊實(shí)現(xiàn):
        橋接口配置文件保留地址信息;
            TYPE=Bridge
            Device=BRIDGE_NAME
            
        物理網(wǎng)卡配置文件:
            刪除地址、掩碼和網(wǎng)關(guān)等相關(guān)的配置,添加
            BRIDGE=BRIDGE_NAME
            
        重啟網(wǎng)絡(luò)服務(wù)即可:

7、kvm的管理工具棧:

    qemu:
        qemu-kvm
        qemu-img 
    libvirt:
        GUI:virt-manager
        CLI:virsh, virt-install
        
    使用qemu-kvm管理vms:
        
        Qemu:
            處理器模擬器
            仿真各種IO設(shè)備
            將仿真設(shè)備連接至主機(jī)的物理設(shè)備
            提供用戶接口
            
        qemu-kvm命令語(yǔ)法:
            qemu-kvm [options] [disk_image]
            
            選項(xiàng)有很多類別:
                標(biāo)準(zhǔn)選項(xiàng)、塊設(shè)備相關(guān)選項(xiàng)、顯示選項(xiàng)、網(wǎng)絡(luò)選項(xiàng)、...
                
                標(biāo)準(zhǔn)選項(xiàng):
                    -machine [type=]name:-machine help來(lái)獲取列表,用于指定模擬的主機(jī)類型; 
                    -cpu cpu:-cpu help來(lái)獲取列表;用于指定要模擬的CPU型號(hào);
                    -smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]:指明虛擬機(jī)上vcpu的數(shù)量及拓?fù)洌?                    -boot [order=drives][,once=drives][,menu=on|off] [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
                        order:各設(shè)備的引導(dǎo)次序:c表示第一塊硬盤,d表示第一個(gè)光驅(qū)設(shè)備;-boot order=dc,once=d
                    -m megs:虛擬機(jī)的內(nèi)存大小;
                    -name NAME:當(dāng)前虛擬機(jī)的名稱,要惟一;
                    
                塊設(shè)備相關(guān)的選項(xiàng):
                    -hda/-hdb file:指明IDE總線類型的磁盤映射文件路徑;第0和第1個(gè);
                    -hdc/-hdd file:第2和第3個(gè);
                    
                    -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:塊設(shè)備總線類型,ide, scsi, sd, floppy, virtio,...
                        media=TYPE:介質(zhì)類型,cdrom和disk;
                        index=i:設(shè)定同一類型設(shè)備多個(gè)設(shè)備的編號(hào);
                        cache=writethrough|writeback|none|directsync|unsafe:緩存方式;
                        format=f:磁盤映像文件的格式;
                        
                    CentOS磁盤鏡像文件下載:
                        https://cloud.centos.org/centos/7/images/
                        
                顯示選項(xiàng):
                     -display type:顯示的類型,sdl, curses, none和vnc;
                    -nographic:不使用圖形接口; 
                    -vga [std|cirrus|vmware|qxl|xenfb|none]:模擬出的顯卡的型號(hào);
                    -vnc display[,option[,option[,...]]]]:?jiǎn)?dòng)一個(gè)vnc server來(lái)顯示虛擬機(jī)接口; 讓qemu進(jìn)程監(jiān)聽(tīng)一個(gè)vnc接口; 
                        display:
                            (1) HOST:N
                                在HOST主機(jī)的第N個(gè)桌面號(hào)輸出vnc;
                                    5900+N
                            (2) unix:/PATH/TO/SOCK_FILE
                            (3) none
                            
                        options:
                            password:連接此服務(wù)所需要的密碼;
                    
                    -monitor stdio:在標(biāo)準(zhǔn)輸出上顯示monitor界面;
                        Ctrl-a, c:在console和monitor之間切換;
                        Ctrl-a, h
                    
                    
                網(wǎng)絡(luò)選項(xiàng):
                    -net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
                        為虛擬機(jī)創(chuàng)建一個(gè)網(wǎng)絡(luò)接口,并將其添加至指定的VLAN;
                        model=type:指明模擬出的網(wǎng)卡的型號(hào),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]:
                        通過(guò)物理的TAP網(wǎng)絡(luò)接口連接至vlan n;
                        script=file:?jiǎn)?dòng)虛擬機(jī)時(shí)要執(zhí)行的腳本,默認(rèn)為/etc/qemu-ifup
                        downscript=dfile:關(guān)閉虛擬機(jī)時(shí)要執(zhí)行的腳本,/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  
                            
                    其它選項(xiàng):
                        -daemonize:以守護(hù)進(jìn)程運(yùn)行;
                        
                        
                示例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,性能會(huì)有顯著提升;
                
            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命令:

            虛擬機(jī)的生成需要依賴于預(yù)定義的xml格式的配置文件;其生成工具有兩個(gè):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')
                創(chuàng)建虛擬機(jī):
                    create:從xml格式的配置文件創(chuàng)建并啟動(dòng)虛擬機(jī);
                    define:從xml格式的配置文件創(chuàng)建虛擬機(jī);
                
                停止:
                    destroy:強(qiáng)行關(guān)機(jī);
                    shutdown:關(guān)機(jī);
                
                啟動(dòng):
                    start:?jiǎn)?dòng)
                
                reboot:重啟;
                
                undefine:刪除虛擬機(jī);
                
                suspend/resume:暫停于內(nèi)存中,或繼續(xù)運(yùn)行暫停狀態(tài)的虛擬機(jī);
                    真正實(shí)現(xiàn)的效果:pause/unpause
                
                save/restore:保存虛擬機(jī)的當(dāng)前狀態(tài)至文件中,或從指定文件恢復(fù)虛擬機(jī);
                
                console:連接至指定domain的控制臺(tái);
                
                域的設(shè)備資源管理:
                    cpu-stats
                    vcpuinfo
                    vcpucount
                    setvcpus
                    vcpupin
                    
                    setmaxmem
                    setmem
                    
                
                    attach-disk/detach-disk/domblklist:磁盤設(shè)備的熱插拔;
                
                    attach-interface/detach-interface/domiflist:網(wǎng)絡(luò)接口設(shè)備的熱插拔;
                        type:bridge
                        source:BRIDGE_NAME
                    
                        注意 :無(wú)須事先創(chuàng)建網(wǎng)絡(luò)接口設(shè)備;
                    
            Domain Monitoring (help keyword 'monitor')
                domiflist
                domblklist
                ...

9、圖形管理工具:

        kimchi:基于H5研發(fā)web GUI; virt-king;
        OpenStack: IaaS
        oVirt:
        proxmox:
        
        管理工具棧:https://www.linux-kvm.org/page/Management_Tools
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容