Linux 桌面虚拟化技术 KVM

Posted 笨小孩@GF 知行合一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 桌面虚拟化技术 KVM相关的知识,希望对你有一定的参考价值。

  • KVM:是 Kernel-based Virtual Machine 的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为学术界的主流VMM之一。
  • VM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。

  • 官方网址:http://www.linux-kvm.org/page/Main_Page

  • KVM: 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。是第一个整合到Linux 内核的虚拟化技术。在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。
  • 一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)
  • XEN :需要升级内核,只能支持和物理机系统一样的操作系统。 xen 虚拟上,可以运行windows ?
  • KVM: 支持 linux 以外的其它系统。比如:windows
    QEMU:是一套由 Fabrice Bellard 所编写的以 GPL 许可证分发源码的模拟处理器,在GNU/Linux 平台上使用广泛。QEMU 具有高速度和跨平台的特性,QEMU 能模拟至接近真实电脑的速度。
    QEMU 能模拟整个电脑系统,包括中央处理器及其他周边设备。
    QEMU 和 vmware 一样,都是仿真虚拟化技术,效率比较低。QEMU 也是一种虚拟机技术。

  • 实验环境:
  • VM 虚拟机 CentOS 7.6   SElinux、Firewall以及iptables 均为关闭状态

  • 查看 CPU 是否支持虚拟化
  • egrep "vmx|svm" /proc/cpuinfo
  • intel: vmx
  • AMD: svm
  • 如果显示为空,则表示不支持虚拟化,需要开启 主板 BIOS 虚拟化支持

  • 安装 KVM 模块、管理工具和 libvirt,命令行安装:
  • yum install qemu-kvm libvirt libguestfs-tools virt-install libvirt-python librbd1 -y
  • 注:使用系统镜像,先配置好 yum 本地源

    qemu-kvm : kvm 主程序, KVM 虚拟化模块
    virt-manager: KVM 图形化管理工具,这里不安装不使用
    libvirt: 虚拟化服务
    libguestfs-tools : 虚拟机的系统管理工具
    virt-install : 安装虚拟机的实用工具 。比如 virt-clone 克隆工具就是这个包安装的
    libvirt-python : python 调用 libvirt 虚拟化服务的 api 接口库文件
    librbd1:是一个属于librados的用户态接口库
  • 安装完 KVM 后启动服务
  • systemctl enable libvirtd --now
  • 确定正确加载 kvm 模块
  • lsmod |grep kvm
    kvm_intel             188740  0 
    kvm                   637515  1 kvm_intel
    irqbypass              13503  1 kvm 

  • 如果启动报错,查看 系统日志 /var/log/messages  排查

  • 解决办法:安装最新版本的 librbd1

  • 配置 KVM 网络桥接功能

  • 网桥介绍: 经常说的 Bridge 设备其实就是网桥设备,也就相当于现在的二层交换机,用于连接同一网段内的所有机器,目的就是将第一块网卡 ens33 添加到 br0,此时 br0 就成为了所谓的交换机设备,物理机的 ens33 也是连接在上面的。
  • 添加桥接设备 br0: 相当于一个二层交换机
  • 使用 virsh 命令配置网桥
  • 使用 virsh 命令配置网桥很方便,但 br0 上不会自动配置 DNS,如果需要虚拟机上网需要自己添加DNS,过程如下:
    # yum install libvirt-client -y       #安装包括 virsh 命令的 rpm 包
    # virsh iface-bridge ens33 br0 --no-stp
     注:iface-bridge 网卡接口名 新建网桥名 不启用 stp 生成树协议
    # echo 'DNS1=8.8.8.8' >> /etc/sysconfig/network-scripts/ifcfg-br0
    # systemctl restart network.service 

  •  重启验证 

  • 扩展:virbr0 概述
    virbr0 是一种虚拟网络接口,这是由于安装和启用了 libvirtd 服务后会自动生成一个桥设备名字为 virbr0。
    libvirtd 这个服务,在安装系统时,已经帮你安装好并开机启动了。所以尽管我们没有安装 KVM,一样可以能看到这个 virbr0 这个桥设备。
  •  libvirtd 在服务器上生成一个 virtual network switch (virbr0),kvm 中所有的虚拟机(guests操作系统)通过这个 virbr0 连起来。默认情况下 KVM 中 virbr0 使用的是 NAT 网络模式。所以这种情况下 KVM 中的虚拟机需要通过物理机的网卡才能访问外部。

  • 创建KVM 虚拟机,准备一个硬盘或者分区,用于存放安装好的 Linux 操作系统:
  • mkfs.xfs /dev/sdc
  • mount /dev/sdc /var/lib/libvirt/images/

  • 写入 fstab 实现开机挂载

  • virt-install 命令常用选项:
    -n NAME, --name=NAME 指定 Guest 名字
    -r MEMORY, --ram=MEMORY 指定内存大小
    --vcpus=VCPUS 指定虚拟机的 CPU 数量
    --disk 指定虚拟机磁盘存储文件的路径 , size=5 指定虚拟磁盘的大小,单位是 G;
    例:--disk path=/var/lib/libvirt/images/centos-76.img,size=5
    --accelerate KVM 或 KQEMU 内核加速器,这个选项默认是添加的。另外,如果系统 KVM 和KQEMU 加速器都支持,优先使用 KVM 加速器。
    -c CDROM, --cdrom=CDROM 指定用于全虚拟化 Guest 的虚拟光驱, --cdrom=后指定ISO 或 CDROM 镜像。
    --network #指定虚拟机的网卡模式。如:--network bridge=br0 
    -x EXTRA, --extra-args=EXTRA 用来给加载的 kernel 和 initrd 提供额外的内核命令行参数。比如无人值守安装系统 
  • 准备工作
  • 基于 apache 服务器搭建本地 yum 源镜像
    # yum install httpd -y 
    # systemctl enable httpd --now
    # mkdir /var/www/html/centos7/ 
  • 准备系统镜像:centos7.6 (不建议使用 MINI 版)
    # mount /dev/cdrom /var/www/html/centos7/
  • # iptables -F #关闭防火墙

  • 创建 ks.cfg 自动应答文件

  • cat /var/www/html/ks.cfg
    firewall --disabled
    install
    url --url="http://192.168.2.234/centos7"
    rootpw --iscrypted $1$root$j0bp.KLPyr.u9kgQ428D10
    auth  --useshadow  --passalgo=sha512
    text
    firstboot --disable
    keyboard us
    lang en_US.UTF-8
    selinux --disabled
    logging --level=info
    reboot
    timezone  Asia/Shanghai
    network  --bootproto=dhcp --device=eth0 --onboot=on
    bootloader --location=mbr
    zerombr
    clearpart --all --initlabel 
    part /boot --fstype="xfs" --size=500
    #part swap --fstype="swap" --size=1000
    #part / --fstype="ext4" --size=1 --grow

    part pv.156 --fstype="lvmpv" --size=1 --grow
    volgroup centos --pesize=4096 pv.156
    logvol swap  --fstype="swap" --size=1000 --name=swap --vgname=centos
    logvol /  --fstype="xfs" --vgname=centos --size=1 --grow

    %packages
    @base
    @core
    %end

  • 创建 centos-7 虚拟机:

  • virt-install --name=centos7 --memory=4096,maxmemory=4096 --vcpus=4,maxvcpus=4 --os-type=linux --os-variant=rhel7 --location=http://192.168.2.234/centos7/ --network bridge=br0 -x "ks=http://192.168.2.234/ks.cfg" --disk path=/var/lib/libvirt/images/centos7.qcow2,size=10 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"

  • KVM 虚拟机常用命令
    # virsh list #列出在运行的虚拟机
    # virsh start centos7 #启动 centos7虚拟机
    # virsh shutdown centos7 #关闭 centos7 虚拟机
    # virsh autostart centos7 #设置 centos7.虚拟机为物理机开机后,自动启动
  • 重启验证

  •  shutdown 需要点时间

  • 设为开机启动 kvm 中 centos7 虚拟机,但是 reboot 物理机后,没有启动。
    解决:
    # chkconfig --list libvirtd #开机启动了
    # libvirtd 0:off 1:off 2:off 3:on4:on5:on6:off
    # vim /etc/fstab #记得设置开机自动挂载 sdc,不然后开机启动不了虚拟机

  • KVM 虚拟机克隆和快照

  • 克隆 kvm 虚拟机
    克隆前,centos7.0 需要提前关机。
    语法:virt-clone -o 原虚拟机 -n 新虚拟机 -f 新虚拟机镜像存放路径
    选项:-o old -n new 
    虚拟机镜像: 就是整个虚拟机文件。 
  • virt-clone -o centos7 -n centos7-1 -f /var/lib/libvirt/images/centos7-1.qcow2

  • KVM 虚拟机组成
    一台 KVM 虚拟机由两部分组成:虚拟机配置文件和镜像 img
    查看虚拟机的配置文件:
  • ll /etc/libvirt/qemu
    总用量 8
    drwxr-xr-x 2 root root   25 8月  11 10:50 autostart
    -rw------- 1 root root 3340 8月  13 12:34 centos7-1.xml
    -rw------- 1 root root 3334 8月  11 10:31 centos7.xml
    drwx------ 3 root root   42 8月  11 07:59 networks

  • vim /etc/libvirt/qemu/centos7-1.xml 

  • 调整虚拟机配置,必须关闭该虚拟机
  • viresh shutdown centos7-1
  • 重新加载配置文件
  • virsh define --file /etc/libvirt/qemu/centos7-1.xml
    定义域 centos7-1(从 /etc/libvirt/qemu/centos7-1.xml)

  • 发现内存已经调整为 1G 

  • 测试链接
  • 修改 IP  HOSTNAME

  •  开启之前关闭的虚拟机
  • virsh start centos7

  •  原虚拟机和克隆完的虚拟机配置文件的区别:

  •  vimdiff /etc/libvirt/qemu/centos7.xml /etc/libvirt/qemu/centos7-1.xml

  • 注:这里可以看出两者的 MAC 地址是不一样的。 所以对克隆或复制出来的虚拟机启动后,要修改网卡配置文件的 MAC 地址,因为克隆出来的虚拟机的真实 MAC 地址和操作系统中的 ifcfg-eth0 中的MAC 地址不一样。
  • 虚拟机常用镜像格式对比
  • 目前主要虚拟机的镜像格式:raw,cow, qcow,qcow2,vmdk 。
    raw 格式镜像
    raw:老牌的镜像格式,用一个字来说就是裸,也就是赤裸裸,你随便 dd 一个 file 就模拟了一个raw 格式的镜像。由于裸的彻底,性能上来说的话还是不错的。centos6 上 KVM 和 XEN 默认的格式还是这个格式。centos7 以上默认是 qcow2 。
    裸的好处还有就是简单,支持转换成其它格式的虚拟机镜像对裸露的它来说还是很简单的(如果其它格式需要转换,有时候还是需要它做为中间格式),空间使用来看,这个很像磁盘,使用多少就是多少(du -h 看到的大小就是使用大小)。
    例: qcow2 转为 vmdk 方法是: qcow2 转为 raw ,然后把 raw 转为 vmdk 。也可以直接 qcow2 转为 vmdk
    raw 格式的缺点:不支持 snapshot 快照。
  • cow、qcow、qcow2 格式
    1、cow 格式:还没有成熟,就被放弃了。后来被 qcow 格式所取代。
    2、qcow 格式:刚刚出现的时候有比较好的特性,但其性能和 raw 格式对比还是有很大的差距,目前已经被新版本的 qcow2 取代。
    3、qcow2 格式:
    现在比较主流的一种虚拟化镜像格式,经过优化,目前 qcow2 的性能上接近 raw 裸格式的性能qcow2 格式支持 snapshot,可以在镜像上做 N 多个快照,具有以下优点:
    更小的存储空间
    支持创建 image 镜像
    支持多个 snapshot,对历史 snapshot 进行管理
    支持 zlib 的磁盘压缩
    支持 AES 的加密
    4、 vmdk 格式:
    VMware 的格式,整体性能最好,因为原本 VMware 就是做虚拟化起家。从性能和功能上来说,vmdk 应该算最出色的,由于 vmdk 结合了 VMware 的很多能力,目前来看,KVM 和 XEN 使用这种格式的情况不是太多。但就 VMware 的企业级虚拟化 Esxi 来看,它的稳定性和各方面的能力都很好 


  • KVM 快照:
    快照的作用:1、热备 2、灾难恢复 3、回滚到历中的某个状态

  • 注:快照是存放在 kvm 的磁盘镜像中。
  • kvm 快照,分两种:
    方法 1:使用 lvm 快照,如果分区是 lvm,可以利用 lvm 进行 kvm 的快照备份
    方法 2:使用 qcow2 格式的镜像创建快照。
  • 创建 KVM 快照
  • 要使用快照功能,磁盘格式必须为 qcow2。
  • qemu-img info /var/lib/libvirt/images/centos7-1.qcow2

  • 语法:virsh snapshot-create-as KVM 虚拟机名 快照名
  • virsh snapshot-create-as centos7-1 系统初始
  • 查看快照文件大小
  • ll -h /var/lib/libvirt/qemu/snapshot/centos7-1/

  • 查看当前 kvm 中的虚拟机,是基于哪个快照来运行
  • virsh snapshot-current centos7-1 |head
  • 查看快照占用的大小:
  • emu-img info /var/lib/libvirt/images/centos7-1.qcow2 
    image: /var/lib/libvirt/images/centos7-1.qcow2
    file format: qcow2
    virtual size: 10G (10737418240 bytes)
    disk size: 3.3G
    cluster_size: 65536
    Snapshot list:
    ID        TAG                 VM SIZE                DATE       VM CLOCK
    1         系统初始           226M 2021-08-13 13:17:37   00:15:30.624
    Format specific information:
        compat: 1.1
        lazy refcounts: true

  • 恢复虚拟机快照必须关闭虚拟机
  • 安装一些软件后创建快照

  • 关闭虚拟机后执行恢复快照
  • virsh snapshot-revert 虚拟机名称 快照名称
  • virsh shutdown centos7-1 
    域 centos7-1 被关闭

    virsh domstate centos7-1 
    关闭

    virsh snapshot-revert centos7-1 系统初始

    virsh snapshot-current centos7-1 |head

  • 删除快照
  • virsh snapshot-delete centos7-1 vim_lrzsz 

  • virsh 常用命令
    # virsh list #查看已启动的虚拟机列表
    # virsh list --all #查看所有虚拟机列表
    # virsh start centos7 #启动名称为 centos7 虚拟机
    # virsh shutdown centos7 #关闭 名称为 centos7 虚拟机
    # virsh dumpxml centos7 > /opt/centos7.xml #导出centos7 虚拟机配置文件
    # virsh undefine centos7 #取消域 centos7.0 的定义。
    注:virsh undefine centos7.0 会删除虚拟机 centos7.0 的配置文件,虚拟机 centos7.0 的磁盘
    镜像文件还在。另外,发现“虚拟系统管理器”中管理的 kvm 虚拟机,没有 centos7.0

  •  不能直接删除有快照的虚拟机,要先删除快照

  •  列表、配置文件已经删除,但是磁盘文件依然存在

  • 把虚拟机重新加入到 virt-manager 目录列表。
    语法:virsh define 虚拟机.xml 的绝对路径
  • # virsh destroy centos7 #强制关机,强制关闭 虚拟机。 当使用 virsh shutdown 正常关机,不行时,用这个。
    # virsh autostart centos7#设置开机自启动 centos7.0
    # virsh autostart --disable centos7.0 #取消虚拟机随宿主机开机自启
    # virsh suspend centos7.0 #挂起虚拟机
    # virsh resume centos7.0 #恢复虚拟机

  • qcow2 格式转换成 raw

  • qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/centos7-1.qcow2 /var/lib/libvirt/images/centos7-1.raw
  • 查看转换后的格式,已经转换成了 raw 
  • qemu-img info /var/lib/libvirt/images/centos7-1.raw
    image: /var/lib/libvirt/images/centos7-1.raw
    file format: raw
    virtual size: 10G (10737418240 bytes)
    disk size: 1.2G

  • 修改虚拟机配置文件-使用新的磁盘格式启动虚拟机 
  • virsh edit centos7-1
  • #注意 vim 直接编辑配置文件/etc/libvirt/qemu/xuegod63-kvm2.xml 不生效
    修改后,需要重启服务

  • 其他镜像格式转换方法
    例 1:将 vmdk 转换为 qcow2
    qemu-img convert -f vmdk -O qcow2 source-name.vmdk target-name.qcow2 
    例 2:将 qcow2 转换为 vmdk
    ]# cd /var/lib/libvirt/images/
    ]# qemu-img convert -f qcow2 -O vmdk centos7.img centos7.vmdk

以上是关于Linux 桌面虚拟化技术 KVM的主要内容,如果未能解决你的问题,请参考以下文章

Linux 桌面虚拟化技术 KVM

1.Linux 桌面虚拟化技术 KVM

Linux的桌面虚拟化技术KVM——远程桌面管理

Linux KVM 虚拟化技术

linux mint 17.3 kvm 安装windows7虚拟机

Linux虚拟化技术KVM