雲計算之--------高級虛擬化KVM

背景:linux

       前篇在討論完雲計算後,本次咱們來討論實現雲計算的基礎--->虛擬化技術,虛擬化官方解釋,ios

是指經過虛擬化技術將一臺計算機虛擬爲多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每一個邏輯計算機可運行不一樣的操做系統,而且應用程序均可以在相互獨立的空間內運行而互不影響,從而顯著提升計算機的工做效率。api

       虛擬化使用軟件的方法從新定義劃分IT資源,能夠實現IT資源的動態分配、靈活調度、跨域共享,提升IT資源利用率,使IT資源可以真正成爲社會基礎設施,服務於各行各業中靈活多變的應用需求。跨域

wKiom1eOVM6zA9VcAABZ_Ev36QU403.jpg


分類和業務場景選擇:
服務器

    1. 一臺或幾臺少許服務器(物理機)
網絡

        a. ESXI (經常使用)
dom

        b. XenServer
ssh

    2. 多臺服務器(物理機)
ide

        a. KVM (linux內核級支持)    [本次主要講解
工具

        b. oVirt(開源的RHEV)

        c. openstack(開源,火爆)

        d. Vmware vshpere (虛擬化中的霸主,收費)

        e. RHEV(RedHat收費產品)


 

KVM優點

    1. 嵌入到linux正式kernel(兼容性高) (kernel:linux內核)

    2. 代碼(內核)級資源調用,不用上下文切換

    3. 虛擬機就是一個進程,能夠經過命令來進行管理虛擬機

    4. 直接支持NUMP(Non uniform memory access) 非統一內存方式

    5. 社區人員多

    6. intel和AMD都支持

    7. RedHat6和CentOS6以後都內置

    5. 其它(被RedHat收購)

        a. 保持開源發展模式

        b. 更好的商業支持級服務保障

        



在開始實戰前,咱們來討論一下虛擬化中常見的一個問題

        [一臺主機跑多個相同的應用和一個主機上面多個虛擬主機,每一個虛擬主機一個應用的區別]

        最終得出的結論以下:

            1. 前者性能好,由於虛擬化管理工具也須要佔用計算資源

            2. 前者一個應用故障會影響其它剩餘的應用運行狀態,後者基於虛擬主機上因此每一個應用獨立,故障不會互相影響.

            3. 前者不易於管理,後者管理容易

            4. 後者快照,備份,回覆容易

   wKioL1eOVLTwhLtBAALL3ueZd-I309.png


介紹了這麼多關於虛擬化方面的優點和常識,那如何實現虛擬化呢

    wKioL1eOVQOQcUPSAAEJKEK7tvg199.jpg


下面正式開始實現虛擬化

1.環境準備

[#1#root@kvm ~]# cat /etc/redhat-release 

CentOS Linux release 7.2.1511 (Core)


[#2#root@kvm ~]# uname -a

Linux kvm 3.10.0-327.22.2.el7.x86_64 #1 SMP Thu Jun 23 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux


2. 安裝

[#3#root@kvm ~]#yum -y install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install


3. 檢查安裝

[#4#root@kvm ~]#rpm -qa qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install

virt-install-1.2.1-8.el7.noarch

qemu-kvm-1.5.3-105.el7_2.4.x86_64

virt-manager-1.2.1-8.el7.noarch

qemu-kvm-tools-1.5.3-105.el7_2.4.x86_64

libvirt-1.2.17-13.el7_2.5.x86_64


4. 查看是否支持虛擬化

    a. 標誌

        intel vmx

        AMD svm 

    b. 查看是否支有vmx或svm  

[#5#root@kvm ~]# grep -E '(vmx|svm)' /proc/cpuinfo

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm arat epb pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt


5. 建立虛擬機所需硬盤

硬盤格式分類:

    1.全鏡像模式

        a. 一次性分配空間,性能高,轉換容易

        b. 不支持壓縮,快照,鏡像,佔用空間大

        c. 表明有raw

    2. 稀疏模式

        a. 支持壓縮,快照,鏡像

        b. 佔用空間小, 使用多少佔用多少

        c. 表明 qcow2  (後面使用此硬盤格式)


[#6#root@kvm ~]#qemu-img  create -f qcow2  /opt/CentOS-7.1-x86_64.raw  10G     

Formatting '/opt/CentOS-7.1-x86_64.raw', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off


   qemu-img: 經過qemu來建立模擬外部設置(硬盤,網絡等), KVM只能模擬CPU和內存

    -f  支持格式,qcow2 稀疏模式

    /opt/CentOS-7.1-x86_64.raw 保存的位置和名稱

    10G 指定大小



6. 查看硬盤是否建立成功

[#7#root@kvm ~]#lsmod | grep kvm

kvm_intel             162153  0 

kvm                   525409  1 kvm_intel


7. libvirt設置啓動並開機自啓

[#8#root@kvm ~]#systemctl enable libvirtd.service

[#9#root@kvm ~]#systemctl start libvirtd.service


8. 建立ISO鏡像

    經過Vmware Workstation掛載系統盤

[#10#root@kvm ~]#dd if=/dev/cdrom of=/opt/CentOS-7.1.iso    

1234944+0 records in

1234944+0 records out

632291328 bytes (632 MB) copied, 30.9402 s, 20.4 MB/s


9. 建立虛擬機

[#11#root@kvm ~]# virt-install --name CentOS-7.1-x86_64 \

        --virt-type kvm --ram 1024  \

        --cdrom=/opt/CentOS-7.1.iso \

        --disk path=/opt/CentOS-7.1-x86_64.raw \

        --network network=default  \

        --graphics vnc,listen=0.0.0.0 \

        --noautoconsole


Starting install...

Creating domain...                                       |    0 B     00:01     

Domain installation still in progress. You can reconnect to 

the console to complete the installation process.


    --name  指定虛擬機名稱,惟一的

    --virt-type 指定虛擬技術類型 

    --ram 分配內存大小

    --cdrom 指定安裝鏡像ISO

    --disk 指定硬盤

    --network 指定網絡

    --graphics 指定vnc(來賓)訪問,並容許全部ip

    --noautoconsole 關閉自動屬性


10. 經過VNC鏈接 

    默認第一個建立的虛擬機端口爲5900, 第二個5901,第三個第四個以此類推

    


    設置網卡名爲eth0

     光標移動到Install CentOS 7按Tab鍵,在後面輸入net.ifnames=0 biosdevname=0 

    

    wKioL1eOXcvwR6Q-AAAfWWQNy8U317.png


    修改完成後查看網卡名稱

    

    wKiom1eO1bvg13MVAAETq0TOINI675.png

11. 經過virsh管理虛擬機


    查看正式在運行的虛擬機 [不顯示狀態爲中止的虛擬機]

    [#12#root@kvm ~]# virsh list

     Id    Name                           State

    ----------------------------------------------------

     4     CentOS-7.1-x86_64              running



    查所全部虛擬機 [包含狀態爲中止的虛擬機]

    [#13#root@kvm ~]# virsh list --all

     Id    Name                           State

    ----------------------------------------------------

     4     CentOS-7.1-x86_64              running


    正常關閉虛擬機  

    [#14#root@kvm ~]# virsh shutdown CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 is being shutdown

    

    [#15#root@kvm ~]# virsh list --all

     Id    Name                           State

    ----------------------------------------------------

     -     CentOS-7.1-x86_64              shut off


    開啓虛擬機

    [#16#root@kvm ~]#virsh start CentOS-7.1-x86_64   

    Domain CentOS-7.1-x86_64 started

    

    [#17#root@kvm ~]#virsh list --all             

     Id    Name                           State

    ----------------------------------------------------

     5     CentOS-7.1-x86_64              running


    掛起虛擬機

    [#18#root@kvm ~]#virsh suspend CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 suspended

    

    [#19#root@kvm ~]#virsh list --all               

     Id    Name                           State

    ----------------------------------------------------

     5     CentOS-7.1-x86_64              paused


    恢復掛起的虛擬機    

    [#19#root@kvm ~]#virsh resume  CentOS-7.1-x86_64 

    Domain CentOS-7.1-x86_64 resumed

    

    [#20#root@kvm ~]#virsh list --all

     Id    Name                           State

    ----------------------------------------------------

     5     CentOS-7.1-x86_64              running


     強制關閉虛擬機(正在運行的數據會丟失)  

    [#21#root@kvm ~]#virsh destroy CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 destroyed

    

    [#22#root@kvm ~]#virsh list --all               

     Id    Name                           State

    ----------------------------------------------------

     -     CentOS-7.1-x86_64              shut off


    刪除虛擬機

    [#23#root@kvm ~]#virsh undefine CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 has been undefined

    

    [#24#root@kvm ~]#virsh list --all                

     Id    Name                           State

    ----------------------------------------------------

    

12. 修改kvm虛擬機:

    [#25#root@kvm ~]# virsh edit CentOS-7.1-x86_64    #編輯虛擬機文件

    <vcpu placement='auto' current="1">4</vcpu>    #將cpu設置爲自動調整,最低一個,最大四個

    Domain CentOS-7.1-x86_64 XML configuration edited.

    改完以後重啓才生效

    [#26#root@kvm ~]# virsh shutdown  CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 is being shutdown

    [#27#root@kvm ~]# virsh start CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 started

    設置成2個cpu

    [#28#root@kvm ~]# virsh setvcpus CentOS-7.1-x86_64 2 --live

    

    設置成3個cpu

    [#29#root@kvm ~]# virsh setvcpus CentOS-7.1-x86_64 4 --live

    總結:只支持熱添加,不支持熱刪除

    

    回虛擬機查看:

    [#30#root@kvm ~]# cat /proc/cpuinfo         ----就能夠看到cpu有4核了

    

    

    ########設置內存的熱添加與熱減小########

    [#31#root@kvm ~]# virsh edit CentOS-7.1-x86_64  

     <memory unit='KiB'>4048576</memory>

      <currentMemory unit='KiB'>1048576</currentMemory>

    改完以後重啓才生效

    [#32#root@kvm ~]# virsh shutdown  CentOS-7.1-x86_64

    [#33#root@kvm ~]# virsh start CentOS-7.1-x86_64

    

    更改以後回虛擬機查看,內存從1G變成了721M

    

    KVM以內存管理的氣球模式:

    [#34#root@kvm ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon

    balloon: actual=1024

    

    [#35#root@kvm ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon 600

     

    回虛擬機查看,內存從721變成了297M

    

    [#36#root@kvm ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon 2000

    

    回虛擬機查看,內存從297變成了1697M


    wKiom1eO3HnjNRzIAABgFr1fr3s082.png

        
        

13. 網絡設置

    因爲建立虛擬機的時候咱們指定爲--network network=default, 默認使用NAT模式,此時只有建立虛擬的宿主機可以訪問此虛擬機.在實踐環境中這是不容許的,咱們須要將其改成橋接模式,供局域網其它用戶訪問使用.

    wKiom1eO4QzCV7gqAAA_ukazBzc350.png


    [#31#root@kvm ~]# brctl addbr br0 &&\

    > brctl addif  br0 eth0 && \

    > ip addr del dev eth0 192.168.56.21/24 && \

    > ifconfig br0 192.168.56.21/24 up && \

    > route add default gw 192.168.56.2 &&  \

    > iptables -F


    brctl addbr br0  建立橋接網上 指定名稱爲br0

    brctl addif  br0 eth0    綁定eth0到br0網橋上

    ip addr del dev eth0 192.168.56.21/24 刪除eth0的ip地址

    ifconfig br0 192.168.56.21/24 up 設置橋接br0 ip地址,並開啓

    route add default gw 192.168.56.2 設置路由

    iptables -F 清理防火牆

    

    [#32#root@kvm ~]# virsh edit CentOS-7.1-x86_64   #編輯虛擬機xml文件

    修改網絡配置

    wKioL1eO44ixemmfAAAvpI-uolI192.png

修改成網橋

wKiom1eO45vSQt3rAAAuc_YBzD8231.png

    重啓虛擬機

    [#33#root@kvm ~]#virsh reboot CentOS-7.1-x86_64

    Domain CentOS-7.1-x86_64 is being rebooted

wKioL1eO6JKzrRRFAAA--aNjibc493.png

   此時虛擬機已與宿主機在同一網段中,能夠使用ssh等工具鏈接.

wKioL1eO6Y7hvmGfAAEWPRVxos0708.png

相關文章
相關標籤/搜索