分享

KVM的基础功能

 汉无为 2017-05-20
cpu的配置


1)查看cpu插槽数量

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

2)查看cpu核心数量

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

3)查看cpu的模型

[root@kvm ~]# cat /proc/cpuinfo |grep modelmodel      : 62model name : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHzmodel      : 62model name : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHzmodel      : 62model name : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHzmodel      : 62

4)设置CPU的个数

[root@kvm ~]# virsh shutdown vm1  #先关闭vm[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml  #修改xml配置文件  10[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配置文件如下:

   kvm64  .  .  .  .  .  .  

host-model模式

根据物理CPU的特性,选择一个最靠近其特性的标准CPU型号。CPU默认的模型就是host-model模式 xml配置文件如下:

host-passthrough模式

直接将物理CPU暴露给虚拟机使用,在虚拟机上完全可以看到的就是物理CPU的型号,一般用于嵌套虚拟化,让虚拟机的CPU支持虚拟化技术,这种模型有一个弊端,就是当要进行kvm迁移的时候,被迁移机器的物理特性要和迁移机器的一样。 xml配置文件如下:

host-passthrough模式实验

[root@kvm ~]# virsh shutdown vm1       #先关闭vm[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml   #修改vm的xml配置文件     #把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      : 62model name : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHzmodel      : 62model name : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz
内存的配置


1)设置内存大小

[root@vm1 ~]# free –h     #查看当前的内存大小total    used     free   shared   buff/cache  availableMem:   992M    96M    779M    6.6M      116M   767M[root@kvm ~]# virsh shutdown vm1     #关闭vm[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml    #修改vm的xml文件  1048576    716800    #更改内存大小[root@kvm ~]# systemctl restart libvirtd     #重启libvirtd服务[root@kvm ~]# virsh start vm1   #启动vm[root@vm1 ~]# free –h      #查看当前vm的内存大小   total     used   free      shared buff/cache   availableMem:  668M     71M   501M         6M       96M    484M

2)内存限制

ps:只有当内存竞争发生时,内存限制才会生效。

命令行格式为:

virsh memtune virtual_machine --parameter size

[parameter]:

  1. hard_limit:虚拟机可以使用的最大内存,单位为kib

  2. soft_limit:竞争时的内存,单位为kib

  3. swaphardlimit,最大内存加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配置文件示例:

 1048576  1048576   9437184   7340032

3)内存气球

KVM支持内存气球技术,允许不关闭虚拟机,实现动态调整内存大小

[root@vm1 ~]# lsmod |grep virio_balloon   #需要加载virio_balloon驱动virtio_balloon         13664 0virtio_ring            21524  5 virtio_blk,virtio_net,virtio_pci,virtio_balloon,virtio_consolevirtio                15008  5 virtio_blk,virtio_net,virtio_pci,virtio_balloon,virtio_console

查看内存气球空间

[root@kvm ~]# virsh qemu-monitor-command vm1 --hmp --cmd info balloonballoon: actual=1024

调整内存气球空间

[root@kvm ~]# virsh qemu-monitor-command vm1 --hmp --cmd balloon 800[root@kvm ~]# virsh qemu-monitor-command vm1 --hmp --cmd info balloonballoon: 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=vm1vm2-------vm5略[root@vm1 ~]# virsh list Id   Name                          State---------------------------------------------------- 1    vm1                            running2     vm2                            running3     vm3                            running4     vm4                            running5     vm5                            running6     vm6                            running

我的物理机是16G的内存,由于我启用了内存共享的功能,所有可以创建6个内存为4G的虚拟机。

存储的配置


1)KVM的存储模式:宿主机提供一个存储池,从存储池里面划分存储卷给虚拟机使用。

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文件  kvm-data          kvm-storage            /dev/kvm-storage          0755      -1      -1      [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-dataUUID:           4c453c8f-8ec9-4af9-b377-19ed3d274ee4State:          runningPersistent:     yesAutostart:      yesCapacity:       20.00 GiBAllocation:     18.00 GiBAvailable:      2.00 GiB

3)从存储池划分存储卷给虚拟机使用

