KVM虚拟化
安装虚拟化服务器平台
一、KVM介绍
- - KVM是linux内核的模块,它需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT,AMD-V,内存的相关如Intel的EPT和AMD的RVI技术
- - QEMU是一个虚拟化的访真工具,通过ioctl与内核kvm交互完成对硬件的虚拟化支持
- - Libvirt是一个对虚拟化管理的接口和工具,提供用户端程序virsh,virt-install,virt-manager,virt-view与用户交互
二、安装必备软件
- - qemu-kvm: 为kvm提供底层仿真支持
- - libvirt-daemon: libvirtd守护进程,管理虚拟机
- - libvirt-client: 用户端软件,提供客户端管理命令
- - libvirt-daemon-driver-qemu: livirtd连接qemu的驱动
三、虚拟机的组成
- 内核虚拟化模块(KVM)
- 系统设备仿真(QEMU)
- 虚拟机管理程序(LIBVIRT)
--------------------------------------------------------------------------
- 一个XML文件(虚拟机配置声明文件)
- 位置/etc/libvirt/qemu
- 一个磁盘镜像文件(虚拟机的硬盘)
- 位置/var/lib/libvirt/images/
四、安装虚拟化平台命令virsh-install
4.1系统安装工具
- virsh-manager # 图形管理工具
- virt-v2v # 虚拟机迁移工具
- virt-p2v # 物理机迁移工具
# 安装虚拟机
1 yum install -y qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu2 systemctl enable --now libvirtd
# 下载安装vnc客户端用于连接虚拟设备安装系统下载地址:https://www.tightvnc.com/download.php
五、kvm相关命令工具介绍
5.1 virsh命令工具介绍
提供管理各虚拟机的命令接口 - 支持交互模式,查看、创建、停止、关闭 - 格式: virsh [控制指令][虚拟机名称]参数
# 控制指令
list [--all] 列出虚拟机
start|shutdown |reboot 虚拟机启动,停止,重载
destory 强制停止虚拟机 (不建议使用)
suspend 令虚拟机处于暂停状态
resumed 取消暂停状态
console 连接虚拟机的console
edit 修改虚拟机的配置
autostart 设置虚拟机自启动
domiflist 查看虚拟机网上信息
domblklist 查看虚拟机硬盘信息
------------------------------------------------
virsh 虚拟网络管理
net-list [--all] 列出虚拟网络
net-start 启动虚拟交换机
net-destory 强制停止虚拟交换机
net-define 根据xml文件 创建虚拟网络
net-undefine 删除一个虚拟网络设备
net-edit 修改虚拟交换机的配置
net-autostart 设置虚拟交换机自启动
5.2 virsh基本管理操作案例
1、列出当前正在运行的虚拟机 virsh list 2、查看虚拟机的信息 virsh domiflist
virsh domblklist 3、管理虚拟机 virsh console node1 4、设置虚拟机开机自动运行 virsh autostart node1
5.3 常用镜像盘类型
虚拟机的磁盘镜像文件格式 特点\类型 RAW QCOW2 KVM默认 否 是 I/O效率 高 较高 占用空间 大 小 压缩 不支持 支持 后端盘复用 不支持 支持
快照 不支持 支持
5.4 qemu-img命令
qemu-img是虚拟机的磁盘管理命令,支持非常多的磁盘格式,例如raw、qcow、vdi、vmdk等等 qemu-img命令格式 qemu-img 命令 参数 块文件名称 大小 常用命令 create 创建一个磁盘 convert 转换磁盘格式 info 查看磁盘信息 resize 扩容磁盘空间
5.5 qemu实例
创建新的镜像盘文件 qemu-img create -f 格式 磁盘路径 大小 qemu-img create -f qcow2 disk.img 50G 查询镜像盘文件的信息 qemu-img info 磁盘路径 qemu-img info disk.img -b 使用后端模板文件 qemu-img create -b disk.img -f qcow2 disk1.img
5.6 COW技术原理
Copy On Write,写时复制 - 直接映射原始盘的数据内容 - 当数据有修改要求时,在修改之前自动将旧数据拷贝存入前端盘后,对前端盘进行修改 - 原始盘始终是只读的
5.7 qemu-img 实例
# qemu-img基本操作管理 1、创建一个新的镜像盘文件 quem-img create -f qcow2 base.img 50G 2、使用后端模板文件创建一个新的镜像盘文件 quem-img create -b base.img -f qcow2 nginx.img 50G 3、查看镜像盘文件的信息
quem-img info nginx.img
5.8 xml文件解析
# 编辑xml 1、确保要修改的虚拟机处于关机状态 virsh shutdown node1 2、进行编辑修改内存、cpu virsh edit node1 #################################### <domain type='kvm'> <name>node1</name> # virsh list 显示名称 <uuid>...<uuid> <memory unit='KiB'>2195313</memory># 最大使用内存,建议与当前设置虚拟机内存一致 <currentMemory unit='KiB'>2195313</currentMemory># 虚拟机配置使用内存建议与memory一致 <vcpu placement='static'>2</vcpu>
3、进行编辑修改磁盘
virsh edit node1
<disk type='file' device='disk'>
<source file='/var/lib/libvirt/images/node1.img'/>
<target dev='vda' bus='virtio'/> # 添加磁盘需要修改dev
</disk>
4、进行编辑修改网络
virsh edit node1
<interface type='bridge'>
<source bridge='vbr'># 进行修改网络
<model type='virtio'>
</interface>
5、保存
同vim操作一致
6、启动虚拟机
virsh start node1
六、批量克隆虚拟机
6.1 方式一、创建xml文件
# 在/etc/libvirt/qemu/文件夹下创建与窗口名称相同的xml文件(本文中以node1容器为例)
# 1、创建链接硬盘
qemu-img create -f qcow2 -b centos.qcow2 nova01.qcow2 100G
# 导出母机的配置文件 virsh dumpxml centos>/etc/libvirt/qemu/nova01.xml
# 配置修改相应信息 vim /etc/libvirt/qemu/node1.xml # 删除uuid和mac地址
# 修改virsh list显示名称 <name>node1</name> # 修改disk磁盘文件 <source file='/opt/nova01.qcow2'> # 执行命令 virsh define /etc/libvirt/qemu/node1.xml virsh start node1 virsh list virsh console node1
6.2 方式二、通过上virt-clone克隆(完整克隆)
virt-clone --original centos --name openstack --file /opt/openstack.qcow2 --original //后面跟要克隆的虚拟机名字 --name //克隆后虚拟机的名字 --file //指定存放的路径
七、总结
7.1 创建一个前端盘
qemu-img create -f qcow2 base.img 50G
7.2 创建一个配置文件
cp /var/lib/libvirt/image/.node_base.xml /etc/libvirt/qemu/node1.xml
vim /var/lib/libvirt/image/.node_base.xml
7.3 根据配置文件创建虚拟机
virsh define /etc/libvirt/qemu/node1.xml
virsh start node1
virsh list
virsh console node1
# 注: qemu-img 创建的qcow2格式文件默认存放地址:/var/lib/libvirt/images
xml文件默认在/etc/libvirt/qemu/
7.4 动态扩容虚拟机空间
# 1、查看要扩容的虚拟机存储信息 virsh domblklist node1 # 2、对node1进行扩容
# 将node1虚拟机扩容到50G
virsh blockresize --path /opt/openstack.qcow2 --size 50G openstack
# 3、对磁盘空间进行扩容
lsblk
growpart /dev/vda 1
# 4、对文件系统进行扩容
xfs_growfs /dev/vda1
八、创建一个系统镜像
8.1 安装相关安装包
dnf install -y qemu-kvm libvirt virt-install
8.2 启动libvirtd
systemctl start libvirtd
8.3 创建硬盘
qemu-img create -f qcow2 centos.8.4.2015-x86_64.img 20G
8.4 下载windows的VNC客户端
下载地址:https://www.tightvnc.com/download.php
8.5 上传系统镜像
virt-install --virt-type kvm --name centos --ram 2048 --disk /opt/centos.qcow2,format=qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=centos8 --location=/opt/CentOS-8.4.2105-x86_64-dvd1.iso Starting install... Domain installation still in progress. You can reconnect to the console to complete the installation process.
8.6 使用VNC连接
1、确保5900端口开启 2、确保firewalld关闭 3、确保selinux关闭
8.7 查看并操作镜像
# 查看所有 [root@localhost ~]# virsh list --all Id Name State --------------------------------------------- - CentOS-8.4.2105-x86_64.img shut off # 启动 [root@localhost ~]# virsh start CentOS-8.4.2105-x86_64.img Domain CentOS-8.4.2105-x86_64.img started
8.8 再次使用vnc连接配置网卡等信息
# 进入系统配置网卡信息如下 # 1、网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-enp1s0 TYPE=Ethernet BOOTPROTO=DHCP NAME=eth0 DEVICE=eth0 ONBOOT=yes [root@localhost ~]# mv /etc/sysconfig/network-scripts/{ifcfg-enp1s0,ifcfg-eth0} [root@localhost ~]# vi /etc/sysconfig/grub 在倒数第三行quiet后加入如下代码 net.ifnames=0 biosdevname=0 [root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg [root@localhost ~]# shutdown -h now
8.9 配置桥接网络
[root@localhost ~]# nmcli c add type bridge con-name br0 ifname br0 Connection 'br0' (d3e7d478-f689-4706-83a3-0c62a46e85cb) successfully added. [root@localhost ~]# nmcli c modify br0 ipv4.addresses '192.168.232.55/24' ipv4.gateway '192.168.232.2' ipv4.dns '114.114.114.114' ipv4.method manual [root@localhost ~]# nmcli conn add type ethernet slave-type bridge con-name br0 ifname eth0 master br0 Connection 'br0' (46839551-7fd4-4269-96f5-611c9114e34b) successfully added. [root@localhost ~]# nmcli conn up br0 [root@localhost ~]# nmcli c down eth0
8.10 配置虚拟机网络为桥接
使用命令修改虚拟机配置 [root@localhost ~]# virsh edit CentOS-8-x86_64 <interface type='bridge'> <source bridge='br0'/>
九、问题总结
9.1 virsh console 连接不上