Loading

6、安装kvm虚拟机


6.1、虚拟机开启虚拟化:

6.2、检查linux虚拟机cpu是否开启了虚拟化:

egrep -o 'vmx|svm' /proc/cpuinfo

vmx

6.3、安装kvm管理和安装kvm虚拟机的软件包:

yum install -y qemu-kvm libvirt

#qemu-kvm:kvm用户空间管理工具;libvirt:管理kvm虚拟机的软件;

systemctl enable libvirtd

systemctl start libvirtd

#设置管理kvm虚拟机的libvirt软件开机自启动;

yum install -y virt-install

#安装虚拟机用的包

ip addr #查看网卡,生成了两个虚拟网卡;

4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000

link/ether 52:54:00:9b:c4:26 brd ff:ff:ff:ff:ff:ff

inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

valid_lft forever preferred_lft forever

5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000

link/ether 52:54:00:9b:c4:26 brd ff:ff:ff:ff:ff:ff

#默认通过主机的eth0网卡nat到外网,和vmware很像;

6.4、创建qcom2格式的虚拟机的磁盘:

1、qemu-img create -f qcow2 /opt/CentOS-7-x86_64.qcow2 10G

qcom2格式的磁盘特点是虚拟机用多少取多少,但总大小不会超过10G;

2、提示:如何创建raw格式的虚拟机磁盘:

该磁盘的特点是分配给虚拟机多少磁盘,虚拟机就占用多少的磁盘;

qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G

#创建一个raw格式为10G的虚拟磁盘;

6.5、创建磁盘格式为qcow2格式的虚拟机:

1、通过xshell或scrt的文件传输工具将linux镜像传到/tmp/文件夹下,不要通过rz进行传输,因为

通过rz命令传输时会限制传输文件的大小;

2、新建立一个桥接网卡,远程访问虚拟机:

(1)特别注意:因为在新建网卡的时候会切断和服务器之间的远程连接,所以最好使用

脚本进行创建虚拟机;

(2)脚本如下:

cat /root/br0.sh

#!/bin/bash

brctl addbr br0

#创建一个桥接网br0;

brctl addif br0 eth0

#将桥接网卡br0代替eth0网卡,此时会断开连接,最好使用脚本;

ip addr del 10.0.0.200/24 dev eth0

#删除eth1的ip地址,实际上物理ip没有删除;

ifconfig br0 10.0.0.200/24 up

#设置br0网卡的ip地址;

route add -net 0.0.0.0/0 gw 10.0.0.253 br0

#添加网关;

(3)查看桥接网卡:

brctl show

bridge name bridge id STP enabled interfaces

br0 8000.000c292e46c3 no eth0

virbr0 8000.5254009bc426 yes virbr0-nic

(4)将脚本加入到开机自启动中:

chmod +x /etc/rc.d/rc.local

echo '/bin/sh /root/br0.sh' >>/etc/rc.local

3、进行创建:

(1)创建虚拟机命令:

virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --vcpus 1 \

--disk /opt/CentOS-7-x86_64.qcow2,format=qcow2 \

--network bridge=br0 \

--graphics vnc,listen=0.0.0.0 --noautoconsole \

--os-type=linux --os-variant=rhel7 \

--location=/tmp/CentOS-7-x86_64-DVD-1804.iso

参数说明:

--name #虚拟机的名称;

--ram #虚拟机的内存大小;

--vcpus #虚拟机cpu的个数;

--location #虚拟机安装镜像;

--disk #虚拟机安装磁盘;

--network #虚拟机使用的网络模式,这里使用bridge=br0(桥接模式);network=default使用的默认模式即nat模式'virbr0';

--graphics #虚拟机使用图形化模式进行安装;

vnc,listen=,prot= #tighvnc监听的网卡和端口号,不指定端口号默认监听的端口号是5900,开多个虚拟机时依次加1;

--noautoconsole #不自动试图连接到客户机控制台,由vnc客户端进行连接;

--os-type #系统类型;
--os-variant #系统的版本,osinfo-query os用于查看系统所对应的版本;

(2)提示:如何创建磁盘格式为 raw的虚拟机:

virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --vcpus 1 \

--disk /opt/CentOS-7-x86_64.raw \

--network bridge=br0 \

--graphics vnc,listen=172.16.1.200,port=5900 --noautoconsole \

--os-type=linux --os-variant=rhel7 \

--location=/tmp/CentOS-7-x86_64-DVD-1804.iso

6.6、使用TightVNC连接虚拟机:

TightVNC连接到10.0.0.100:5900

提示:安装完虚拟机后需要快速连接到虚拟机,因为超时60秒后会自动安装操作系统;

6.7、安装虚拟机和优化:

(1)参考文档'2.14、制作Centos模板及优化操作';

(2)查看ip:

brctl show

