KVM虚拟化搭建
LiuSw Lv6

KVM虚拟化搭建

1.关闭防火墙

1
2
3
4
5
# 停止firewall
systemctl stop firewalld

# 禁止firewall开机启动
systemctl disable firewalld

2.关闭enforce

1
2
3
setenforce 0
# 将/etc/selinux/config中SELINUX=enforcing改为SELINUX=disabled
vi /etc/selinux/config

3.查cpu是否支持VT

1
egrep '(vmx|svm)' --color=always /proc/cpuinfo

4.检查内核模块是否加载

1
lsmod | grep kvm

5.安装kvm及依赖

若离线安装请先部署本地yum源,在线安装直接安装即可

1
yum install -y  virt-*  libvirt  bridge-utils qemu-img qemu-kvm virt-install libguestfs-tools

设置开机启动

1
2
systemctl enable libvirtd
systemctl start libvirtd

查看状态是否正常

1
systemctl status libvirtd

配置软连接

1
ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm 

6.为虚拟机创建网桥

首先备份一下网卡设置

1
cp /etc/sysconfig/network-scripts/ifcfg-ens160  /etc/sysconfig/network-scripts/ifcfg-ens160.bak

配置虚拟网桥

1
2
3
4
5
6
7
8
# 清空ifcfg-ens160内容
cat >/etc/sysconfig/network-scripts/ifcfg-ens160 <<EOF
DEVICE=ens160
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0
EOF

新建br0

1
2
3
4
5
6
7
8
9
10
11
12
cat >/etc/sysconfig/network-scripts/ifcfg-br0 <<EOF
TYPE="Bridge"
BOOTPROTO=static
DEVICE="br0"
ONBOOT="yes"
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
DELAY="0"
EOF

自动化搭建kvm简易脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/sh


# 网卡名称
etlName=$1

# IP地址
IP=$2

# 网关地址
GWay=$3

# 子网掩码
NMask=$4

if [ ${etlName}"x" == "x" ]||[ ${IP}"x" == "x" ]||[ ${GWay}"x" == "x" ];then
echo "参数错误,请检查参数设置是否正确!!!"
echo "参数1: 桥接网卡名称"
echo "参数2: 桥接ip的地址"
echo "参数3: 桥接网关地址"
echo "参数4: 桥接子网掩码"
exit
fi

if [ ${NMask}"x" == "x" ];then
NMask="255.255.255.0"
fi

echo "参数1: 桥接网卡名称-> $etlName"
echo "参数2: 桥接ip的地址-> $IP"
echo "参数3: 桥接网关地址-> $GWay"
echo "参数4: 桥接子网掩码-> $NMask"

# 停止firewall
systemctl stop firewalld
# 禁止firewall开机启动
systemctl disable firewalld

# 关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 安装kvm
yum install -y virt-* libvirt bridge-utils qemu-img qemu-kvm virt-install libguestfs-tools

systemctl enable libvirtd
systemctl start libvirtd
systemctl status libvirtd

ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm

# 备份网卡
cp -a /etc/sysconfig/network-scripts/ifcfg-${etlName} /etc/sysconfig/network-scripts/ifcfg-${etlName}$(date +"%Y%m%d").bak

cat >/etc/sysconfig/network-scripts/ifcfg-${etlName} <<EOF
DEVICE=${etlName}
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0
EOF

# 创建桥接网卡
cat >/etc/sysconfig/network-scripts/ifcfg-br0 <<EOF
TYPE="Bridge"
BOOTPROTO=static
DEVICE="br0"
ONBOOT="yes"
IPADDR=${IP}
NETMASK=${NMask}
GATEWAY=${GWay}
DNS1=114.114.114.114
DNS2=8.8.8.8
DELAY="0"
EOF

exit

7.重启网络

1
systemctl restart network

8.查看网桥

1
2
brctl show
brctl stp br0 on

9.创建虚拟机

方式1

1
2
3
4
5
6
7
8
# 创建虚拟机文件系统
qemu-img create -f qcow2 centos1.qcow2 500G
qemu-img create -f qcow2 centos2.qcow2 500G

# 创建虚拟机
qemu-kvm -name c1 -cpu host -smp 2 -m 64 -drive file=/data/imgs/centos1.qcow2,if=virtio,media=disk,format=qcow2 -drive file=/opt/CentOS-5.5-i386-bin-DVD.iso,index=1,media=cdrom -vnc :0 -net nic,model=e1000,macaddr=52:54:00:00:01:01 -net tap,script=/etc/qemu-ifup-pn1 -daemonize

