KVM 部署与使用
1、系统配置
[root@kvm01 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@kvm01 ~]# uname -r
3.10.0-693.el7.x86_64
[root@kvm01 ~]# sestatus
SELinux status: disabled
[root@kvm01 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@kvm01 ~]# hostname -I
172.16.1.240 10.0.0.240
# kvm主机内存不能低于4GB
2、KVM 环境准备
1、基础配置
-
必须跑在 x86 系统的架构上
-
必须支持硬件级虚拟化
- vmx: Intel VT-x
- svm: AMD AMD-v
-
虚拟机上再虚拟化,需开启虚拟化 Intel VT-x/EPT
2、判断CPU是否支持硬件虚拟化:
[root@kvm01 ~]# grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
注意:vmx 或 svm 必须出现一个,表示是支持的
- vmx: Intel VT-x
- svm: AMD AMD-v
3、安装前准备
modprobe kvm
yum install libvirt* virt-* qemu-kvm* -y
systemctl start libvirtd.service && systemctl enable libvirtd.service
创建物理桥桥接接口br0(注意:使用网络安装的时候创建)
**注意:执行以下命令请备份网卡配置文
[root@kvm01 ~]# virsh iface-bridge eth0 br0
- 分析:把自己的物理网卡eth0 作为交换机,把br0 当网卡,提供IP,重启网络服务
- 注意:命令可能会卡死或出错,终端被强制退出;等一会,在登录就OK 了
-重启网卡报错,需修改网卡配置文件
================================================
br0桥接失败,解决方法
1、查看管理接口对应的网卡
[root@real-kk network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c2925897a yes ens37
docker0 8000.0242c4439567 no
virbr0 8000.525400c39b08 yes virbr0-nic
vnet0
2、从交换机上把vnet网卡删除
[root@kvm-server ~]# brctl delif br0 ens37
3、添加vnet网卡添加到交换机上:
[root@kvm-server ~]# brctl addif br0 ens37
恢复正常
4、先将kvm虚拟机关闭
配置文件方式配置桥接:在宿主机上
[root@kvm-server ~]# ip a #先找出宿主机用的哪个网卡设备,我的是enp0s25
[root@kvm-server ~]# cd /etc/sysconfig/network-scripts/
1.定义网卡配置文件
[root@kvm-server network-scripts]# vim ifcfg-br0 #创建该桥接网卡,默认没有此文件需要新建
[root@kvm-server network-scripts]# cat ifcfg-br0
TYPE=Bridge
NAME=br0
DEVICE=br0
ONBOOT="yes"
BOOTPROTO=static
IPADDR=10.11.67.188 #要和宿主机在一个网络,这里我用的是宿主机的ip
GATEWAY=10.11.67.1 #宿主的网关,nat的是.2,桥接是.1
NETMASK=255.255.255.0
DNS1=114.144.144.144
DNS2=8.8.8.8
然后看清楚宿主机正在使用的网卡,修改配置文件,(将物理机网卡桥到桥接网卡)
[root@kvm-server network-scripts]# cp ifcfg-ens37 ifcfg-ens37.back
[root@kvm-server network-scripts]# vim ifcfg-ens37
NAME=ens37 #定义网卡设备名称
DEVICE=ens37 #宿主机正在使用的网卡设备
ONBOOT=yes
BRIDGE=br0 #和ifcfg-br0文件里面的设备对应,新添加
2.重启libvirtd服务
[root@kvm-server network-scripts]# systemctl restart libvirtd
3.重启network服务
[root@kvm-server network-scripts]# systemctl restart network
重启network报错则删除桥接重新添加即可
brctl delif br0 ens37
brctl addif br0 ens37
ystemctl restart libvirtd
systemctl restart network
===================================================
4、图形化工具创建虚拟机
[root@kvm01 ~]# virt-manager
注意:这个命令需在支持图形化界面的机器才能执行, 用其他机器 ssh -X 连接,再执行
5、安装VNC软件
[root@kvm01 ~]# yum -y install tightvnc
[root@kvm01 ~]# vncviewer
请使用MobaXterm终端运行、XSHELL需付费插件、Finalshell无法打开
6、使用命令安装
[root@localhost network-scripts]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7-clone --memory 1024 --vcpus 2 --disk /data/centos7-clone.qcow2,format=qcow2,size=20 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0,port=5900 --noautoconsole
注意: 需要先将镜像文件拷贝到 /opt/CentOS-7-x86_64-DVD-1810.iso
#创建20G的qcow2
qemu-img create -f qcow2 /data/kvm-1.qcow2 20G
#创建新的虚拟机
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name kvm-1 --memory 1024 --vcpus 2 --disk /data/kvm-1.qcow2,format=qcow2 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0,port=5900 --noautoconsole
使用vnc连接虚拟机安装系统
[root@kvm01 ~]# vncviewer
==================================================
kvm安装完毕
命令管理
virsh list # 显示本地活动虚拟机
virsh list –all # 显示本地所有的虚拟机(活动的+不活动的)
virsh define eden7.xml # 通过配置文件定义一个虚拟机(这个虚拟机还不是活动的)
virsh start eden7 # 启动名字为ubuntu的非活动虚拟机
virsh create eden7.xml # 创建虚拟机(创建后,虚拟机立即执行,成为活动主机)
virsh suspend eden7 # 暂停虚拟机
virsh resume eden7 # 启动暂停的虚拟机
virsh shutdown eden7 # 正常关闭虚拟机
virsh destroy eden7 # 强制关闭虚拟机
virsh dominfo ubuneden7tu # 显示虚拟机的基本信息
virsh domname 2 # 显示id号为2的虚拟机名
virsh domid eden7 # 显示虚拟机id号
virsh domuuid eden7 # 显示虚拟机的uuid
virsh domstate eden7 # 显示虚拟机的当前状态
virsh dumpxml eden7 # 显示虚拟机的当前配置文件(可能和定义虚拟机时的配置不同,因为当虚拟机启动时,需要给虚拟机分配id号、uuid、vnc端口号等等)
virsh setmem eden7 512000 # 给不活动虚拟机设置内存大小
virsh setvcpus eden7 4 # 给不活动虚拟机设置cpu个数
virsh edit eden7 # 编辑配置文件(一般是在刚定义完虚拟机之后)
启动
[root@kvm-server ~]# virsh start vm2
域 vm2 已开始
暂停虚拟机:
[root@kvm-server ~]# virsh suspend vm_name
域 vm2 被挂起
恢复虚拟机:
[root@kvm-server ~]# virsh resume vm_name
域 vm2 被重新恢复
关闭:
方法1:
[root@kvm-server ~]# virsh shutdown vm3
域 vm3 被关闭
方法2:
[root@kvm-server ~]# virsh destroy vm3
重启:
[root@kvm-server ~]# virsh reboot vm3
域 vm3 正在被重新启动
重置:
[root@kvm-server ~]# virsh reset vm3 #断电重启。速度快
Domain vm3 was reset
删除虚拟机:
[root@kvm-server ~]# virsh undefine vm2
Domain vm2 has been undefined
注意:虚拟机在开启的情况下undefine是无法删除的只是将配置文件删除了,不能删除磁盘文件。需要手动rm
======================
虚拟机开机自动启动:
#如果虚拟机开机自启,里面的服务应该设置的有开机自启,不然没有意义
[root@kvm-server ~]# virsh autostart vm_name
域 vm3标记为自动开始
[root@kvm-server ~]# ls /etc/libvirt/qemu/autostart/ //此目录默认不存在,在有开机启动的虚拟机时自动创建
vm3.xml
关闭开机启动
[root@kvm-server ~]# virsh autostart --disable vm_name
域 vm3取消标记为自动开始
[root@kvm-server ~]# ls /etc/libvirt/qemu/autostart/
如何查看已启动的虚拟机ip地址
假如vm3虚拟机已启动
[root@kvm-server ~]# virsh domifaddr vm3
名称 MAC 地址 Protocol Address
-------------------------------------------------------------------------------
vnet0 52:54:00:82:d6:3c ipv4 192.168.122.85/24
[root@kvm-server ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/vm4-1.qcow2 5G
注:创建空的磁盘文件:这里我们创建一个5G的磁盘,不过创建出来,通过ll -h查看大小,看不出它是5G,添加上之后才能看到
克隆虚拟机
2.在终端执行命令克隆
[root@kvm-server ~]# virt-clone -o vm2 --auto-clone
正在分配 'vm2-clone.qcow2' | 5.0 GB 00:00
成功克隆 'vm2-clone'。
-o origin-原始
[root@kvm-server ~]# virt-clone -o vm2 -n vm5 --auto-clone
正在分配 'vm5.qcow2' | 5.0 GB 00:00
成功克隆 'vm5'。
-n :指定新客户机的名字
[root@kvm-server ~]# virt-clone -o vm2 -n vm6 -f /var/lib/libvirt/images/vm6.img
正在分配 'vm6.img' | 5.0 GB 00:00
成功克隆 'vm6'。
-f ,--file NEW_DISKFILE:为新客户机使用新的磁盘镜像文件
这条命令在克隆的同时,可以指定镜像文件的位置和名称。
[root@kvm-server ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- vm2 关闭
- vm2-clone 关闭
- vm3 关闭
- vm5 关闭
- vm6 关闭
kvm高级命令
#建立虚拟机磁盘镜像文件:
磁盘镜像文件格式:
1.qed ----不用了
2.raw 原始格式,性能最好 直接占用你一开始给多少 系统就占多少 不支持快照
qcow 先去网上了解一下cow(写时拷贝copy on write) ,性能远不能和raw相比,所以很快夭折了,所以出现了qcow2(性能低下 早就被抛弃)
3.qcow2 性能上还是不如raw,但是raw不支持快照,qcow2支持快照。
#什么叫写时拷贝?
raw立刻分配空间,不管你有没有用到那么多空间
qcow2只是承诺给你分配空间,但是只有当你需要用空间的时候,才会给你空间。最多只给你承诺空间的大小,避免空间浪费
工作当中用哪个?看你用不用快照。本身做快照也是需要存储空间的。
[root@kvm-server images]# pwd
/var/lib/libvirt/images
建立qcow2格式磁盘文件:
[root@kvm-server images]# qemu-img create -f qcow2 test.img 5G
Formatting 'test.img', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off
qemu-kvm qemu是早先的一个模拟器,kvm是基于qemu发展出来的。
建立raw格式磁盘文件:
[root@kvm-server images]# qemu-img create -f raw test.raw 5G
Formatting 'test.raw', fmt=raw size=5368709120
查看已经创建的虚拟磁盘文件:
[root@kvm-server images]# qemu-img info test.img
[root@kvm-server images]# qemu-img info test.raw
=============================================================================
#挂载磁盘,,,先前条件:文件系统没有坏掉
将vm2虚拟机先关闭
查看vm2的磁盘镜像分区信息:
[root@kvm-server images]# virt-df -h -d vm2
文件系统 大小 已用空间 可用空间 使用百分比%
vm2:/dev/sda1 1014M 92M 922M 10%
vm2:/dev/centos/root 3.5G 863M 2.6G 25%
1.创建一个挂载目录
[root@kvm-server images]# mkdir /test
2.挂载虚拟机的跟分区到test目录
[root@kvm-server images]# guestmount -d vm2 -m /dev/centos/root --rw /test/
[root@kvm-server images]# cd /test/
[root@kvm-server test]# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[root@kvm-server test]# cat etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
取消挂载
[root@kvm-server ~]# guestunmount /test
删除桥接网卡步骤:
删除桥接网卡步骤:
1.删除br0的配置文件
2.修改正常网卡的配置文件
3.重启系统
[root@kvm-server network-scripts]# mv ifcfg-br0 ifcfg-br0.bak
[root@kvm-server network-scripts]# mv ifcfg-enp0s25 ifcfg-enp0s25.bak
[root@kvm-server network-scripts]# mv ifcfg-enp0s25.back ifcfg-enp0s25
[root@kvm-server network-scripts]# systemctl restart libvirtd
[root@kvm-server network-scripts]# systemctl restart network
[root@kvm-server network-scripts]# ping www.baidu.com
PING www.a.shifen.com (39.156.66.14) 56(84) bytes of data.
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=52 time=13.3 ms
备份恢复虚拟机
1、备份虚拟机配置(关机时备份)
[root@kvm01 ~]# virsh dumpxml centos7 > centos7.xml
2、删除虚拟机配置
# 查看
[root@kvm01 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7 关闭
# 删除
[root@kvm01 ~]# virsh undefine centos7
# 域 centos7 已经被取消定义
[root@kvm01 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
3、导入虚拟机
# 导入
[root@kvm01 ~]# virsh define centos7-off.xml
定义域 centos7(从 centos7-off.xml)
# 查看
[root@kvm01 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7 关闭
4、修改虚拟机名称(重命名)
[root@kvm01 ~]# virsh domrename centos7 eden7
Domain successfully renamed
# 查看
[root@kvm01 ~]# virsh list
Id 名称 状态
----------------------------------------------------
9 eden7 关闭
5、虚拟机挂起与恢复
1、挂起虚拟机
[root@kvm01 ~]# virsh suspend eden7
- 查看状态
[root@kvm01 ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
9 eden7 暂停
2、恢复虚拟机
[root@kvm01 ~]# virsh resume eden7
# 域 eden7 被重新恢复
6、查询虚拟机vnc端口
[root@kvm01 ~]# virsh vncdisplay eden7
:0
# :0 即 为 5900 端口,以此类推 :1为5901 。
7、开机自启动设置
# 设置 libvirtd 服务开机自启动。
[root@kvm01 ~]# systemctl enabled libvirtd.service
enabled
1、设置宿主机开机虚拟机在其他
[root@kvm01 ~]# virsh autostart eden7
# 域 eden7标记为自动开始
# 实质为创建软连接
[root@kvm01 ~]# ll /etc/libvirt/qemu/autostart/eden7.xml
lrwxrwxrwx 1 root root 27 1月 22 12:17 /etc/libvirt/qemu/autostart/eden7.xml -> /etc/libvirt/qemu/eden7.xml
2、取消开机自启动
[root@kvm01 ~]# virsh autostart --disable eden7
# 域 eden7取消标记为自动开始