首页 > 代码库 > KVM的基础功能(网络、内存、cpu、存储的配置)

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的存储模式:宿主机提供一个存储池,从存储池里面划分存储卷给虚拟机使用。

技术分享

 

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虚拟化技术 实战与原理解析》 任永杰,单海涛  机械工业出版社


如有纰漏,欢迎指正。














本文出自 “开源精神 源于分享” 博客,请务必保留此出处http://lidaxia.blog.51cto.com/11588738/1912892

KVM的基础功能(网络、内存、cpu、存储的配置)