12. KVM部署实操-安裝和常用操作

12.1. 1.安装centos7操作系统

刻盘或者ISO引导方式安装

12.2. 2.CentOS7安装xrdp

CentOS安装桌面,如果无桌面,请执行:
yum -y groups install "GNOME Desktop"  startx && yum -y groupinstall "X Window System"

ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target          //设置开机默认为图形化界面

ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target          //设置开机默认为命令行界面

reboot          //重启生效

2.16.2. 安装xrdp

cp -rf /etc/yum.repos.d/CentOS-Base.repo{,.bak}
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo   #更换阿里源国内源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo           #改为aliyun的epel源,先备份epel本身的源
yum clean all
yum makecache

yum --enablerepo=epel -y install xrdp

启动xrdp并设置开机启动

systemctl start xrdp
systemctl enable xrdp

安装好了之后将防火墙关闭,或者开放3389端口

//开放3389端口
firewall-cmd --permanent --zone=public --add-port=3389/tcp
firewall-cmd --reload


//或者关闭防火墙//临时关闭
systemctl stop firewalld
//禁止开机启动
systemctl disable firewalld

12.3. 3.安装kvm

  • 已装系统

    在已有系统基础上,只需安装KVM所需软件即可

    配置本地yum源

#安装前要查看 CPU 是否支持虚拟化
Intel CPU:cat /proc/cpuinfo |grep --color vmx
AMD CPU:cat /proc/cpuinfo |grep --color smv

配置本地yum源

# 详细组件一步步安装
yum -y groupinstall "X Window System"           //安装软件包组支持桌面环境
yum -y groupinstall "GNOME Desktop"         //安装软件包组Gnome桌面

ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target          //设置开机默认为图形化界面
ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target          //设置开机默认为命令行界面
reboot          //重启生效


yum -y install qemu-kvm         //KVM模块
yum -y install qemu-kvm-tools           //KVM调试工具,可不安装
yum -y install bridge-utils              //网络支持工具
yum -y install virt-install              //命令管理虚拟机工具
yum -y install libvirt                   //虚拟机管理工具
yum -y install virt-manager          //图形界面管理虚拟机
yum -y install libguestfs-tools          //virt-cat等命令的支持软件包
reboot                              //重启系统
lsmod | grep kvm                    //检查KVM模块是否安装



或者直接使用一条命令安装kvm:
yum install qemu-kvm libvirt virt-install bridge-utils -y


## 或者直接使用一条命令安装kvm全套插件:
yum -y install libvirt libvirt-python python-virtinst \
qemu-kvm-tools \
libguestfs-tools qemu-kvm libvirt virt-install bridge-utils \
virt-manager libguestfs-tools-c qemu-img virt-viewer virt-2v


reboot                              //重启系统

lsmod | grep kvm                    //检查KVM模块是否安装

# 设置开机自启动
systemctl start libvirtd &&  systemctl enable libvirtd

12.4. 4.设置KVM网络

宿主服务器安装完成KVM,首先要设定网络,在libvirt中运行KVM网络有两种方法:NAT和Bridge,默认是NAT

  • 用户模式:即NAT方式,这种方式是默认网络,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络

NAT方式的适用范围 桌面主机虚拟化。

  • 桥接模式:即Bridge方式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持

在 QEMU/KVM 的网络使用中,桥接模式可以让虚拟机需物理机共享一个物理网络设备连接外部网络,虚拟机有自己独立的 IP 地址, 可以访问外部网络,外部网络也可以访问虚拟机。

优缺点:使用桥接模式配置简单,但如果你的网络环境是ip资源很缺少或对ip管理比较严格的话,那桥接模式就不太适用了

Bridge方式的适用范围 服务器主机虚拟化。

详细网络实现配置方式参考如下文章:

https://www.cnblogs.com/kevingrace/p/7551304.html

https://blog.csdn.net/weixin_36820871/article/details/80595855

[root@localhost network-scripts]# cat ifcfg-em1
TYPE=Ethernet
NAME=em1
UUID=25c135e0-2ae5-4975-864e-f07d18161aba
DEVICE=em1
ONBOOT=yes
BRIDGE=br0


[root@localhost network-scripts]# cat ifcfg-br0
STP=no
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
#IPV6INIT=yes
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_FAILURE_FATAL=no
#IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
#UUID=d2d68553-f97e-7549-7a26-b34a26f29318
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.131
PREFIX=24
GATEWAY=192.168.1.1
DNS1=192.168.1.60
IPV6INIT=no
UUID=d2d68553-f97e-7549-7a26-b34a26f29318