qemu-kvm -name c2 -cpu host -smp 2 -m 64 -drive file=/data/imgs/centos2.qcow2,if=virtio,media=disk,format=qcow2 -drive file=/opt/CentOS-5.5-i386-bin-DVD.iso,index=1,media=cdrom -vnc :1 -net nic,model=e1000,macaddr=52:54:00:00:00:01 -net tap,script=/etc/qemu-ifup-pn1 -daemonize

注意:-vnc :0/1 是窗口号;MAC 地址52:54:00 不能改,后边随意

开2个终端,vnc 连接虚拟机

1
2
3
vncviewer 192.168.30.107:0

vncviewer 192.168.30.107:1

方式2
推荐此方式

1
2
3
4
5
# 创建虚拟机文件系统
qemu-img create -f qcow2 centos1.qcow2 500G

# 用virt-manager图形化安装:略
virt-manager

virt-manager若无法打开尝试执行export DISPLAY=Windows的IP:0.0

1
export DISPLAY=192.168.11.13:0.0

方式3

1
2
3
4
5
# 创建虚拟机文件系统
qemu-img create -f qcow2 centos1.qcow2 500G

# virt-install安装
virt-install --name=master1 --memory 8192 --vcpus=2 --disk path=/data/qemu/centos1/centos1.qcow2,size=500,format=qcow2,bus=virtio --accelerate --cdrom=/data/CentOS-7-x86_64-DVD-1810.iso --vnc --vncport=6004 --vnclisten=0.0.0.0 --network bridge=br0,model=virtio --noautoconsole

10.KVM虚拟机日常操作命令

KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理。

下面列出kvm日常管理中的命令:

查看KVM虚拟机配置文件及运行状态KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/autostart目录是配置kvm虚拟机开机自启动目录。

virsh命令帮助:

virsh -help

或直接virsh命令和,再执行子命令。如下所示。

1
2
3
4
5
6
7
virsh

欢迎使用 virsh,虚拟化的交互式终端。
输入:'help' 来获得命令的帮助信息
'quit' 退出
virsh # help
# ..
(1)查看kvm虚拟机状态
1
virsh list --all
(2)KVM虚拟机开机
1
virsh start oeltest01

KVM虚拟机关机或断电
默认情况下virsh工具不能对linux虚拟机进行关机操作,linux操作系统需要开启与启动acpid服务。在安装KVM linux虚拟机必须配置此服务。

1
2
chkconfig acpid on
service acpid restart
(3)virsh关机
1
virsh shutdown oeltest01
(4)强制关闭电源
1
virsh destroy wintest01
(5)通过配置文件启动虚拟机
1
virsh create /etc/libvirt/qemu/wintest01.xml
(6)配置开机自启动虚拟机
1
virsh autostart oeltest01

autostart目录是kvm虚拟机开机自启动目录,可以看到该目录中有KVM配置文件链接。

(7)导出KVM虚拟机配置文件
1
virsh dumpxml wintest01 > /etc/libvirt/qemu/wintest02.xml

KVM虚拟机配置文件可以通过这种方式进行备份。

(8)删除kvm虚拟机
1
virsh undefine wintest01

说明:该命令只是删除wintest01的配置文件,并不删除虚拟磁盘文件。

(9)重新定义虚拟机配置文件

通过导出备份的配置文件恢复原KVM虚拟机的定义,并重新定义虚拟机。

1
2
mv /etc/libvirt/qemu/wintest02.xml /etc/libvirt/qemu/wintest01.xml
virsh define /etc/libvirt/qemu/wintest01.xml
(10)编辑KVM虚拟机配置文件
1
virsh edit wintest01

virsh edit将调用vi命令编辑/etc/libvirt/qemu/wintest01.xml配置文件。也可以直接通过vi命令进行编辑,修改,保存。
可以但不建议直接通过vi编辑。

