KVM的基礎功能(網絡、內存、cpu、存儲的配置)

KVM的基礎功能(網絡、內存、cpu、存儲的配置)


cpu的配置


1)查看cpu插槽數量

[root@kvm ~]# cat /proc/cpuinfo |grep "physical id" |wc -l

24



2)查看cpu核心數量

[root@kvm ~]# cat /proc/cpuinfo |grep "core id"| wc -l

24



3)查看cpu的模型

[root@kvm ~]# cat /proc/cpuinfo |grep model

model      : 62

model name : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz

model      : 62

model name : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz

model      : 62

model name : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz

model      : 62


4)設置CPU的個數

[root@kvm ~]# virsh shutdown vm1  #先關閉vm


[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml  #修改xml配置文件

  <vcpu placement='static'>10</vcpu>


[root@kvm ~]# systemctl restart libvirtd #重啓服務

[root@kvm ~]# virsh start vm1   #啓動vm


[root@vm1 ~]# cat /proc/cpuinfo |grep "core id"|wc -l  #查看cpu核心數量

10



5)設置CPU模型

ps:虛擬機的CPU model可以通過配置文件定義

 

         custom模式

可以根據需求自定義CPU的model

xml配置文件如下:

<cpu mode=’custom’ match=’exact’>

    <model fallback=’allow’>kvm64</model>

  .  .  .

  .  .  .

<feature policy=’require’ name=’monitor’/>

  </cpu>

 

         host-model模式

根據物理CPU的特性,選擇一個最靠近其特性的標準CPU型號。CPU默認的模型就是host-model模式

xml配置文件如下:

<cpu mode=’host-model’/>

 

         host-passthrough模式

直接將物理CPU暴露給虛擬機使用,在虛擬機上完全可以看到的就是物理CPU的型號,一般用於嵌套虛擬化,讓虛擬機的CPU支持虛擬化技術,這種模型有一個弊端,就是當要進行kvm遷移的時候,被遷移機器的物理特性要和遷移機器的一樣。

xml配置文件如下:

<cpu mode=’host-passthrough’/>

 

 

host-passthrough模式實驗

 

[root@kvm ~]# virsh shutdown vm1       #先關閉vm

 

[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml   #修改vm的xml配置文件

<cpumode='host-passthrough'>     #把cpu的model改成host-passthrough

 

[root@kvm ~]# systemctl restart libvirtd     #重啓libvirtd服務

 

[root@kvm ~]# virsh start vm1      #啓動vm

 

[root@vm1 ~]# cat /proc/cpuinfo |grep model     #查看vm的cpu模型

model      : 62

model name : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz

model      : 62

model name : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz

 


內存的配置

 

1)設置內存大小

[root@vm1 ~]# free –h     #查看當前的內存大小

total    used     free   shared   buff/cache  available

Mem:   992M    96M    779M    6.6M      116M   767M

 

[root@kvm ~]# virsh shutdown vm1     #關閉vm

 

[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml    #修改vm的xml文件

  <memoryunit='KiB'>1048576</memory>  

  <currentMemoryunit='KiB'>716800</currentMemory>    #更改內存大小

 

[root@kvm ~]# systemctl restart libvirtd     #重啓libvirtd服務

 

[root@kvm ~]# virsh start vm1   #啓動vm

 

[root@vm1 ~]# free –h      #查看當前vm的內存大小

   total     used   free      shared buff/cache   available

Mem:  668M     71M   501M         6M       96M    484M

 

2)內存限制

ps:只有當內存競爭發生時,內存限制纔會生效。

 

命令行格式爲:

virsh memtune virtual_machine --parameter size

  [parameter]:

1.  hard_limit:虛擬機可以使用的最大內存,單位爲kib

2.  soft_limit:競爭時的內存,單位爲kib

3.  swap_hard_limit,最大內存加swap

4.  min_guarantee:最低保證給虛擬機使用的內存,單位爲kib

 

memtune生效方式有3種

--config:寫到配置文件中,下次重啓虛擬機進程生效

--live:影響正在運行的虛擬機,虛擬機進程停止後,效果消失,這是默認的方式

--current:影響停止和正在運行的虛擬機,如果虛擬機運行,虛擬機進程停止後,效果消失。

 

應用示例:

         限制虛擬機最大使用10g內存,寫到配置文件中,重啓生效

memtune virthost --hard-limit 10488320 --config

         限制虛擬機競爭時爲7g內存