bridge name bridge id STP enabled interfaces

br0 8000.000c292e46c3 no eth0

virbr0 8000.5254009bc426 yes virbr0-nic

6.8、在宿主机上对虚拟机进行管理:

1、对虚拟机状态操作:

(1)查看虚拟机状态:

virsh list --all

Id 名称 状态

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

1 CentOS-7-x86_64 running

(2)停止虚拟机:

virsh shutdown CentOS-7-x86_64

(3)启动虚拟机:

virsh start CentOS-7-x86_64

(4)彻底删除虚拟机:

virsh undefine CentOS-7-x86_64

#说明:undefine参数尽量少用;

rm -f /opt/CentOS-7-x86_64.raw

#删除虚拟机的磁盘文件;

(5)查看宿主机的状态:

virsh nodeinfo

CPU 型号: x86_64

CPU: 1

CPU 频率: 2001 MHz

CPU socket: 1

每个 socket 的内核数: 1

每个内核的线程数: 1

NUMA 单元: 1

内存大小: 4193716 KiB

(6)查看虚拟机的信息:

virsh dominfo CentOS-7-x86_64

Id: -

名称: CentOS-7-x86_64

UUID: be71d967-2a11-444f-9b23-9f8a36c18312

OS 类型: hvm

状态: 关闭

CPU: 1

最大内存: 1048576 KiB

使用的内存: 1048576 KiB

持久: 是

自动启动: 禁用

管理的保存: 否

安全性模式: none

安全性 DOI: 0

(7)克隆虚拟机:

virt-clone -o CentOS-7-x86_64 -n CentOS-7-x86_64-clone -f /opt/CentOS-7-x86_64-clone.qcow2

(8)

//强制关闭KVM虚拟机

virsh destroy name

//挂起KVM虚拟机

virsh suspend name

//恢复挂起的虚拟机

virsh resume name

//编辑KVM虚拟机的xml配置文件

virsh edit name

//删除创建的KVM虚拟机

virsh undefine name

1)参数解释:

-o #表示源虚拟机;

-n #表示克隆后虚拟机的名字;

-f #表示克隆新的虚拟机的存放路径;

(8)查看虚拟机的磁盘位置:

virsh domblklist CentOS-7-x86_64

目标 源

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

vda /opt/CentOS-7-x86_64.qcow2

hda -

2、虚拟机cpu和内存的热添加:

(1)热添加说明:

修改宿主机中的'/etc/libvirt/qemu/CentOS-7-x86_64.xml'文件;

实现虚拟机的cpu和内存热添加,宿主机和虚拟机必须是centos7;

在宿主机上修改了相应虚拟机的xml文件,需要重启虚拟机后才能获得xml文件上增减的资源;

一般不推荐虚拟机的热增加,推荐关机操作(修改虚拟机对应的xml文件);

(2)cpu热添加:

virsh edit CentOS-7-x86_64

1)修改前xml文件中cpu的配置参数:

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

2)修改后xml文件中cpu的配置参数:

<vcpu placement='auto' current="1">4</vcpu>

#需要重启虚拟机;

3)热添加cpu命令:

virsh setvcpus CentOS-7-x86_64 2 --live

(3)内存热添加:

virsh edit CentOS-7-x86_64

1)修改前xml文件中内存的配置参数:

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

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

2)修改后xml文件中内存的配置参数:

<memory unit='KiB'>1548576</memory>

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

#需要重启虚拟机;

3)热增加内存:

virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 1224

virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon

#查看当前虚拟的内存;

3、对虚拟机的网络进行操作:

(1)说明:

当安装虚拟机时使用的是'network=default'参数,则网络模式为nat,自动分配ip地址,地址段为

192.168.122.0/24;当改为bridge=br0后则为桥接模式,外面可以访问到虚拟机,需要自己分配ip地址;

由nat转到桥接需要先创建br0桥接网卡,然后再配置相应虚拟机的xml文件,由桥接改为nat模式只需配

置相应虚拟机xml文件即可;

(2)网卡模式为nat时的xml文件配置:

<interface type='network'>

<source network='default'/>

(3)网卡模式为桥接时的xml文件配置:

<interface type='bridge'>

<source bridge='br0'/>

(4)添加多块网卡:

在xml配置文件中添加如下内容,其中mac地址可以自己随便定义;

<interface type='bridge'>

<mac address='52:54:00:dd:2a:88'/>

<source bridge='br0'/>

<model type='virtio'/>

</interface>

(5)在虚拟机运行的情况下修改虚拟机相对应的xml文件需要重启虚拟机后xml才会生效;

4、对虚拟机的磁盘进行操作;

(1)方法一(添加额外的磁盘):

1)关闭虚拟机:

virsh shutdown CentOS-7-x86_64

2)创建增加的磁盘:

qemu-img create -f qcow2 /opt/CentOS-7-x86_64_add.qcow2 2G

3)编辑相应虚拟机的xml文件,添加如下内容:

virsh edit CentOS-7-x86_64

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2'/>

<source file='/opt/CentOS-7-x86_64_add.qcow2'/>

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

</disk>

4)在额外的磁盘上进行磁盘分区;

(2)方法二(直接扩充磁盘的大小):

1)关闭虚拟机:

virsh shutdown CentOS-7-x86_64

2)扩充虚拟机的磁盘:

qemu-img resize /opt/CentOS-7-x86_64.qcow2 +5G

3)在大的磁盘上分增加的空间;

4)注意:

6.9、虚拟机的优化管理:

1、cpu的优化:

(1)interl vt-x/ept或amd-v/rvi

(2)上下文切换:

1)宿主机

ring 0

#用户空间,用户态;

ring 3

#内核空间,内核态;

2)虚拟机

ring 0

ring 3

(3)缓存:绑定gemu线程绑定到一个内核上,提高cpu缓存的命中率,但是kvm的灵活度会降低;

taskset -cp 1 25718

2、内存的优化:

(1)EPT技术:

虚拟机:虚拟内存

虚拟机:物理内存

宿主机:虚拟内存

宿主机:物理内存

(2)大页内存(增加内存一页的大小,默认是开启的,提高虚拟机内存的io性能):

cat /sys/kernel/mm/transparent_hugepage/enabled

(3)KSM内存合并,相同的页合并:

ps -aux | grep ksm | grep -v grep

root 28 0.0 0.0 0 0 ? SN 13:21 0:00 [ksmd]

root 934 0.0 0.0 115300 952 ? S 13:22 0:00 /bin/bash /usr/sbin/ksmtuned

3、I/O优化:

(1)2.6 内核: Noop CFQ AS Deadline 默认:CFQ

(2)3.10内核: Noop CFQ Deadline 默认:Deadline

(3)查看系统内核io的调度算法,如果是ssd硬盘需要使用的是noop内核调度;

cat /sys/block/sda/queue/scheduler

noop [deadline] cfq

4、虚拟机问题:

(1)kvm虚拟机在宿主机中就是个进程;

ps -aux | grep kvm #CentOS-7-x86_64

root 622 0.0 0.0 0 0 ? S< 13:34 0:00 [kvm-irqfd-clean]

qemu 2012 9.2 7.8 1761060 314616 ? Sl 13:52 1:32 /usr/libexec/qemu-kvm -name CentOS-7-x86_64 -S -machine pc

(2)libvirt后台进程和api;

(3)如果libvirt停止不会影响虚拟机,主要的影响是不能够管理kvm虚拟机;

ps -aux | grep libvirtd

root 1263 0.0 0.4 1338772 16636 ? Ssl 13:34 0:01 /usr/sbin/libvirtd

6.10、kvm虚拟机补充:

1、qemu-kvm磁盘读写的缓冲(cache)的五种模式:

当你对VM读写磁盘的性能有不同的要求的时候,你可以在其启动的参数(cache=xxxx)

里面进行一个合理的选择。默认的是writeback。

(1)cache=writethrough:

  该模式对应的标志位是O_DSYNC,仅当数据被提交到了存储设备里面的时候,写操作

才会被完整的通告。此时host的页缓存可以被用在一种被称为writethrough缓存的模式。

guest的虚拟存储设备被告知没有回写缓存(writeback cache),因此guest不需要为了

操纵整块数据而发送刷新缓存的指令了。此时的存储功能如同有一个直写缓存(writethrough cache)一样。

(2)cache=none:

所对应的标志位是O_DIRECT,在 none 模式下,VM的IO操作直接

在qemu-kvm的userspace缓冲和存储设备之间进行,绕开了host的页缓冲。

这个过程就相当于让vm直接访问了你的host的磁盘,从而性能得到了提升。

(3)cache=writeback:

对应的标志位既不是 O_DSYNC 也不是 O_DIRECT ,在writeback模式下,IO操作会经过

host的页缓冲,存放在host页缓冲里的写操作会完整地通知给guest。

除此之外,guest的虚拟存贮适配器会被告知有回写缓存(writeback cache),所以为了能够

整体地管理数据,guest将会发送刷新缓存的指令.类似于带有RAM缓存的磁盘阵列(RAID)管理器。

(4)cache=unsafe:

  该模式与writeback差不多,不过从guest发出的刷新缓存指令将会被忽视掉,这意味着使用者

将会以牺牲数据的完整性来换取性能的提升。

(5)cache=directsync:

  该模式所对应的标志位是O_DSYNC和O_DIRECT,仅当数据被提交到了存储设备的时候,写

操作才会被完整地通告,并且可以放心地绕过host的页缓存。

  就像writethrough模式,有时候不发送刷新缓存的指令时很有用的.该模式是最新添加的一种cache模式,

  使得缓存与直接访问的结合成为了可能。