[root@kvm ~]# virsh shutdown vm1     #关闭vm1[root@kvm ~]# vim /etc/libvirt/qemu/vm1.xml    #编辑vm1的xml文件                          [root@kvm ~]# systemctl restart libvirtd[root@kvm ~]# virsh start vm1[root@vm1 ~]# lsblk     #VM上验证NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTvdb            252:16 0   18G  0 disk
网络的配置


虚拟机上外网的方式有两种:一种通过桥接方式,一种通过nat方式

  • 通过桥接方式

下载软件包

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

编辑网桥的配置文件

[root@kvm network-scripts]# cat ifcfg-brexDEVICE=brex          #指定网桥为brexBOOTPROTO=static     #IP获取方式为静态ONBOOT=yes           #启用该设备TYPE=bridge          #指定类型为网桥IPADDR=172.16.1.111  #网桥的IP地址PREFIX=24            #网桥的掩码GATEWAY=172.16.1.1   #网桥的网关DNS1=202.96.128.133  #网桥的首选DNSDNS2=202.96.128.166  #网桥的备用DNSSTP=yes              #启用STP功能

编辑要绑定到桥的物理网卡的配置文件

[root@kvm network-scripts]# cat ifcfg-enp10s0 DEVICE=enp10s0                              IPADDR=172.16.1.111PREFIX=24GATEWAY=172.16.1.1DNS1=202.96.128.133DNS2=202.96.128.166ONBOOT=yesNM_CONTROLLD=yesBRIDGE=brex       #指定绑定到桥brex

重启网络

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

查看网络状态

[root@kvm~]# ip add show 4:enp10s0: 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:ff32:brex: 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         #接口类型为桥           #指定和宿主机的网桥brex桥接      

查看网桥的状态

[root@kvm~]# brctl show  bridgename    bridge id     STP enabled   interfacesbrex        8000.70e28405fa30    yes       enp10s0                                   vnet0virbr0       8000.5254000f5751     yes      virbr0-nic

在VM1上验证

[root@vm1 ~]# ip add show1: lo: 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 forever2:eth0: 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 ms64bytes 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         #指定设备为natexBOOTPROTO=static     #IP获取方式为静态ONBOOT=yes           #开机启用该设备TYPE=OVSBridge       #类型为OVS桥DEVICETYPE=ovs       #设备类型为ovsIPADDR=192.168.133.80      #桥的IP地址NETMASK=255.255.255.0      #桥的掩码GATEWAY=192.168.133.1      #桥的网关

编辑要绑定到桥的物理网卡的配置文件

[root@kvm network-scripts]# cat ifcfg-enp10s0DEVICE=enp10s0                       ONBOOT=yesTYPE=OVSPortDEVICETYPE=ovs      #设备类型为ovsOVS_BRIDGE=natex     #指定要绑定到的网桥为natex

编辑VM的xml文件,桥接到物理网卡

[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml          #指定接口类型           #指定源设备         #指定虚拟接口类型            #指定接口为千兆接口

查看宿主机网络状态

[root@kvm ~]# ip add show4: enp10s0: mtu 1500qdisc pfifo_fast master ovs-system state UP qlen 1000    link/ether70:e2:84:05:fa:30 brd ff:ff:ff:ff:ff:ff45:natex: 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 show521d2c60-16ce-49b2-9e76-c28e0e6ea38b    Bridge natex        Port 'enp10s0'            Interface 'enp10s0'        Port 'vnet0'            Interface 'vnet0'        Port natex            Interface natex                type: internalovs_version:'2.5.0'

虚拟机上验证

[root@vm1 ~]# ip add show2:ens3: 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 ms64 bytesfrom 203.208.40.52: icmp_seq=2 ttl=52 time=32.3 ms

参考文献: 《KVM虚拟化技术 实战与原理解析》 任永杰,单海涛 机械工业出版社

如有纰漏,欢迎指正。


本文出自 “开源精神 源于分享” 博客

http://lidaxia.blog.51cto.com/11588738/1912892


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多