memtune virthost --soft-limit 7340032 --config

         限制虛擬機最大內存加可以使用的宿主機的swap不超過10g

memtune virthost--swap-hard-limit 10488320 --config

         保證虛擬機最少可以使用4g內存

memtune virthost--min-guarantee 4194304 --config

 

xml配置文件示例:

  <memoryunit='KiB'>1048576</memory>

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

<memtune>

   <hard_limit unit=’KiB’>9437184</hard_limit>

   <soft_limit unit=’KiB’>7340032</soft_limit>

 

3)內存氣球

KVM支持內存氣球技術,允許不關閉虛擬機,實現動態調整內存大小

[root@vm1 ~]# lsmod |grep virio_balloon   #需要加載virio_balloon驅動

virtio_balloon         13664 0

virtio_ring            21524  5 virtio_blk,virtio_net,virtio_pci,virtio_balloon,virtio_console

virtio                15008  5 virtio_blk,virtio_net,virtio_pci,virtio_balloon,virtio_console

 

查看內存氣球空間

[root@kvm ~]# virsh qemu-monitor-command vm1 --hmp --cmd info balloon

balloon: actual=1024

 

調整內存氣球空間

[root@kvm ~]# virsh qemu-monitor-command vm1 --hmp --cmd balloon 800

[root@kvm ~]# virsh qemu-monitor-command vm1 --hmp --cmd info balloon

balloon: actual=800

 

4)內存共享

KVM有着內存共享的強大功能,內存共享通過一項名爲內核同頁合併(Kernel Samp-page Merging,KSM)的功能來實現。KSM掃描每個虛擬機的內存,如果虛擬機用於相同的內存頁面,KSM將這些頁面合併到一個在虛擬機之間共享的頁面,僅存儲一個副本。可以提供內存利用率。要在linux下實現內存合併,只需要啓動KSM,ksmtuned服務

[root@kvm ~]# systemctl status ksm

● ksm.service - KernelSamepage Merging

   Loaded: loaded(/usr/lib/systemd/system/ksm.service; enabled; vendor preset: enabled)

   Active: active (exited) since Sat 2017-04-4 18:25:32 CST;1 day 2h ago

 

 [root@kvm ~]# systemctl status ksmtuned

● ksmtuned.service -Kernel Samepage Merging (KSM) Tuning Daemon

   Loaded: loaded(/usr/lib/systemd/system/ksmtuned.service; enabled; vendor preset: enabled)

   Active: active (running) since Sat 2017-04-4 18:25:32CST; 1 day 2h ago

 

創建6個內存4G的虛擬機

[root@kvm ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/vm1.qcow2 20G

[root@kvm ~]# virt-install --cdrom=/opt/iso/CentOS-7.2-x86_64-DVD.iso --vcpu=2 --ram=4096 --network bridge=virbr0 --disk path=/var/lib/libvirt/images/vm1.qcow2 --graphics spice,listen=0.0.0.0  --name=vm1

vm2-------vm5略

 

[root@vm1 ~]# virsh list

 Id   Name                          State

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

 1    vm1                            running

2     vm2                            running

3     vm3                            running

4     vm4                            running

5     vm5                            running

6     vm6                            running

我的物理機是16G的內存,由於我啓用了內存共享的功能,所有可以創建6個內存爲4G的虛擬機。



存儲的配置

 

1KVM的存儲模式:宿主機提供一個存儲池,從存儲池裏面劃分存儲卷給虛擬機使用。

wKiom1jje6XBzdSeAAA0hKtkncc761.png

 

2)創建存儲池(基於LVM)

[root@kvm ~]# pvcreate /dev/sdb     #把/dev/sdb做成pv

  Physical volume "/dev/sdb"successfully created

 

[root@kvm ~]# vgcreate kvm-storage /dev/sdb    #創建vg

  Volume group "kvm-storage"successfully created

 

[root@kvm ~]# lvcreate -L 18G -n kvm-data /dev/kvm-storage    #創建lv

  Logical volume "kvm-data" created.

 

[root@kvm ~]# lvs       #查看創建的lv                           

  kvm-data kvm-storage -wi-a----- 18.00g

 

[root@kvm ~]# vi kvm-data.xml    #編輯存儲池xml文件