2、QCOW2和ROW 区别:

(1)kvm虚拟机中需要选择磁盘镜像的格式,通常的选择有两种,一种是raw镜像格式,一种是qcow2格式。

(2)raw格式是原始镜像,会直接当作一个块设备给虚拟机来使用,至于文件里面的空洞,则是由宿主机的文件系统来

管理的,Linux下的文件系统可以很好的支持空洞的特性,所以,如果你创建了一个100G的raw格式的文件,ls看的时

候,可以看到这个文件是100G的,但是用du 来看,这个文件会很小。

(2)qcow2是kvm支持的磁盘镜像格式,我们创建一个100G的qcow2磁盘之后,无论用ls来看,还是du来看,都是很小的。

这说明了,qcow2本身会记录一些内部块分配的信息的。

(3)无论哪种格式,磁盘的利用率来说,都是一样的,因为实际占用的块数量都是一样的。但是raw的虚拟机会比qcow2的虚拟机

IO效率高一些,实际测试的时候会比qcow2高25%,这个性能的差异还是不小的,所以追求性能建议选raw。

raw唯一的缺点在于,ls看起来很大,在scp的时候,这会消耗很多的网络IO,而tar这么大的文件,也是很耗时间跟CPU的,解决

方法是把raw转换成qcow2的格式,对空间压缩就很大了。而且速度很快。转换命令如下:

#qemu-img convert -O qcow2 disk.raw disk.qcow2

#qemu-img convert -O raw disk.qcow2 disk.raw

3、虚拟机cpu和内存的超配比例:

默认OpenStack的CPU超配比例是1:16,内存超配比例是1:1.5。cat /proc/cpuinfo里面的逻辑核数,再x16就是你能够分配给虚拟机的vcpu个数。

宿主机的物理内存x1.5就是可以分给虚拟机的内存;

6.11、KVM虚拟机快照:

1.查看磁盘格式raw格式需要转换成qcow2

[root@centos7 ~]# qemu-img info /data/centos7u4-node1.raw

image: /data/centos7u4-node1.raw

file format: raw

virtual size: 10G (10737418240 bytes)

disk size: 1.2G

cluster_size: 65536

Format specific information:

compat: 1.1

lazy refcounts: false

2.必须关闭虚拟机进行磁盘转换

[root@centos7 ~]# virsh shutdown centos7u4-node1

[root@centos7 ~]# qemu-img convert -f raw /data/centos7u4-node1.raw -O qcow2 /data/centos7u4-node1.qcow2

//convert 将磁盘文件转换为指定格式的文件

//-f 指定需要转换文件的文件格式

//-O 指定要转换的目标格式

//转换完成后,将新生产一个目标映像文件,原文件保存

3.修改KVM虚拟机配置文件配置文件

[root@centos7 ~]# virsh edit centos7u4-node1

<driver name='qemu' type='qcow2'/>

<source file='/data/centos7u4-node1.qcow2'/>

4.对虚拟机当前进行快照拍摄

[root@centos7 ~]# virsh snapshot-create centos7u4-node1

Domain snapshot 1523494907 created

5.查看虚拟机快照

[root@centos7 ~]# virsh snapshot-list centos7u4-node1

Name Creation Time State

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

1523494907 2018-04-11 21:01:47 -0400 running

//检查当前虚拟机最新快照版本

[root@centos7 ~]# virsh snapshot-current centos7u4-node1|less

//快照xml文件存放路径

[root@centos7 ~]# ls /var/lib/libvirt/qemu/snapshot/centos7u4-node1/

1523494907.xml 1523495036.xml

6.恢复快照

[root@centos7 ~]# virsh snapshot-revert centos7u4-node1 1523494907

//确认恢复版本正确

[root@centos7 ~]# virsh snapshot-current centos7u4-node1|grep "1523494907"

<name>1523494907</name>

<creationTime>1523494907</creationTime>

7.删除快照

[root@centos7 ~]# qemu-img info /data/centos7u4-node1.qcow2

image: /data/centos7u4-node1.qcow2

file format: qcow2

virtual size: 10G (10737418240 bytes)

disk size: 1.8G

cluster_size: 65536

Snapshot list:

ID TAG VM SIZE DATE VM CLOCK

1 1523494907 282M 2018-04-11 21:01:48 00:16:25.489

2 1523495036 282M 2018-04-11 21:03:56 00:18:29.210

Format specific information:

compat: 1.1

lazy refcounts: false

#删除最近一个快照

[root@centos7 ~]# virsh snapshot-delete centos7u4-node1 1523495036

Domain snapshot 1523495036 deleted




posted @ 2020-02-17 12:04  云起时。  阅读(548)  评论(0编辑  收藏  举报