Centos7 上安装KVM

步骤如下:

1. CPU支持虚拟化

现在的CPU基本都支持虚拟化

2. 虚拟机设置内存3G,增加一个50G的虚拟机磁盘,处理器2核,虚拟化引擎两个虚拟化相关的选项打上勾(我这里全打)

# 确认一下内存

[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           2.8G        108M        2.5G        8.6M        198M        2.5G
Swap:          1.0G          0B        1.0G

# CPU
[root@localhost ~]# grep "processor" /proc/cpuinfo
processor	: 0
processor	: 1

3.关闭iptables或firewalld

// iptables关闭
systemctl status iptables // 查看状态
systemctl stop iptables // 关闭
systemctl list-unit-files|grep iptables // 查看是否是开机启动
systemctl disable iptables // 关闭开机启动

// firewalld关闭
firewall-cmd --state // 查看状态
systemctl stop firewalld // 关闭
systemctl start firewalld // 开启

4.关闭selinux

5.格式化新磁盘,挂载到/kvm_data

fdisk -l // 查看新磁盘信息

mkfs.ext4 /dev/sdb // 格式化磁盘

blkid /dev/sdb // 检查格式化后的磁盘
/dev/sdb: UUID="0cffd9c7-626c-4522-a749-75d343b5915c" TYPE="ext4"

// 创建目录并挂载
[root@localhost ~]# mkdir /kvm_data
[root@localhost ~]# mount /dev/sdb /kvm_data/

// 开机启动挂载磁盘
echo '/dev/sdb        /kvm_data         ext4    defaults        0 0' >> /etc/fstab

// 检查
tail -1 /etc/fstab
/dev/sdb        /kvm_data         ext4    defaults        0 0

7.检查cpu参数是否支持虚拟化

grep -Ei 'vmx|svm' /proc/cpuinfo

// vmx 是因特尔的CPU
// svm 是 AMD的CPU
// 有表示支持虚拟化

8.安装kvm

yum install -y virt-* libvirt bridge-utils qemu-img

配置网卡

桥接网卡配置

1. 配置网卡,增加桥接网卡

cp ifcfg-ens33 ifcfg-br0 // ifcfg-br0 为桥接网卡
cp ifcfg-ens33 ifcfg-ens33.bak // 备份配置文件

2. 设置一个br0网卡,TYPE为Bridge,IP地址设置为ens33的ip

// ifcfg-br0
TYPE=Bridge // 桥接网卡
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=10.0.0.210
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5

3. ens33配置文件里把IP地址去掉,增加BRIDGE=br0

// ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0 // 增加 表示桥接到哪里去

4. 启动libvirtd服务

// 启动服务
systemctl start libvirtd

// 检查状态
systemctl status libvirtd

// 或查看进程
ps aux|grep libvirt


5. brctl show 可以看到两个网卡br0和virbr0

[root@localhost network-scripts]# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c29e02ab6	no		ens33
virbr0		8000.5254000d904e	yes		virbr0-nic
// 查看桥接网卡的

创建虚拟机安装centos7

1. 上传一个centos7 ISO文件

2. 安装虚拟机
virt-install \
--name=xxxxx01 \ // 定义虚拟机的名字
--memory=512,maxmemory=1024 \ // 定义内存大小 最大1024 支持热调整
--vcpus=1,maxvcpus=2 \ // 指定CPU1核,最大2核
--os-tyep=linux \ // 操作系统类型是Linux
--os-variant=rhel7 \ // 具体版本 rhel7 表示centos7
--location=/tmp/Centxx.iso \ // 指定ISO文件路径
--disk path=/kvm_data/xxx.img,size=10 \ // 虚拟机安装路径
--bridge=br0 \ // 定义桥接网卡是哪个
--graphics=none \ // 定义是否开启图形
--console=pty,target_type=serial \ // 定义终端及相关的属性
--extra-args="console=tty0 console=ttyS0"

virt-install --name=kvm_03_10 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1708.iso --disk path=/kvm_data/kvm_03_10_20181216.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"

// 语言设置
// [!] 感叹号表示需要设置
1) [!] Language settings
68)  Chinese
1)  Simplified Chinese

// 选择时区
2) [!] Time settings
1)  Set timezone
2)  Asia
64)  Shanghai

// 安装位置
5) [!] Installation Destination
[x] 1) : 10 GiB (vda)
[x] 2) Use All Space
[x] 1) Standard Partition

// 设置root密码
8) [!] Root password

表示安装结束了 直接按回车返回退出 或者  直接Ctrl + ] 退出终端 进行操作

虚拟机管理

// 安装完虚拟机需要重启,要退出虚拟机使用快捷键ctrl + ]
ps aux|grep kvm // 查看kvm进程

virsh list // 查看虚拟机列表,只能看到运行的虚拟机

virsh list --all // 查看虚拟机列表,只能看运行的虚拟机

virsh console 虚拟机名称 // 进入指定虚拟机

virsh shutdown 虚拟机名称 // 关闭虚拟机