1
vi /etc/libvirt/qemu/wintest01.xml
(11)kvm虚拟机console控制台登录配置
1
virsh console oeltest01
(12)挂起服务器
1
virsh suspend oeltest01
(13)恢复服务器
1
virsh resume oeltest01
(14)创建虚拟机
1
2
3
4
5
6
# 参数样例
virt-install --name=centos1 \
--ram 1024 --vcpus=1 \
--disk path=/root/centos1.img,size=10 \
--accelerate --cdrom /root/CentOS-6.5-x86_64-bin-DVD1.iso \
--graphics vnc,port=5921 --network bridge=br0
(15)如果有图形界面的话,可以进入虚拟机的界面
1
virt-viewer centos1
(16)重启虚拟机
1
virsh reboot centos1
(17)暂停虚拟机
1
virsh suspend centos1
(18)恢复虚拟机
1
virsh resume centos1

(19)克隆centos1

如果我们要建几个一样的虚拟机,这个命令,非常有用。

1
virt-clone --connect=qemu:#/system -o centos1 -n centos3 -f /root/centos3.img
(20)未登录的情况下,查看镜像目录
1
2
3
4
# 查看centos.img镜像文件中/home目录
virt-ls centos.img /home
# tank
# mysql
(21)查看虚拟机的分区情况
1
2
3
virt-filesystems -d centos1
# /dev/sda1
# /dev/VolGroup/lv_root
1
2
3
4
virt-df centos.img
# Filesystem 1K-blocks Used Available Use%
# centos.img:/dev/sda1 495844 34510 435734 7%
# centos.img:/dev/VolGroup/lv_root 8780808 2842056 5492700 33%
(22) 将centos1中的文件copy到tmp下面
1
virt-copy-out -d centos1 /etc/passwd /tmp
(23)mount虚拟机
1
2
3
4
5
6
guestmount -a /root/centos.img -m /dev/VolGroup/lv_root --rw /mnt/usb
cd /mnt/usb/
ls

# bin dev home lib64 media mnt opt root selinux sys usr
# boot etc lib lost+found misc net proc sbin srv tmp var
(24)修改kvm中虚拟机的内存大小
1
2
3
4
5
6
7
8
# 修改配置文件后需要重新启动下虚拟机,先关闭它
virsh shutdown vm01
# Domain vm01 is being shutdown
# 确认已经被关闭
virsh list
# Id Name State
# ----------------------------------
# 1 vm02 running
1
2
3
4
5
6
7
# 注意vi直接编辑不生效
virsh edit vm01
# vm01
# df8604c1-dcf3-fa98-420f-6eea7b39c395
# 1048576 ###本来开始设置为1G,现在这个单位是k
# 1048576
# 修改为1.5G
1
2
3
# 启动
virsh start vm01
# Domain vm01 started
(25)删除一个虚拟机

可以删除一个状态为“shut off”的虚拟机。

1
2
virsh undefine vm01
rm -f /home/data/vm01.img
(26)网络设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 查看网络
virsh net-list
# 名称 状态 自动开始 Persistent
# --------------------------------------------------
# default 活动 yes yes

brctl show
# bridge name bridge id STP enabled interfaces
# br0 8000.0cc47acaec9a no eth0
# vnet0
# vnet1
# docker0 8000.000000000000 no
# virbr0 8000.525400b7157f yes virbr0-nic

# 移除网络
brctl delif bro vnet1
# 添加网络
brctl addif bro vnet1
(27)virtsh参数如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
autostart      #自动加载指定的一个虚拟机
connect #重新连接到hypervisor
console #连接到客户会话
create #从一个SML文件创建一个虚拟机
start #开始一个非活跃的虚拟机
destroy #删除一个虚拟机
define #从一个XML文件定义一个虚拟机
domid #把一个虚拟机名或UUID转换为ID
domuuid #把一个郁闷或ID转换为UUID
dominfo #查看虚拟机信息
domstate #查看虚拟机状态
domblkstat #获取虚拟机设备快状态
domifstat #获取虚拟机网络接口状态
dumpxml #XML中的虚拟机信息
edit #编辑某个虚拟机的XML文件
list #列出虚拟机
migrate #将虚拟机迁移到另一台主机
quit #退出非交互式终端
reboot #重新启动一个虚拟机
resume #重新恢复一个虚拟机
save #把一个虚拟机的状态保存到一个文件
dump #把一个虚拟机的内核dump到一个文件中以方便分析
shutdown #关闭一个虚拟机
setmem #改变内存的分配
setmaxmem #改变最大内存限制值
suspend #挂起一个虚拟机
vcpuinfo #虚拟机的cpu信息
version #显示virsh版本

来源简书

 评论