云終端系列報(bào)道第一百二十六期 - KVM的基礎(chǔ)功能
cpu的配置1)查看cpu插槽數(shù)量[root@kvm ~]# cat /proc/cpuinfo |grep "physical id" |wc -l
242)查看cpu核心數(shù)量[root@kvm ~]# cat /proc/cpuinfo |grep "core id"| wc -l
243)查看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 : 624)設(shè)置CPU的個(gè)數(shù)[root@kvm ~]# virsh shutdown vm1 #先關(guān)閉vm
[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml #修改xml配置文件
10[root@kvm ~]# systemctl restart libvirtd #重啟服務(wù)
[root@kvm ~]# virsh start vm1 #啟動(dòng)vm
[root@vm1 ~]# cat /proc/cpuinfo |grep "core id"|wc -l #查看cpu核心數(shù)量
105)設(shè)置CPU模型ps:虛擬機(jī)的CPU model可以通過(guò)配置文件定義custom模式可以根據(jù)需求自定義CPU的model xml配置文件如下: kvm64 . . .
. . .host-model模式根據(jù)物理CPU的特性,選擇一個(gè)*靠近其特性的標(biāo)準(zhǔn)CPU型號(hào)。CPU默認(rèn)的模型就是host-model模式 xml配置文件如下:host-passthrough模式直接將物理CPU暴露給虛擬機(jī)使用,在虛擬機(jī)上完全可以看到的就是物理CPU的型號(hào),一般用于嵌套虛擬化,讓虛擬機(jī)的CPU支持虛擬化技術(shù),這種模型有一個(gè)弊端,就是當(dāng)要進(jìn)行kvm遷移的時(shí)候,被遷移機(jī)器的物理特性要和遷移機(jī)器的一樣。 xml配置文件如下:host-passthrough模式實(shí)驗(yàn)[root@kvm ~]# virsh shutdown vm1 #先關(guān)閉vm
[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml #修改vm的xml配置文件
#把cpu的model改成host-passthrough
[root@kvm ~]# systemctl restart libvirtd #重啟libvirtd服務(wù)
[root@kvm ~]# virsh start vm1 #啟動(dòng)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內(nèi)存的配置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文件
1048576
716800 #更改內(nèi)存大小
[root@kvm ~]# systemctl restart libvirtd #重啟libvirtd服務(wù)
[root@kvm ~]# virsh start vm1 #啟動(dòng)vm
[root@vm1 ~]# free –h #查看當(dāng)前vm的內(nèi)存大小
total used free shared buff/cache available
Mem: 668M 71M 501M 6M 96M 484M2)內(nèi)存限制ps:只有當(dāng)內(nèi)存競(jìng)爭(zhēng)發(fā)生時(shí),內(nèi)存限制才會(huì)生效。命令行格式為:virsh memtune virtual_machine --parameter size[parameter]:hard_limit:虛擬機(jī)可以使用的*大內(nèi)存,單位為kibsoft_limit:競(jìng)爭(zhēng)時(shí)的內(nèi)存,單位為kibswaphardlimit,*大內(nèi)存加swapmin_guarantee:*低保證給虛擬機(jī)使用的內(nèi)存,單位為kibmemtune生效方式有3種config:寫(xiě)到配置文件中,下次重啟虛擬機(jī)進(jìn)程生效live:影響正在運(yùn)行的虛擬機(jī),虛擬機(jī)進(jìn)程停止后,效果消失,這是默認(rèn)的方式current:影響停止和正在運(yùn)行的虛擬機(jī),如果虛擬機(jī)運(yùn)行,虛擬機(jī)進(jìn)程停止后,效果消失。應(yīng)用示例:限制虛擬機(jī)*大使用10g內(nèi)存,寫(xiě)到配置文件中,重啟生效memtune virthost --hard-limit 10488320 --config限制虛擬機(jī)競(jìng)爭(zhēng)時(shí)為7g內(nèi)存memtune virthost --soft-limit 7340032 --config限制虛擬機(jī)*大內(nèi)存加可以使用的宿主機(jī)的swap不超過(guò)10gmemtune virthost--swap-hard-limit 10488320 --config保證虛擬機(jī)*少可以使用4g內(nèi)存memtune virthost--min-guarantee 4194304 --configxml配置文件示例: 1048576 1048576 9437184 73400323)內(nèi)存氣球KVM支持內(nèi)存氣球技術(shù),允許不關(guān)閉虛擬機(jī),實(shí)現(xiàn)動(dòng)態(tài)調(diào)整內(nèi)存大小[root@vm1 ~]# lsmod |grep virio_balloon #需要加載virio_balloon驅(qū)動(dòng)
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=8004)內(nèi)存共享KVM有著內(nèi)存共享的強(qiáng)大功能,內(nèi)存共享通過(guò)一項(xiàng)名為內(nèi)核同頁(yè)合并(Kernel Samp-page Merging,KSM)的功能來(lái)實(shí)現(xiàn)。KSM掃描每個(gè)虛擬機(jī)的內(nèi)存,如果虛擬機(jī)用于相同的內(nèi)存頁(yè)面,KSM將這些頁(yè)面合并到一個(gè)在虛擬機(jī)之間共享的頁(yè)面,僅存儲(chǔ)一個(gè)副本??梢蕴峁﹥?nèi)存利用率。要在linux下實(shí)現(xiàn)內(nèi)存合并,只需要啟動(dòng)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個(gè)內(nèi)存4G的虛擬機(jī)[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我的物理機(jī)是16G的內(nèi)存,由于我啟用了內(nèi)存共享的功能,所有可以創(chuàng)建6個(gè)內(nèi)存為4G的虛擬機(jī)。存儲(chǔ)的配置1)KVM的存儲(chǔ)模式:宿主機(jī)提供一個(gè)存儲(chǔ)池,從存儲(chǔ)池里面劃分存儲(chǔ)卷給虛擬機(jī)使用。2)創(chuàng)建存儲(chǔ)池(基于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 #編輯存儲(chǔ)池xml文件
kvm-data
kvm-storage
/dev/kvm-storage 0755 -1 -1 [root@kvm ~]# virsh pool-define kvm-data.xml #通過(guò)xml文件定義存儲(chǔ)池
Pool kvm-data defined fromkvm-data.xml
[root@kvm ~]# virsh pool-start kvm-data #啟動(dòng)存儲(chǔ)池
Pool kvm-data started
[root@kvm ~]# virsh pool-autostart kvm-data #設(shè)置存儲(chǔ)池自動(dòng)啟動(dòng)
Pool kvm-data marked as autostarted
[root@kvm ~]# virsh pool-info kvm-data #查看存儲(chǔ)池的信息
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 GiB3)從存儲(chǔ)池劃分存儲(chǔ)卷給虛擬機(jī)使用[root@kvm ~]# virsh shutdown vm1 #關(guān)閉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上驗(yàn)證
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb 252:16 0 18G 0 disk網(wǎng)絡(luò)的配置虛擬機(jī)上外網(wǎng)的方式有兩種:一種通過(guò)橋接方式,一種通過(guò)nat方式通過(guò)橋接方式下載軟件包[root@kvm ~]# yum -y install bridge-utils編輯網(wǎng)橋的配置文件[root@kvm network-scripts]# cat ifcfg-brex
DEVICE=brex #指定網(wǎng)橋?yàn)閎rex
BOOTPROTO=static #IP獲取方式為靜態(tài)
ONBOOT=yes #啟用該設(shè)備
TYPE=bridge #指定類(lèi)型為網(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: 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: 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編輯虛擬機(jī)的XML文件[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml
#接口類(lèi)型為橋
#指定和宿主機(jī)的網(wǎng)橋brex橋接查看網(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上驗(yàn)證[root@vm1 ~]# ip add show
1: 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 forever
2: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
#從物理網(wǎng)絡(luò)的DHCP服務(wù)器獲取到IP地址ping外網(wǎng)測(cè)試[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通過(guò)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 #開(kāi)機(jī)啟用該設(shè)備
TYPE=OVSBridge #類(lèi)型為OVS橋
DEVICETYPE=ovs #設(shè)備類(lèi)型為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è)備類(lèi)型為ovs
OVS_BRIDGE=natex #指定要綁定到的網(wǎng)橋?yàn)閚atex編輯VM的xml文件,橋接到物理網(wǎng)卡[root@kvm ~]# vi /etc/libvirt/qemu/vm1.xml
#指定接口類(lèi)型
#指定源設(shè)備
#指定虛擬接口類(lèi)型
#指定接口為千兆接口查看宿主機(jī)網(wǎng)絡(luò)狀態(tài)[root@kvm ~]# ip add show
4: 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:ff
45: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 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"虛擬機(jī)上驗(yàn)證[root@vm1 ~]# ip add show
2: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
#網(wǎng)卡從物理網(wǎng)絡(luò)的DHCP服務(wù)器獲取到IP地址ping外網(wǎng)測(cè)試[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參考文獻(xiàn): 《KVM虛擬化技術(shù) 實(shí)戰(zhàn)與原理解析》 任永杰,單海濤 機(jī)械工業(yè)出版社如有紕漏,歡迎指正。本文出自 “開(kāi)源精神 源于分享” 博客http://lidaxia.blog.51cto.com/11588738/1912892