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-qemu
2 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 连接不上

 

posted @ 2021-09-07 21:30  ☞Python☞  阅读(239)  评论(0编辑  收藏  举报