virsh start 虚拟机名称 // 开启虚拟机

virsh destroy 虚拟机名称 // 强制停止 虚拟机

virsh undefine 虚拟机名称 // 彻底销毁虚拟机,会删除虚拟机配置文件

ls /etc/libvirt/qemu/ // 可以查看虚拟机配置文件

virsh autostart 虚拟机名称 // 宿主机开机该虚拟机也开机

virsh autostart --disable 虚拟机名称 // 禁止开机启动

virsh suspend 虚拟机名称 // 挂起

virsh resume 虚拟机名称 // 恢复

dhclient eth0 //自动获取IP地址

克隆虚拟机

virsh shutdown 虚拟机名称 //关闭虚拟机

// 克隆虚拟机
virt-clone --original 虚拟机名称 --name 虚拟机名称02 --file /kvm_data/虚拟机名称02.img

--original // 指定克隆源虚拟机
--name // 指定克隆后的虚拟机名字
--file // 指定目标虚拟机的虚拟机磁盘文件
如果 xxx01 虚拟机开机状态,则提示先关闭或暂停虚拟机

快照管理

virsh snapshot-create kvm_01_10 // 创建快照
// raw格式的虚拟磁盘不支持做快照,qcow2支持

[root@kvm_test_210 ~]# qemu-img info /kvm_data/kvm_01_10.img // 查看kvm_01_10.img信息,同时会检查看到快照列表
image: /kvm_data/kvm_01_10.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.4G // 实际使用量
cluster_size: 65536
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         1544963687             238M 2018-12-16 20:34:47   00:46:22.217
Format specific information:
    compat: 1.1
    lazy refcounts: true
[root@kvm_test_210 ~]# df -h
```
/dev/sdb                  50G  2.7G   44G    6% /kvm_data
```
[root@kvm_test_210 ~]# du -sh /kvm_data/*
1.5G	/kvm_data/kvm_01_10.img
1.3G	/kvm_data/kvm_03_10_20181216.img
16K	/kvm_data/lost+found
[root@kvm_test_210 ~]# ll -h /kvm_data/*
-rw------- 1 qemu qemu 1.5G 12月 16 20:37 /kvm_data/kvm_01_10.img
-rw------- 1 root root  11G 12月 16 19:46 /kvm_data/kvm_03_10_20181216.img

/kvm_data/lost+found:
总用量 0

virsh snapshot-list kvm_01_10 // 列出所有快照

virsh snapshot-current kvm_01_10 // 查看当前快照版本

ls /var/lib/libvirt/qemu/snapshot/kvm_01_10 // 查看所有快照配置文件

virsh snapshot-revert kvm_01_10 1544963687 // 恢复指定快照

virsh snapshot-delete kvm_01_10 1544963687 // 删除快照

磁盘格式

虚拟磁盘常用格式raw、qcow2

[root@kvm_test_210 ~]# qemu-img create -f raw /kvm_data/kvm_01_10_2.img 2G // 创建2G的raw格式磁盘
Formatting '/kvm_data/kvm_01_10_2.img', fmt=raw size=2147483648

[root@kvm_test_210 ~]# qemu-img info /kvm_data/kvm_01_10_2.img //查看虚拟磁盘格式
image: /kvm_data/kvm_01_10_2.img
file format: raw
virtual size: 2.0G (2147483648 bytes)
disk size: 0

把raw格式的磁盘转换为qcow2格式

qemu-img convert -O qcow2 /kvm_data/kvm_01_10_2.img /kvm_data/kvm_01_10_2.qcow2

// -O 指定目标格式
// /kvm_data/kvm_01_10_2.img 源文件
// /kvm_data/kvm_01_10_2.qcow2 目标文件

// 转换后用ll -h查看磁盘文件的大小,可以看到qcow2文件比较小,raw文件大小和指定空间大小一样是2G
[root@kvm_test_210 ~]# ll -h /kvm_data/*
-rw-r--r-- 1 root root 2.0G 12月 16 21:01 /kvm_data/kvm_01_10_2.img
-rw-r--r-- 1 root root 193K 12月 16 21:06 /kvm_data/kvm_01_10_2.qcow2
[root@kvm_test_210 ~]# du -sh /kvm_data/*
0    	/kvm_data/kvm_01_10_2.img
196K	/kvm_data/kvm_01_10_2.qcow2

// raw格式的磁盘性能比qcow2要好,但是raw格式的磁盘无法做快照

给 kvm_01_10 转换为raw格式的磁盘

virsh shutdown kvm_01_10

qemu-img convert -O raw /kvm_data/kvm_01_10.img /kvm_data/kvm_01_10_3.raw

virsh edit kvm_01_10 //更改格式和文件路径
<driver name='qemu' type='raw'/>
<source file='/kvm_data/kvm_01_10_3.raw'/>

// ll /kvm_data/kvm_01_10_3.raw 查看属主属组 是root
-rw-r--r-- 1 root root  10G 12月 16 21:14 /kvm_data/kvm_01_10_3.raw

virsh start kvm_01_10