<pool type='logical'>

  <name>kvm-data</name>

  <source>

    <devicepath='/dev/kvm-storage/kvm-data'/> 

    <name>kvm-storage</name>

    <format type='lvm2'/>

  </source>

  <target>

    <path>/dev/kvm-storage</path>

    <permissions>

      <mode>0755</mode>

      <owner>-1</owner>

      <group>-1</group>

    </permissions>

  </target>

</pool>

 

[root@kvm ~]# virsh pool-define kvm-data.xml   #通過xml文件定義存儲池

Pool kvm-data defined fromkvm-data.xml

 

[root@kvm ~]# virsh pool-start kvm-data     #啓動存儲池

Pool kvm-data started

 

[root@kvm ~]# virsh pool-autostart kvm-data   #設置存儲池自動啓動

Pool kvm-data marked as autostarted

 

[root@kvm ~]# virsh pool-info kvm-data     #查看存儲池的信息

Name:           kvm-data

UUID:           4c453c8f-8ec9-4af9-b377-19ed3d274ee4

State:          running

Persistent:     yes

Autostart:      yes

Capacity:       20.00 GiB

Allocation:     18.00 GiB

Available:      2.00 GiB

 

3)從存儲池劃分存儲卷給虛擬機使用

[root@kvm ~]# virsh shutdown vm1     #關閉vm1

 

[root@kvm ~]# vim /etc/libvirt/qemu/vm1.xml    #編輯vm1的xml文件

    <disk type='block' device='disk'>

      <driver name='qemu' type='raw'cache='none' io='native'/>

      <sourcedev='/dev/kvm-storage/kvm-data'/>

      <target dev='vdb' bus='virtio'/>  

  </disk>

 

[root@kvm ~]# systemctl restart libvirtd

[root@kvm ~]# virsh start vm1

 

[root@vm1 ~]# lsblk     #VM上驗證

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

vdb            252:16 0   18G  0 disk 



網絡的配置


虛擬機上外網的方式有兩種:一種通過橋接方式,一種通過nat方式



通過橋接方式

 

下載軟件包

[root@kvm ~]# yum -y install bridge-utils 

 

編輯網橋的配置文件

[root@kvm network-scripts]# cat ifcfg-brex

DEVICE=brex          #指定網橋爲brex

BOOTPROTO=static     #IP獲取方式爲靜態

ONBOOT=yes           #啓用該設備

TYPE=bridge          #指定類型爲網橋

IPADDR=172.16.1.111  #網橋的IP地址

PREFIX=24            #網橋的掩碼

GATEWAY=172.16.1.1   #網橋的網關

DNS1=202.96.128.133  #網橋的首選DNS

DNS2=202.96.128.166  #網橋的備用DNS

STP=yes              #啓用STP功能

 

編輯要綁定到橋的物理網卡的配置文件

[root@kvm network-scripts]# cat ifcfg-enp10s0 

DEVICE=enp10s0                              

IPADDR=172.16.1.111

PREFIX=24

GATEWAY=172.16.1.1

DNS1=202.96.128.133

DNS2=202.96.128.166

ONBOOT=yes

NM_CONTROLLD=yes

BRIDGE=brex       #指定綁定到橋brex

 

重啓網絡

[root@kvm network-scripts]# systemctl restart network 


查看網絡狀態

[root@kvm~]# ip add show 

4:enp10s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master brex state UP qlen 1000     #網卡enp10s0綁定到網橋brex

    link/ether 70:e2:84:05:fa:30 brdff:ff:ff:ff:ff:ff

32:brex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP      #網橋brex的狀態爲UP

    link/ether 70:e2:84:05:fa:30 brdff:ff:ff:ff:ff:ff

    inet 172.16.1.111/24 brd 172.16.1.255 scopeglobal brex

       valid_lft forever preferred_lft forever

    inet6 fe80::72e2:84ff:fe05:fa30/64 scopelink

       valid_lft forever preferred_lft forever

 

編輯虛擬機的XML文件

