安装

  • KVM/QEMU/LIBVIRTD
    • kvm是Linux的内核的模块,它需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT,AMD-V,内存的相关如intel的EPT和AMD的PVI技术
    • qemu是一个虚拟化仿真工具,通过ioctl与内核kvm交互完成对硬件的虚拟化支持
    • libvirt是一个对虚拟化管理的接口和工具,提供用户端程序virsh,virt-install,virt-manager,virt-view与用户交互

必备软件

  • qemu-kvm

    -为kvm提供底层仿真支持

  • libvirt-daemon

    -libvirtd守护进程,管理虚拟机

  • libvirt-client

    -用户端软件,提供客户端管理命令

  • libvirt-daemon-driver-qemu

    -libvirtd连接qemu驱动

可选功能

  • virt-install # 系统安装工具
  • virt-manager # 图形管理工具
  • virt-v2v # 虚拟机迁移工具
  • virt-p2v # 物理机迁移工具

虚拟化平台的安装

1
2
3
yum install -y qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu

systemctl start libvirtd

KVM虚拟机的组成

  • 虚拟机组成

    • 内核虚拟化模块(KVM)
    • 系统设备仿真(QEMU)
    • 虚拟机管理程序(LIBVIRT)
    • 一个xml文件(虚拟机配置声明文件)位置 /etc/libvirt/qemu
    • 一个磁盘镜像文件(虚拟机的硬盘)位置 /var/lib/libvirt/images/

virsh命令介绍

virsh虚拟机管理

1
2
3
4
list [--all] 列出所有虚拟机
start|shutdown|reboot|destroy 启动、关机、重启、强制关闭电源
define|undefine 根据xml文件 创建/删除 虚拟机
console 连接虚拟机的console

在终端使用console会出现未知异常。

1
2
3
4
edit 修改虚拟机的配置
autostart 设置虚拟机开机自启动
domiflist 查看虚拟机网卡信息
domblklist 查看虚拟机硬盘信息

virsh虚拟网络管理

记忆方法其实很简单,不看net-的内容,只看后面的,其实跟虚拟机操作命令差不多

1
2
3
4
5
6
7
net-list [--all]列出虚拟机
net-start 启动虚拟交换机
net-destroy 强制停止虚拟交换机
net-define 根据xml文件创建虚拟网络设备
net-undefine 删除一个虚拟网络设备
net-edit 修改虚拟交换机的配置
net-autostart 设置虚拟交换机自启动

磁盘管理

虚拟机常见的磁盘镜像文件有两种格式,分别是qcow2和raw

特点\类型RAWQCOW2(写复制)
KVM默认
I/O效率较高
占用空间
压缩不支持支持
后端盘复用不支持支持
快照不支持支持

qemu-img命令

  • qemu-img是虚拟机的磁盘管理命令,支持非常多的磁盘格式,例如raw,qcow2,vdi,vmdk等等

qemu-img 命令格式

1
2
3
4
5
6
qemu-img 命令 参数 块文件名称 大小
#常用的命令有
create 创建一个磁盘
convert 转换磁盘格式
info 查看磁盘信息
resize 扩容磁盘空间

创建新的镜像盘文件

1
2
qemu-img create -f 格式 磁盘路径
qemu-img create -f qcow2 disk.img

查询镜像盘文件的信息

1
2
qemu-img info 磁盘路径
qemu-img info info disk.img

-b使用后端模板文件

1
qemu-img create -b disk.img -f qcow2 disk1.img
  • 案例创建一个磁盘格式为qcow2名字为a.img,大小50G的磁盘文件,查看这个磁盘文件的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@yyt ~]# qemu-img create -f qcow2 a.img 50G
Formatting 'a.img', fmt=qcow2 size=53687091200 cluster_size=65536 lazy_refcounts=off refcount_bits=16
# 查看磁盘信息
[root@yyt ~]# qemu-img info a.img
image: a.img
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false

XML文件

1
virsh edit 虚拟机名称
  • name 虚拟机名称
  • memory unit=’KiB’ 最大使用内存
  • currentmemory 当前虚拟机配置内存 (一般情况下保持相等)
  • vcpu cpu

批量创建虚拟机

virsh扩容磁盘

  • virsh虚拟机管理
    • domblklist 查看虚拟机硬盘信息
    • blockresize --path 绝对路径 --size 50G openstack(动态扩容)
  • 扩容思路

    • 首先是硬盘
    • 其次是分区
    • 再次是文件系统
  • 根分区扩容

    • 语言必须要设置为英文 LANG=C
    • 查看磁盘设备是否有多余空间 lsblk
    • 扩容第一个分区 growpart /dev/vda 1 1表示第一个分区
    • 扩容文件系统 ``xfs_growfs /dev/vda1
    • df -hT

命令行安装虚拟机

需要了解和牢记以免出现没有图形化的时候无法操作

准备工作

开启vnc访问

1
2
3
4
5
6
7
8
9
10
11
12
13
vim /etc/libvirt/qemu.conf
# NB, strong recommendation to enable TLS + x509 certificate
# verification when allowing public access
#
vnc_listen = "0.0.0.0" #这一行模式是注释的,把注释去掉

# Enable this option to have VNC served over an automatically created
# unix socket. This prevents unprivileged access from users on the
# host machine, though most VNC clients do not support it.
#
# This will only be enabled for VNC configurations that have listen
# type=address but without any address specified. This setting takes
# preference over vnc_listen

重启libvirtd服务

1
systemctl restart libvirtd

使用命令行安装

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
virt-install \
-n=yyt01 \
-r 1024 \
--vcpus=1 \
-cdrom /root/centos.7.iso \
--disk path=/root/yyt.img,size=20 \
--os-type=linux \
--os-variant=centos7.0 \
--vnc --vncport=5901 \
--network network=default \
--noautoconsole


#
–n 指定虚拟机的名称
–memory 指定分配给虚拟机的内存资源大小
maxmemory 指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源
–vcpus 指定分配给虚拟机的CPU核心数量
-maxvcpus 指定可调节的最大CPU核心数量
–os-type 指定虚拟机安装的操作系统类型
–os-variant 指定系统的发行版本
–location 指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL
–disk path 指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
–bridge 指定使用哪一个桥接网卡,也就是说使用桥接的网络模式
–graphics 指定是否开启图形
–console 定义终端的属性,target_type 则是定义终端的类型
–extra-args 定义终端额外的参数