12.5. 5.虚拟机关机、开机、开机自启等操作

常用的命令如下

命令形式

作用

virt-install

创建虚拟机

virsh list –all

查看所有虚拟机

virsh start name

启动名为name的虚拟机

virsh destory name

停止名为name的虚拟机

virsh undefine name

删除名为name的虚拟机

virsh console name

连接名为name的虚拟机控制台

12.5.1. 5.1 配置文件

KVM虚拟机配置文件位置

[root@kvm ~]# ll /etc/libvirt/qemu/centos7.xml

修改KVM虚拟机配置的方法

[root@kvm ~]# virsh edit centos7

12.5.2. 5.2 关机

virsh shutdown centos6.5            //关闭名为Centos6.5的KVM虚拟机
virsh list --all

//强制关机
virsh destroy centos6.5         //强制关闭名为centos6.5的KVM虚拟机

12.5.3. 5.3 开机

virsh start cento6.5            //开启名为centos6.5的kvm虚拟机
virsh list --all

12.5.4. 5.4 virsh 创建桥接网卡

#相比于手动配置,好像用virsh配置桥接网卡可以不用重启网络

[root@ubuntu01 ~]# virsh iface-bridge --interface eth0 --bridge br0
Created bridge br0 with attached device eth0
Bridge interface br0 started


[root@ubuntu01 ~]# ls /etc/sysconfig/network-scripts/ | grep br     #
ifcfg-br0        #确定有此文件就行