// 启动后改变成qemu 证明换完了文件
-rw-r--r-- 1 qemu qemu 10737418240 12月 16 21:22 kvm_01_10_3.raw

磁盘扩容(raw)

// 磁盘扩容 - raw格式
qemu-img resize /kvm_data/kvm_01_10_3.raw +2G // 加2G

[root@kvm_test_210 ~]# qemu-img info /kvm_data/kvm_01_10_3.raw
image: /kvm_data/kvm_01_10_3.raw
file format: raw
virtual size: 12G (12884901888 bytes) //12G
disk size: 1.2G

// 只有重启后才能生效,命令如下
virsh destroy kvm_01_10 || virsh shutdown kvm_01_10(推荐)

virsh start kvm_01_10

virsh console kvm_01_10

fdisk -l // 查看磁盘情况,并分新的分区
// 除了对已有磁盘扩容外,还可以额外增加磁盘
// fdisk /dev/vda; p n p  默认剩余空间

// 增加硬盘的方式
[root@kvm_test_210 ~]# qemu-img create -f raw /kvm_data/kvm_01_10_2.raw 5G
Formatting '/kvm_data/kvm_01_10_2.raw', fmt=raw size=5368709120

virsh edit kvm_01_10 // 增加<disk>...</disk>, 注意更改source、target、slot
```
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/kvm_data/kvm_01_10_2.raw'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </disk>
```

virsh destroy kvm_01_10

virsh start kvm_01_10

磁盘扩容(qcow2)

qemu-img resize /kvm_data/kvm_01_10.img +2G
// 若提示qemu-img:Can't resize an image which has snapshots,需要删除快照

qemu-img info /kvm_data/kvm_01_10.img

virsh destroy kvm_01_10

virsh start kvm_01_10

virsh console kvm_01_10

fdisk -l // 查看磁盘情况,并分新的分区
// 除了对已有磁盘扩容外,还可以额外增加磁盘

qemu-img create -f qcow2 /kvm_data/kvm_01_10_2.img 5G

virsh edit kvm_01_10 //增加<disk>...</disk>, 注意更改source、target、slot

virsh destroy kvm_01_10

virsh start kvm_01_10

调整cpu内存和网卡

[root@kvm_test_210 ~]# virsh dominfo kvm_01_10 // 查看配置
Id:             4
名称:       kvm_01_10
UUID:           f1bede97-3068-4f6c-9bd0-ac055890a0c9
OS 类型:    hvm
状态:       running
CPU:          1
CPU 时间:   31.0s
最大内存: 1048576 KiB
使用的内存: 524288 KiB
持久:       是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0

// 第一种方法:可以通过修改配置文件参数来调整内存、CPU
virsh edit kvm_01_10 // 更改如下部分内容
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>524288</currentMemory>
<vcpu placement='static' current='1'>2</vcpu>

// 有启动需要关闭
virsh shutdown kvm_01_10

virsh start kvm_01_10

// 第二种方式:动态调整 注意不能大于最大内存和最大CPU数
virsh setmem kvm_01_10 800m // 动态调整内存

virsh dumpxml kvm_01_10 > /etc/libvirt/qemu/kvm_01_10.xml // 需要把配置写入到配置文件里
// 需要重启才能加载配置文件 不然读取的是当前缓存文件

virsh setvcpus kvm_01_10 2 // 动态调整CPU数量 不能减小

[root@kvm_test_210 ~]# virsh domiflist kvm_01_10 // 查看网卡
接口     类型     源        型号      MAC
-------------------------------------------------------
vnet0      bridge     br0        virtio      52:54:00:77:31:1f

virsh attach-interface kvm_01_10 --type bridge --source virbr0
// 增加一块新的网卡,并设置为nat网络模式(virbr0类似vmware的vmnet8),
// 这里如果写--source br0, 则网络模式为桥接

virsh dumpxml kvm_01_10 >/etc/libvirt/qemu/kvm_01_10.xml
// 需要把配置写入到配置文件里

迁移虚拟机

该方式要确保虚拟机是关机状态

virsh shutdown kvm_01_10

virsh dumpxml kvm_01_10 >/etc/libvirt/qemu/kvm_01_3.xml
// 如果是远程机器,需要把该配置文件拷贝到远程机器上

virsh domblklist kvm_01_10 // 查看虚拟机磁盘所在目录

rsync -av /kvm_data/kvm_01_10.img /kvm_data/kvm_01_3.img
// 如果是迁移到远程,则需要把磁盘文件拷贝到远程机器上

vi /etc/libvirt/qemu/kvm_01_3.xml // 因为是迁移到本机
// 配置文件用的是kvm_01_10的配置,不改会有冲突,
// 所以需要修改配置文件,如果是远程机器不用修改

# 修改
domname: <name>kvm_01_3</name>
uuid(随便改一下数字,位数不要变)
# 修改磁盘路径
virsh define /etc/libvirt/qemu/kvm_01_3.xml // 定义新虚拟机

virsh list --all // 会发现新迁移的kvm_01_3虚拟机