虛擬化KVM應用

虛擬化的發展歷史

談虛擬化,不得不從馮諾伊曼體系提及,計算機由CPU(運算器,控制器),主存(RAM),IO(磁盤,網絡)級成,現有的各類技術都依託與此體系。
CPU處理的兩種指令:
    特權指令集,只有內核有權限調用
    普通指令集
CPU操做環:
    環-1:新的CPU用於硬件支持虛擬化,把環0讓給虛擬機
    環0:級別最高,內核運行在此級別
    環1:沒有用
    環2:沒有用
    環3:普通指令,程序運行使用。若是程序須要分配內存,必須經過內核調用環0

虛擬化技術的分類:

(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, ...

KVM安裝和使用

1. 判斷CPU是否支持硬件虛擬化:
# grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
    vmx:Intel VT-x
    svm:AMD AMD-v
2. 安裝
    # yum install libvirt-daemon-kvm qemu-kvm virt-manager libvirt
    # modprobe kvm 
    # systemctl start libvirtd.service
    # virsh iface-bridge INTERFACE BRIDGE_NAME: virsh iface-bridge eth1 br0 || systemctl restart network
    # virt-manager &
3. 安裝虛擬機
    使用cirros-no_cloud-0.3.0-x86_64-disk.img
    # mkdir /data/VMs/c2
    # cp cirros-no_cloud-0.3.0-x86_64-disk.img /data/VMs/c2/c2.img
    # 使用virt-manager圖形界面導入上述文件
4. 啓動虛擬機
    # virsh start centos6.9
    # virsh console centos6.9

KVM的管理工具棧:

qemu:
    qemu-kvm
    qemu-img 
libvirt:
    GUI:virt-manager
    CLI:virsh, virt-install

qemu-kvm管理:

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:以守護進程運行;

 qemu-kvm管理實例:

1. 建立虛擬機

  # ln -sv /usr/libexec/qemu-kvm /usr/bin/
生成第一個VM:
# qemu-kvm -name c1 -drive file=/data/VMs/c1/c1.img,if=virtio -net nic,macaddr=52:54:00:00:00:01,model=virtio -net tap,script=/root/qemu-ifup -nographic
生成第二個VM:(注意MAC地址必定要區別於第一個VM)
# qemu-kvm -name c2 -drive file=/data/VMs/c2/c2.img,if=virtio -net nic,macaddr=52:54:00:00:00:02,model=virtio -net tap,script=/root/qemu-ifup -nographic
能夠看到兩個運行的虛擬機:
linux

同時,在宿主機上,能夠看到兩個進程,中止虛擬機能夠在宿主機裏直接kill


2. 結合DHCP,爲生成的VM自動分配IP:
# yum install dnsmasq
# dnsmasq --listen-address=10.1.0.1,127.0.0.1 --dhcp-range=10.1.0.100,10.1.0.150,24h --dhcp-option=3,10.1.0.1
# 編輯qemu-ifup-br0
bridge=mybr0web

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
# qemu-kvm -name c2 -drive file=/data/VMs/c2/c2.img,if=virtio -net nic,macaddr=52:54:00:00:00:02,model=virtio -net tap,script=/root/qemu-ifup -nographic
# 此時,c2虛擬機的IP自動分配爲10.1.0.101

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
    注意 :無須事先建立網絡接口設備;

管理實例(二者結合)

1.設備熱管理硬盤
     # qemu-img create -f qcow2 -o ? ./second.img
     # qemu-img create -f qcow2 -o size=5G,preallocation=metadata second.img
     # qemu-img info second.img
     # virsh attach-disk centos6.9 /root/c1/second.img vdb
    2. 設備熱管理加網卡:
     # virsh help attach-interface
     # virsh attach-interface centos6.9 bridge virbr0
     # virsh  detach-interface centos6,9 brideg virbr0 --mac 52:54:00:91:23:C9(若是不指定網卡,會把橋所有刪除)

網絡虛擬化:

二層的虛擬網絡設備:
kernel net bridge/brctl:實現軟交換機管理  TCP/IP四層如下都在內核實現
openvswitch:功能強大,實現軟交換機:支持VLAN, 支持VxLAN,支持GRE,支持流控flow control,(OpenStack和K8s都支持)
        
CentOS 7建立物理橋,使用內核自帶的橋接模塊實現:
橋接口配置文件保留地址信息;
    TYPE=Bridge
    Device=BRIDGE_NAME

物理網卡配置文件:
    刪除地址、掩碼和網關等相關的配置,添加
    BRIDGE=BRIDGE_NAME              
    重啓網絡服務便可:

網絡虛擬化實例1

# yum install bridge-utils
# brctl addbr mybr0
# ip link set mybr0 up
# ip addr add 10.1.0.1/16 dev mybr0(關聯到物理eth網卡,此時,物理網卡角色爲交換機)

網絡虛擬話實例2(配置NAT,實現虛擬機能夠和宿主機以外的主機通訊)

1. 若是mybr0沒有配置IP 10.1.0.1,兩臺VM能夠通訊,但ping不通10.1.0.1,隔離網絡
2. 在兩臺VM上配置網關: route add default gw 10.1.0.1
3. 同時啓動宿主機的IP轉發echo 1 >/proc/sys/net/ipv4/ip_forward
4. 在宿主機上加IPTABLE:
    iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j MASQUERADE
5. 此時,VM能夠ping通宿主機以外的主機

KVM圖形化管理工具:

KVM支持的圖莆化管理工具:https://www.linux-kvm.org/page/Management_Tools
實際工做中用來管理多個虛擬機,用以下的工具來實現:
1. 輕量級:kimchi
2. 重量級:OpenStack: IaaS 百臺主機上再使用。核心是nova-api
3. ovirt 紅帽提供,跨主機with web-GUI
4. proxmox不只是圖形管理,仍是linux發形版。
相關文章
相關標籤/搜索