[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml

    <interface type='bridge'>     #接口類型爲橋

      <source bridge='brex'/>     #指定和宿主機的網橋brex橋接

      <model type='virtio'/>

</interface>

 

查看網橋的狀態

[root@kvm~]# brctl show  

bridgename    bridge id     STP enabled   interfaces

brex        8000.70e28405fa30    yes       enp10s0

                                   vnet0

virbr0       8000.5254000f5751     yes      virbr0-nic

 

在VM1上驗證

[root@vm1 ~]# ip add show

1: lo:<LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

    link/loopback 00:00:00:00:00:00 brd00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2:eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast stateUP qlen 1000

    link/ether 52:54:00:de:d4:61 brdff:ff:ff:ff:ff:ff

    inet 172.16.1.181/24brd 172.16.1.255 scope global dynamic eth0

       valid_lft 7123sec preferred_lft 7123sec

    inet6 fe80::5054:ff:fede:d461/64 scope link

       valid_lft forever preferred_lft forever

#從物理網絡的DHCP服務器獲取到IP地址

 

ping外網測試

[root@vm1 ~]# ping www.baidu.com 

PINGwww.a.shifen.com (14.215.177.37) 56(84) bytes of data.

64bytes from 14.215.177.37: icmp_seq=1 ttl=53 time=11.8 ms

64bytes from 14.215.177.37: icmp_seq=2 ttl=53 time=11.4 ms


通過nat方式



下載openvswitch軟件yum源

[root@kvm ~]# yum -y install centos-release-openstack-newton 

 

安裝openvswitch

[root@kvm ~]# yum -y install *openvswitch* 

 

編輯nat橋的配置文件

[root@kvm network-scripts]#cat ifcfg-natex  

DEVICE=natex         #指定設備爲natex

BOOTPROTO=static     #IP獲取方式爲靜態

ONBOOT=yes           #開機啓用該設備

TYPE=OVSBridge       #類型爲OVS橋

DEVICETYPE=ovs       #設備類型爲ovs

IPADDR=192.168.133.80      #橋的IP地址

NETMASK=255.255.255.0      #橋的掩碼

GATEWAY=192.168.133.1      #橋的網關

 

編輯要綁定到橋的物理網卡的配置文件

[root@kvm network-scripts]# cat ifcfg-enp10s0

DEVICE=enp10s0                       

ONBOOT=yes

TYPE=OVSPort

DEVICETYPE=ovs      #設備類型爲ovs

OVS_BRIDGE=natex     #指定要綁定到的網橋爲natex

 

編輯VM的xml文件,橋接到物理網卡

[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml

    <interface type='bridge'>      #指定接口類型

      <source bridge='natex'/>     #指定源設備

      <virtualport type='openvswitch'/>   #指定虛擬接口類型

     <model type='e1000'/>        #指定接口爲千兆接口

</interface>

 

 

查看宿主機網絡狀態

[root@kvm ~]# ip add show

4: enp10s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast master ovs-system state UP qlen 1000

    link/ether70:e2:84:05:fa:30 brd ff:ff:ff:ff:ff:ff

45:natex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue stateUNKNOWN

    link/ether 70:e2:84:05:fa:30 brdff:ff:ff:ff:ff:ff

    inet 192.168.133.80/24 brd 192.168.133.255scope global natex

       valid_lft forever preferred_lft forever

    inet6 fe80::9879:f1ff:fe8f:7644/64 scopelink

       valid_lft forever preferred_lft forever

 

查看ovs橋

[root@kvm network-scripts]# ovs-vsctl show

521d2c60-16ce-49b2-9e76-c28e0e6ea38b

    Bridge natex

        Port "enp10s0"

            Interface "enp10s0"

        Port "vnet0"

            Interface "vnet0"

        Port natex

            Interface natex

                type: internal

ovs_version:"2.5.0"

 

虛擬機上驗證

[root@vm1 ~]# ip add show

2:ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast stateUP qlen 1000

    link/ether 52:54:00:cd:fc:0b brdff:ff:ff:ff:ff:ff

    inet 172.16.1.193/24brd 172.16.1.255 scope global dynamic ens3

       valid_lft 6375sec preferred_lft 6375sec

    inet6 fe80::5054:ff:fecd:fc0b/64 scope link

       valid_lft forever preferred_lft forever

#網卡從物理網絡的DHCP服務器獲取到IP地址

 

ping外網測試

[root@vm1 ~]# ping g.cn 

PINGg.cn (203.208.40.52) 56(84) bytes of data.

64bytes from 203.208.40.52: icmp_seq=1 ttl=52 time=33.3 ms

64 bytesfrom 203.208.40.52: icmp_seq=2 ttl=52 time=32.3 ms


參考文獻:

   《KVM虛擬化技術 實戰與原理解析》 任永傑,單海濤  機械工業出版社


如有紕漏,歡迎指正。














發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章