炙倫云終端分享:
1)查看cpu插槽數(shù)量
[root@kvm ~]# cat /proc/cpuinfo |grep "physical id" |wc -l 24
2)查看cpu核心數(shù)量
[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)設(shè)置CPU的個數(shù)
[root@kvm ~]# virsh shutdown vm1 #先關(guān)閉vm [root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml #修改xml配置文件 <vcpu placement=\'static\'>10</vcpu> [root@kvm ~]# systemctl restart libvirtd #重啟服務(wù) [root@kvm ~]# virsh start vm1 #啟動vm [root@vm1 ~]# cat /proc/cpuinfo |grep "core id"|wc -l #查看cpu核心數(shù)量 10
5)設(shè)置CPU模型
ps:虛擬機的CPU model可以通過配置文件定義
custom模式
可以根據(jù)需求自定義CPU的model xml配置文件如下:
<cpu mode=’custom’ match=’exact’> <model fallback=’allow’>kvm64</model> . . . . . . <feature policy=’require’ name=’monitor’/> </cpu>
host-model模式
根據(jù)物理CPU的特性,選擇一個最靠近其特性的標(biāo)準(zhǔn)CPU型號。CPU默認(rèn)的模型就是host-model模式 xml配置文件如下:
<cpu mode=’host-model’/>
host-passthrough模式
直接將物理CPU暴露給虛擬機使用,在虛擬機上完全可以看到的就是物理CPU的型號,一般用于嵌套虛擬化,讓虛擬機的CPU支持虛擬化技術(shù),這種模型有一個弊端,就是當(dāng)要進行kvm遷移的時候,被遷移機器的物理特性要和遷移機器的一樣。 xml配置文件如下:
<cpu mode=’host-passthrough’/>
host-passthrough模式實驗
[root@kvm ~]# virsh shutdown vm1 #先關(guān)閉vm [root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml #修改vm的xml配置文件 <cpumode=\'host-passthrough\'> #把cpu的model改成host-passthrough [root@kvm ~]# systemctl restart libvirtd #重啟libvirtd服務(wù) [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)設(shè)置內(nèi)存大小
[root@vm1 ~]# free –h #查看當(dāng)前的內(nèi)存大小 total used free shared buff/cache available Mem: 992M 96M 779M 6.6M 116M 767M [root@kvm ~]# virsh shutdown vm1 #關(guān)閉vm [root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml #修改vm的xml文件 <memoryunit=\'KiB\'>1048576</memory> <currentMemoryunit=\'KiB\'>716800</currentMemory> #更改內(nèi)存大小 [root@kvm ~]# systemctl restart libvirtd #重啟libvirtd服務(wù) [root@kvm ~]# virsh start vm1 #啟動vm [root@vm1 ~]# free –h #查看當(dāng)前vm的內(nèi)存大小 total used free shared buff/cache available Mem: 668M 71M 501M 6M 96M 484M
2)內(nèi)存限制
ps:只有當(dāng)內(nèi)存競爭發(fā)生時,內(nèi)存限制才會生效。
命令行格式為:
virsh memtune virtual_machine --parameter size
[parameter]:
hard_limit:虛擬機可以使用的最大內(nèi)存,單位為kib
soft_limit:競爭時的內(nèi)存,單位為kib
swaphardlimit,最大內(nèi)存加swap
min_guarantee:最低保證給虛擬機使用的內(nèi)存,單位為kib
memtune生效方式有3種
config:寫到配置文件中,下次重啟虛擬機進程生效
live:影響正在運行的虛擬機,虛擬機進程停止后,效果消失,這是默認(rèn)的方式
current:影響停止和正在運行的虛擬機,如果虛擬機運行,虛擬機進程停止后,效果消失。
應(yīng)用示例:
限制虛擬機最大使用10g內(nèi)存,寫到配置文件中,重啟生效
memtune virthost --hard-limit 10488320 --config
限制虛擬機競爭時為7g內(nèi)存
memtune virthost --soft-limit 7340032 --config
限制虛擬機最大內(nèi)存加可以使用的宿主機的swap不超過10g
memtune virthost--swap-hard-limit 10488320 --config
保證虛擬機最少可以使用4g內(nèi)存
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)內(nèi)存氣球
KVM支持內(nèi)存氣球技術(shù),允許不關(guān)閉虛擬機,實現(xiàn)動態(tài)調(diào)整內(nèi)存大小
[root@vm1 ~]# lsmod |grep virio_balloon #需要加載virio_balloon驅(qū)動 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
查看內(nèi)存氣球空間
[root@kvm ~]# virsh qemu-monitor-command vm1 --hmp --cmd info balloon balloon: actual=1024
調(diào)整內(nèi)存氣球空間
[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)內(nèi)存共享
KVM有著內(nèi)存共享的強大功能,內(nèi)存共享通過一項名為內(nèi)核同頁合并(Kernel Samp-page Merging,KSM)的功能來實現(xiàn)。KSM掃描每個虛擬機的內(nèi)存,如果虛擬機用于相同的內(nèi)存頁面,KSM將這些頁面合并到一個在虛擬機之間共享的頁面,僅存儲一個副本。可以提供內(nèi)存利用率。要在linux下實現(xiàn)內(nèi)存合并,只需要啟動KSM,ksmtuned服務(wù)
[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
創(chuàng)建6個內(nèi)存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的內(nèi)存,由于我啟用了內(nèi)存共享的功能,所有可以創(chuàng)建6個內(nèi)存為4G的虛擬機。
1)KVM的存儲模式:宿主機提供一個存儲池,從存儲池里面劃分存儲卷給虛擬機使用。
2)創(chuàng)建存儲池(基于LVM)
[root@kvm ~]# pvcreate /dev/sdb #把/dev/sdb做成pv Physical volume "/dev/sdb"successfully created [root@kvm ~]# vgcreate kvm-storage /dev/sdb #創(chuàng)建vg Volume group "kvm-storage"successfully created [root@kvm ~]# lvcreate -L 18G -n kvm-data /dev/kvm-storage #創(chuàng)建lv Logical volume "kvm-data" created. [root@kvm ~]# lvs #查看創(chuàng)建的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 #設(shè)置存儲池自動啟動 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 #關(guān)閉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網(wǎng)絡(luò)的配置
虛擬機上外網(wǎng)的方式有兩種:一種通過橋接方式,一種通過nat方式
通過橋接方式
下載軟件包
[root@kvm ~]# yum -y install bridge-utils
編輯網(wǎng)橋的配置文件
[root@kvm network-scripts]# cat ifcfg-brex DEVICE=brex #指定網(wǎng)橋為brex BOOTPROTO=static #IP獲取方式為靜態(tài) ONBOOT=yes #啟用該設(shè)備 TYPE=bridge #指定類型為網(wǎng)橋 IPADDR=172.16.1.111 #網(wǎng)橋的IP地址 PREFIX=24 #網(wǎng)橋的掩碼 GATEWAY=172.16.1.1 #網(wǎng)橋的網(wǎng)關(guān) DNS1=202.96.128.133 #網(wǎng)橋的首選DNS DNS2=202.96.128.166 #網(wǎng)橋的備用DNS STP=yes #啟用STP功能
編輯要綁定到橋的物理網(wǎng)卡的配置文件
[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
重啟網(wǎng)絡(luò)
[root@kvm network-scripts]# systemctl restart network
查看網(wǎng)絡(luò)狀態(tài)
[root@kvm~]# ip add show 4:enp10s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master brex state UP qlen 1000 #網(wǎng)卡enp10s0綁定到網(wǎng)橋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 #網(wǎng)橋brex的狀態(tài)為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\'/> #指定和宿主機的網(wǎng)橋brex橋接 <model type=\'virtio\'/> </interface>
查看網(wǎng)橋的狀態(tài)
[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 #從物理網(wǎng)絡(luò)的DHCP服務(wù)器獲取到IP地址
ping外網(wǎng)測試
[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 #指定設(shè)備為natex BOOTPROTO=static #IP獲取方式為靜態(tài) ONBOOT=yes #開機啟用該設(shè)備 TYPE=OVSBridge #類型為OVS橋 DEVICETYPE=ovs #設(shè)備類型為ovs IPADDR=192.168.133.80 #橋的IP地址 NETMASK=255.255.255.0 #橋的掩碼 GATEWAY=192.168.133.1 #橋的網(wǎng)關(guān)
編輯要綁定到橋的物理網(wǎng)卡的配置文件
[root@kvm network-scripts]# cat ifcfg-enp10s0 DEVICE=enp10s0 ONBOOT=yes TYPE=OVSPort DEVICETYPE=ovs #設(shè)備類型為ovs OVS_BRIDGE=natex #指定要綁定到的網(wǎng)橋為natex
編輯VM的xml文件,橋接到物理網(wǎng)卡
[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml <interface type=\'bridge\'> #指定接口類型 <source bridge=\'natex\'/> #指定源設(shè)備 <virtualport type=\'openvswitch\'/> #指定虛擬接口類型 <model type=\'e1000\'/> #指定接口為千兆接口 </interface>
查看宿主機網(wǎng)絡(luò)狀態(tài)
[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 #網(wǎng)卡從物理網(wǎng)絡(luò)的DHCP服務(wù)器獲取到IP地址
ping外網(wǎng)測試
[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虛擬化技術(shù) 實戰(zhàn)與原理解析》 任永杰,單海濤 機械工業(yè)出版社
如有紕漏,歡迎指正。
本文出自 “開源精神 源于分享” 博客
云終端系列報道第三十六期
在 IT 行業(yè),每隔十年左右,都會出現(xiàn)一次可能重構(gòu)市場、改寫未來的技術(shù)變革,一些公司能夠抓住這些機會...
More
云終端系列報道第十一期
它的彈性在于:可以支持服務(wù)器虛擬化與桌面虛擬化的混合;可以支持多種hyper-v, KVM 等...
More
云終端系列報道第十期
也有挺多私有云+桌面云的需求的,能有openstack +VDI那是更好了。...
More