[root@ubuntu01 ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c29acc95e       yes             eth0
virbr0          8000.000000000000       yes

[root@ubuntu01 ~]# virsh iface-list
 Name                 State      MAC Address
---------------------------------------------------
 br0                  active     00:0c:29:ac:c9:5e
 lo                   active     00:00:00:00:00:00

12.5.5. 5.5 挂起/恢复(暂停)

# 挂起虚拟机
[root@kvm ~]# virsh suspend centos6.5           //挂起名为centos6.5的虚拟机

[root@kvm ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 6     centos6.5                      pausd


#恢复虚拟机

[root@kvm ~]# virsh resume centos6.5


#开机自启KVM虚拟机

[root@kvm ~]# virsh autostart centos6.5
 centos6.5标记为自动开始

12.5.6. 5.6 修改虚拟机名称

# 重命名
[root@kvm ~]# virsh domrename centos7 clsn7
Domain successfully renamed
# 查看
[root@kvm ~]# virsh list
 Id    名称                         状态
----------------------------------------------------
 9     clsn7                          关闭

12.5.7. 5.7 查询虚拟机vnc端口

[root@kvm ~]# virsh vncdisplay clsn7
:0
# :0 即 为 5900 端口,以此类推 :1为5901 。

12.5.8. 5.8 开机自启动设置

# 设置 libvirtd 服务开机自启动。
[root@kvm ~]# systemctl is-enabled libvirtd.service
enabled

设置宿主机开机虚拟机在其他

[root@kvm ~]# virsh autostart clsn7
 clsn7标记为自动开始
# 实质为创建软连接
[root@kvm ~]# ll /etc/libvirt/qemu/autostart/clsn7.xml
lrwxrwxrwx 1 root root 27 1  22 12:17 /etc/libvirt/qemu/autostart/clsn7.xml -> /etc/libvirt/qemu/clsn7.xml

取消开机自启动

[root@kvm ~]# virsh autostart --disable clsn7
 clsn7取消标记为自动开始

12.5.9. 5.9 删除虚拟机配置

# 查看
[root@kvm ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     centos7                        关闭
 # 删除
[root@kvm ~]# virsh undefine centos7
 centos7 已经被取消定义
[root@kvm ~]# virsh list --all
 Id    名称                         状态

12.5.10. 5.10 备份与恢复

备份虚拟机配置(关机时备份):

[root@kvm ~]# virsh dumpxml centos7  > centos7.xml

导入虚拟机

# 导入
[root@kvm ~]# virsh define centos7-off.xml
定义域 centos7(从 centos7-off.xml)
# 查看
[root@kvm ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     centos7                        关闭

12.5.11. 5.11 管理KVM虚拟机文件

#virt-cat -a 磁盘文件路径 文件绝对路径 //查看指定KVM虚拟机磁盘文件里指定路径内容

[root@kvm ~]# virt-cat -a /kvm/store/Centos6.5 /etc/sysconfig/network           #//查看centos6.5磁盘文件中/etc/sysconfig/network内容



#virt-edit -a 磁盘文件路径 文件决定路径 //编辑指定KVM虚拟机磁盘文件里指定路径内容

[root@kvm ~]# virt-edit -a /kvm/store/Centos6.5 /etc/sysconfig/network


#virt-df -h 虚拟机名称 //查看指定KVM虚拟机磁盘使用情况
[root@localhost ~]# virt-df -h gitee2
Filesystem                                Size       Used  Available  Use%
gitee2:/dev/sda2                          509M       118M       391M   24%
gitee2:/dev/centos/root                    58G       1.4G        57G    3%

12.5.12. 5.12 虚拟机克隆

virsh shutdown 15
virsh list --all


[root@localhost network-scripts]# virt-clone -o gitee1 -n gitee2 -f /kvm/store/Centos7_clone
Allocating 'Centos7_clone'                                                                                             |  60 GB  00:00:02

Clone 'gitee2' created successfully.
[root@localhost network-scripts]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     gitee1                         shut off
 -     gitee2                         shut off

12.5.13. 5.13 虚拟机快照

    快照:将虚拟机系统的某个状态保存,通过快照可快速恢复到虚拟机系统的某个状态

    注:KVM快照只支持qcow2磁盘格式,如不是需转换

#创建快照
virsh snapshot-create 虚拟机名称

[root@kvm ~]# virsh snapshot-create centos6.5           //给名为centos6.5虚拟机创建快照
已生成域快照 1558427973

    查看快照信息 virsh snapshot-list 虚拟机名称

[root@kvm ~]# virsh snapshot-list centos6.5         //查看指定虚拟机所有创建的快照信息

 名称               生成时间              状态
------------------------------------------------------------
 1558427973           2019-05-21 16:39:33 +0800 shutoff


[root@kvm ~]# virsh snapshot-current centos6.5          //查看名为centos6.5虚拟机详细快照信息

<domainsnapshot>
  <name>1558427973</name>
  <state>shutoff</state>
  <creationTime>1558427973</creationTime>
  <memory snapshot='no'/>
  <disks>
    <disk name='vda' snapshot='internal'/>
    <disk name='hda' snapshot='no'/>
  </disks>
  <domain type='kvm'>
......



#恢复快照
virsh snapshot-revert 虚拟机名称 快照序号

[root@kvm ~]# virsh snapshot-revert centos6.5 1558427973            //将名为centos6.5的虚拟机恢复到"Name"为1558427973时的状态


#删除快照
virsh snapshot-delete 虚拟机名称 快照序号

[root@kvm ~]# virsh snapshot-delete centos6.5 1558427973            //将centos6.5虚拟机"Name"为1558427973的快照删除

已删除域快照 1558427973

12.5.14. 5.14 创建虚拟机

方式1

使用命令创建虚拟机

#virt-install 的--network选项指定bridge:

[root@ubuntu01 ~]# virt-install \
    --name=centos_vm_01 \
    --virt-type=kvm \
    --ram=1024 \
    --cdrom=/data/iso/CentOS-V6.5.23.iso \
    --disk path=/data/img/disk01.raw \
    --network bridge=br0 \
    --graphics vnc,listen=0.0.0.0 \
    --noautoconsole
virt-install -n centos6.6-2 -r 1024 \
--disk /var/lib/libvirt/images/rhel6.6-2.img,size 10 \
--network bridge=br0 --os-type=linux --os-variant=rhe16.6 \
--cdrom /iso/CentOS-6.6-x86_64.iso \
--graphics vnc,port=5910,listen='0.0.0.0',password='redhat'
virt-install --virt-type kvm \
--name centos --ram 1024 \
--disk /tmp/centos.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-Minimal-1611.iso

参数说明:

-r和-n:指明虚拟机名称和内存容量
--disk 设置磁盘参数,size表示设置磁盘容量
--network 设置虚拟机网络,bridge=br0表示使用桥接网络br0
--os-type 设置操作系统类型
--os-variant 表示操作系统版本
--cdrom  设置ISO光驱路径
--graphics 设置图形、监视器等,VNC监视器访问密码为redhat,端口5910,所有网口监听

方式2

  1. 通过xml文件创建虚拟机

<domain type='kvm'>
<name>centos7-0</name>      #虚拟机名称
<memory unit='KiB'>2048576</memory>      #虚拟机内存大小
<currentMemory unit='KiB'>2048576</currentMemory>      #虚拟机在开机时分配的内存大小
<vcpu placement='static'>2</vcpu>      #cpu个数
<os>
  <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
  <boot dev='cdrom'/>      #启动方式  cdrom为从光盘启动(ISO镜像),后面会再次修改启动方式
</os>
<features>
  <acpi/>
  <apic/>
</features>
<cpu mode='custom' match='exact'>
  <model fallback='allow'>Nehalem</model>
</cpu>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
  <emulator>/usr/libexec/qemu-kvm</emulator>
  <disk type='file' device='disk'>
    <driver name='qemu' type='qcow2'/>
    <source file='/opt/image/centos7-0.qcow2'/>      #虚拟硬盘
    <target dev='hda' bus='ide'/>
  </disk>
  <disk type='file' device='cdrom'>
  <source file='/mnt/ISO/CentOS-7-x86_64-DVD-1810.iso'/>      #ISO镜像路径
  <target dev='hdb' bus='ide'/>
  </disk>
  <interface type='bridge'>      #网络模式为桥接
    <source network='virbr0' bridge='virbr0'/>      #此处要和自己虚拟交换机的配置对应
  </interface>
  <input type='tablet' bus='usb'/>
  <input type='mouse' bus='ps2'/>
  <input type='keyboard' bus='ps2'/>
  <graphics type='vnc' port='5905' autopart='no' listen='0.0.0.0' keymap='en-us'/>  #5905为端口号
</devices>
</domain>
  1. 关于虚拟硬盘的创建

qemu-img create -f qcow2 /opt/image/centos7-0.qcow2 40G  #此处的路径与上方xml文件中的硬盘路径一致
  1. 创建虚拟机

virsh define centos7-0.xml    #定义虚拟机
virsh start centos7-0    #启动虚拟机

查看是否启动

vir1.sh list --all

4、连接VNC Viewer -> 宿主机IP:端口号

virsh shutdown centos7-0    #将虚拟机关机

// 关机后先查看一下虚拟机的状态,如果还是运行态,则进行强制关机
// virsh destroy centos7-0

virsh undefine centos7-0    #取消定义

5、连接以后进入安装系统界面,安装完成以后,要将虚拟机的开机方式改为从硬盘启动(否则将一直重复系统安装引导)

</disk>
<disk type='file' device='hd'>
<source file='/mnt/ISO/CentOS-7-x86_64-DVD-1810.iso'/>      #ISO镜像路径
<target dev='hdb' bus='ide'/>
</disk>

重新创建虚拟机

virsh define centos7-0.xml
virsh start centos7-0

至此完成

12.5.15. 5.15 存储池和存储卷的管理命令

virsh也可以对节点上的存储池和存储卷进行管理。

// 显示libvirt管理的存储池
[root@localhost store]# virsh pool-list
 Name                 State      Autostart
-------------------------------------------
 default              active     yes
 iso                  active     yes
 store                active     yes
// 根据存储池名称查询基本信息
[root@localhost store]# virsh pool-info default
Name:           default
UUID:           8bd27a69-7d78-408d-acb7-79de2d9c494c
State:          running
Persistent:     yes
Autostart:      yes
Capacity:       14.53 TiB
Allocation:     259.32 GiB
Available:      14.28 TiB

// 查询存储池中存储卷的列表
[root@localhost store]# virsh vol-list default
 Name                 Path
------------------------------------------------------------------------------
 gitee1-1-clone-1.qcow2 /var/lib/libvirt/images/gitee1-1-clone-1.qcow2
 gitee1-1-clone.qcow2 /var/lib/libvirt/images/gitee1-1-clone.qcow2
 gitee1-1.qcow2       /var/lib/libvirt/images/gitee1-1.qcow2
 gitee1-2.qcow2       /var/lib/libvirt/images/gitee1-2.qcow2
 gitee1-clone.qcow2   /var/lib/libvirt/images/gitee1-clone.qcow2
 gitee1-clone1.qcow2  /var/lib/libvirt/images/gitee1-clone1.qcow2
 gitee1.qcow2         /var/lib/libvirt/images/gitee1.qcow2
 gitee2.qcow2         /var/lib/libvirt/images/gitee2.qcow2
 gitee3-1.qcow2       /var/lib/libvirt/images/gitee3-1.qcow2
 gitee3.qcow2         /var/lib/libvirt/images/gitee3.qcow2
 gitee4-1.qcow2       /var/lib/libvirt/images/gitee4-1.qcow2
 gitee4.qcow2         /var/lib/libvirt/images/gitee4.qcow2

[root@localhost store]# virsh vol-info --pool default gitee1-1.qcow2
Name:           gitee1-1.qcow2
Type:           file
Capacity:       20.00 GiB
Allocation:     20.00 GiB


[root@localhost store]# virsh vol-path --pool default gitee1-2.qcow2
/var/lib/libvirt/images/gitee1-2.qcow2

[root@localhost store]# virsh vol-name /var/lib/libvirt/images/gitee2.qcow2
gitee2.qcow2

12.5.16. 5.9 格式转换

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

VM虚拟机常用磁盘格式为raw与qcow2格式,默认使用qcow2格式,那么其中raw格式的磁盘性能最好、速度最快,但不支持AES加密、zlib磁盘压缩等新功能, 而qcow2格式磁盘存储空间更小,并支持AES加密、zlib、快照等新功能, 缺点是性能较差 如果想管理指定虚拟机磁盘(如分区情况、磁盘数量等),可以使用”libguestfs-tools”工具(一般默认安装), 下面举例,说明如和转换磁盘格式。

qemu-img info /kvm/store/centos6.5          #//查看指定磁盘文件的信息(如磁盘格式、占用磁盘大小等)


qemu-img convert -f raw -O qcow2 raw格式磁盘镜像路径 qcow2格式磁盘镜像路径

    #选项:

    -c:对输出的镜像文件进行压缩,但只有qcow2和qcow格式支持
    -f:指定源磁盘格式
    -O:指定转换后磁盘格式


#//将指定raw格式文件转换为qcow2磁盘格式文件(注意该虚拟机需关机)
qemu-img convert -f raw -O qcow2 /kvm/store/centos6.5 /kvm/store/centos6.5.qcow2

qemu-img info /kvm/store/centos6.5.qcow2            #//查看转换后磁盘格式信息


    * 注:转换后,需更改KVM虚拟机配置文件,因为虚拟机中还是用原磁盘格式文件,需要更改为新转换后的磁盘文件,才能使用新磁盘格式

virsh edit centos6.5                //编辑指定名为centos6.5虚拟机配置文件
 24       <driver name='qemu' type='qcow2' cache='none'/>
 25       <source file='/kvm/store/centos6.5.qcow2'/>

virsh start centos6.5                   //启动该KVM虚拟机

12.6. 6.KVM命令总结

https://blog.csdn.net/chengyinwu/article/details/104074802

12.7. 7. 虚拟机系统管理器

虚拟机系统管理器由软件包virt-manager提供。可以用yum -y install virt-manager,安装完毕后使用virt-managerGUI界面进行设置和管理虚拟机。

12.8. 8. oVirt虚拟化管理平台

oVirt是Red Hat公司下的RHEV开源版本,主要用来管理和部署虚拟化主机。

  • oVirt由两部分组成,客户端称为oVirt Node,与VMware公司的ESXI类似,主要实现主机虚拟化

  • oVirt-engine 类似于VMware vCenter,主要用来管理虚拟化主机。

oVirt 管理平台的安装过程十分简便, 其官方网站上对其有十分详尽的说明。

oVirt官方网站: http://www.ovirt.org/Home

12.9. 9.参考博客

http://blog.linuxli.com/2019/05/Hypervisor_kvm/

https://www.cnblogs.com/clsn/p/8366251.html#auto-id-13

//CentOS 7 安装配置KVM 通过KVM安装CentOS系统
https://www.cnblogs.com/bigdevilking/p/9615261.html

12.10. KVM虚拟化学习目录

https://www.cnblogs.com/itzgr/tag/%E8%99%9A%E6%8B%9F%E5%8C%96/

https://www.cnblogs.com/yxiaodao/p/10708078.html

https://www.cnblogs.com/yizhangheka/p/12011418.html#%E7%83%AD%E8%BF%81%E7%A7%BB%E6%93%8D%E4%BD%9C