KVM 安装笔记
grep -E "(vmx|svm)" /proc/cpuinfo
yum install -y qemu-kvm libvirt
yum install -y virt-install
systemctl enable libvirtd
systemctl start libvirtd
[root@linux-node1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.88.119 netmask 255.255.255.0 broadcast 192.168.88.255
inet6 fe80::c853:a386:4cd0:16ef prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:b8:e6:c9 txqueuelen 1000 (Ethernet)
RX packets 28302 bytes 38536778 (36.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6154 bytes 826463 (807.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 68 bytes 5916 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68 bytes 5916 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:c2:bf:e3 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
注意: 硬盘格式为 raw 时,如下:
root@linux-node1 ~]# qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
root@linux-node1 ~]# virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --cdrom=/home/iso/CentOS-7-x86_64-Minimal-1804.iso --disk path=/opt/CentOS-7-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
注意: 硬盘格式为 qcow2 时,如下:
[root@linux-node1 ~]# qemu-img create -f qcow2 /tmp/test.qcow2 10G
Formatting '/tmp/test.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
[root@linux-node1 ~]# ls -lh /tmp/test.qcow2
-rw-r--r--. 1 root root 193K Dec 22 23:08 /tmp/test.qcow2
[root@linux-node1 ~]# virt-install --virt-type kvm --name CentOS-test-7-x86_64 --ram 1024 --cdrom=/home/iso/CentOS-7-x86_64-Minimal-1804.iso --disk path=/tmp/CentOS-7-x86_64.qcow2,size=10,bus=virtio,cache=none,format=qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
Starting install...
Allocating 'CentOS-7-x86_64.qcow2' | 10 GB 00:00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
安装 TightVNC Viewer
TightVNC Viewer:连接方式: 本机IP:5900
jinru安装界面,把网卡设置为eth1的格式
按 Tab 健
标准化的管理
net.ifnames=0 biosdevname=0
- CPU 热添加(宿主机和虚拟机系统必须是CentOS 7)
/etc/libvirt/qemu查看所有的虚拟机 XML 文件
通过命令 virsh edit CentOS-7-x86_64
<vcpu placement='static'>1</vcpu>
# 修改为:
<vcpu placement='auto' current='1'>4</vcpu>
执行 virsh setvcpus CentOS-7-x86_64 2 --live,再在虚拟机中查看CPU信息。
- 查看当前虚拟机的内存大小
# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon
balloon: actual=1024
- 热修改虚拟机内存为: 512M
# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512
配置虚拟机桥接网络
查看桥接的网卡
# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400c57897 yes virbr0-nic
vnet0
- 新增桥接网卡
[root@linux-node1 ~]# brctl addbr br0
[root@linux-node1 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000000000000 no
virbr0 8000.525400c57897 yes virbr0-nic
vnet0
- 将
br0桥接到宿主机的网卡ens33上,生产环境下用脚本执行
[root@linux-node1 ~]# brctl addif br0 ens33
- 此时远程连接断开,只能在控制台操作
ip addr del dev ens33 192.168.88.119/24
# 此时可 ifconfig 查看IP情况
ifconfig br0 192.168.88.119/24 up
# 此时可 ifconfig 查看IP情况
- 配置网关
[root@linux-node1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.88.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
[root@linux-node1 ~]# route add default gw 192.168.88.254
[root@linux-node1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.88.254 0.0.0.0 UG 0 0 0 br0
192.168.88.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
虚拟机网卡桥接到宿主机的 br0,在 /etc/libvirt/qemu 目录中找到对应主机的XML配置文件,在配置文件中找到如下内容修改
注意:用命令virsh edit CentOS-7-x86_64
<interface type='network'>
<mac address='52:54:00:d5:79:94'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
修改为如下:
<interface type='bridge'>
<mac address='52:54:00:d5:79:94'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
重启虚拟机
# virsh shutdown CentOS-7-x86_64
# virsh start CentOS-7-x86_64
在虚拟机中查看网卡信息,看网卡IP是否是与宿主机同网段的IP。
可将虚拟机IP设置为静态IP地址
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.88.120
NETMAST=255.255.255.0
GATEWAY=192.168.88.254
重启网卡
systemctl restart network
KVM 优化
- CPU 优化
将虚拟机绑定在一个宿主机的某个内核上
taskset -cp 1 25718
taskset -cp 3 25720
taskset -cp 5 25722
也可以绑定多个CPU
taskset -cp 1,2 25718
绑定后,可以使用 top命令查看
-
内存优化
-
I/O 优化
I/O调度算法
[root@linux-node1 ~]# uname -a
Linux linux-node1 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@linux-node1 ~]# dmesg | grep -i scheduler
[ 2.347673] io scheduler noop registered
[ 2.347688] io scheduler deadline registered (default)
[ 2.347748] io scheduler cfq registered
[ 2.347751] io scheduler mq-deadline registered
[ 2.347754] io scheduler kyber registered
[root@linux-node1 ~]# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
制作虚拟机镜像
- 下载一个ISO
- 创建虚拟机磁盘
- virt-install 安装虚拟机
3.1 不使用 swap 分区
3.2 只分一个 /
3.3 不使用 LVM 等
# virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --cdrom=/home/iso/CentOS-7-x86_64-Minimal-1804.iso --disk path=/opt/CentOS-7-x86_64.raw --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
- 安装完毕后,初始化
4.1 关闭 SELinux, iptables
4.2 修改网卡配置,去掉 UUID MAC 等
4.3 安装必备的软件
yum -y install epel-release
yum update -y
yum -y install wget lrzsz wget lsof sysstat nmap tcpdump curl vim

浙公网安备 33010602011771号