虚拟化和KVM

本文最后更新于:2023年12月5日 晚上

虚拟化基础

Hypervisor

  • Hyperisor 是一种运行在基础物理服务器和操作系统之间的中间软件层,其可以允许多个操作系统和应用共享底层的内存、CPU、磁盘等物理硬件,也可以叫做 VMM(vritual machine moitor),即 虚拟机监视器
  • Hypervisor 是所有虚拟化技术的核心,非中断地支持多工作负载迁移的能力是 Hypervisor 的基本功能,当服务器启动并执行 Hypervisor 时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统

X86 CPU 的保护环:

Hypervisor 分类

  • 裸金属型
  • 宿主型

虚拟化技术分类

模拟器 / 软件仿真

通过软件模拟完整的硬件环境来虚拟化来宾平台,可以模拟 X86、ARM 、PowerPC 等多种 CPU

性能比较低

产品或方案:QEMU

全虚拟化

全虚拟化不做 CPU 和内存模拟,只对 CPU 和内存做相应的分配等操作

软件辅助的全虚拟化

在 Intel 等 CPU 厂商还没有发布 x86 CPU 虚拟化技术之前,完全虚拟化都是通过软件辅助的方式来实现的

硬件辅助的完全虚拟化

2005 年 Intel 提出并开发了由 CPU 直接支持的虚拟化技术,CPU 可以明确的分辨出来自 GuestOS 的特权指令,并针对 GuestOS 进行特权操作,而不会影响到 HostOS。

将虚拟化模块加载到 HostOS 的内核中,例如:KVM。
KVM 通过在 HostOS 内核中加载 KVM Kernel Module 来将 HostOS 转换成为一个 VMM。所以此时 VMM 可以看作是 HostOS,反之亦然。

半虚拟化

半虚拟化要求 guest OS 知道自己运行在虚拟化环境中,因此 guest OS 的系统架构必须和宿主机的系统架构相同,并且要求对 guest OS 的内核做相应的修改。

如果不修改内核而实现半虚拟化,可以在每一个 GuestOS 中安装半虚拟化软件,如 VMTools、RHEVTools。

云计算

美国国家标准与技术研究院(NIST)定义:

云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互

  • 公有云:阿里云、腾讯云等,个人都可以付费使用,不需要关心底层硬件,但是数据安全需要考虑
  • 私有云:在自己公司内部或 IDC 自建 Openstack、VMware 等环境
  • 混合云:既要使用公有云,又要使用私有云,即自己的私有云的部分业务和公有云有交接,这部分称为混合云

云计算分层:SaaS、PaaS、IaaS

  • IaaS:按需创建主机
  • PaaS:按需创建应用程序并部署应用程序

虚拟化和云计算:

云计算是一种服务模式,虚拟化是一种技术;

虚拟化是云计算的重要支撑技术。

虚拟化
定义 技术 方法
目的 从 1 个物理硬件系统创建多个模拟环境 汇聚并自动化分配虚拟资源以供按需使用
用途 针对具体用途为特定用户提供打包资源 针对多种用途为用户群组提供不同资源
配置 基于镜像 基于模板
使用寿命 数年(长期) 数小时至数月(短期)
成本 资本支出(CAPEX)高、运营支出(OPEX)低 私有云:CAPEX 高、OPEX 低 公共云:CAPEX 低、OPEX 高
可扩展性 纵向扩展 横向扩展
工作负载 有状态 无状态
租赁 单一租户 多个租户

参考:https://www.redhat.com/zh/topics/cloud-computing/cloud-vs-virtualization

虚拟化技术之 KVM 架构和部署

KVM 架构

  • kvm 只提供了三个模块:kvm.ko、kvm_intel.ko、kvm_amd.ko,后两个模块是根据物理主机的 CPU 所属厂家自动匹配的

  • kvm 开发团队借用了 qemu 代码,并作了一些修改,形成了一套工具,也就是 qemu-kvm

  • /dev/kvm 设备是 kvm 虚拟出来的一个设备文件

  • /dev/kvm 只是 kvm 内核模块提供给用户空间的一个接口,这个接口被 qemu-kvm 调用,通过 ioctl 系统调用就可以给用户提供一个工具用以创建,删除,管理虚拟机等

KVM 体系结构:

  • KVM:初始化 CPU 硬件,打开虚拟机模式,负责 CPU、内存、中断控制器、时钟。由内核模块 kvm_xxx.ko 实现,工作在 Hypervisor,设备/dev/kvm,是一个字符设备,在用户空间可以通过 ioctl()系统调用来完成 KVM 创建、启动、为 VM 分配内存、读写 VCPU(虚拟 CPU)的寄存器、向 CPU 注入中断、时钟等管理功能
  • QEMU:工作在用户空间,主要用于实现模拟 IO 设备,如显卡、网卡、硬盘等,qemu-kvm 进程,用于实现一个虚拟机实例
  • libvirt:后文详细介绍

KVM 模块载入后的系统的运行模式:

  • 内核模式:GuestOS 执行 I/O 类操作,或其他的特殊指令的操作;又称为“来宾-内核”模式
  • 用户模式:代表 GuestOS 请求 I/O 类操作
  • 来宾模式:GuestOS 的非 I/O 类操作;有被称为“来宾-用户“模式,称作虚拟机的用户模式更贴切

KVM 的组件:

KVM 功能:

  • 支持 CPU 和 Memory 超分(Overcommit)
  • 支持半虚拟化 I/O (virtio)
  • 支持热插拔 (cpu、块设备、网络设备等)
  • 支持对称多处理(Symmetric Multi-Processing 缩写为 SMP )
  • 支持实时迁移(Live Migration)
  • 支持 PCI 设备直接分配和 单根 I/O 虚拟化 (SR-IOV)
  • 支持内核同页合并 (KSM )
  • 支持 NUMA (Non-Uniform Memory Access 非一致存储访问结构 )

QEMU:

Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,能够模拟一台能够独立运行操作系统的虚拟机,因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成虚拟化工作,KVM 完成复杂及要求比较高的设备虚拟化,而 Qemu 完成像鼠标、键盘等设备的虚拟化。

KVM 和 Xen:

总的来说,Xen 性能更高,但是 KVM 更简单易用,所以 KVM 更流行

目前在各大公有云厂商新购买的虚拟机基本运行在 KVM 环境下,就连早期一直使用 Xen 的 AWS 也在 2017 年开始逐渐转换到 KVM 环境

RHEL(CentOS)虚拟设备三种工作模式

Red Hat Enterprise Linux 7 的虚拟化功能为虚拟机提供了三种不同形式的系统设备。这些硬件设备都被显示为物理连接到虚拟机,但设备的驱动以不同方式工作。这三种形式包括:

  • 虚拟和仿真设备
  • 半虚拟化设备
  • 物理共享设备

虚拟和仿真设备:

完全使用软件实现的虚拟化设备

半虚拟化设备:

  • KVM 为虚拟机提供准虚拟化设备,它使用 Virtio API 作为 VMM 和 GuestOS 的中间层
  • virtio 设备由两部分组成:主机设备和客机驱动。半虚拟化设备驱动允许 GuestOS 访问 HostOS 上的物理设备
  • 半虚拟化设备的驱动必须安装在客机操作系统上
  • 当虚拟机运行大小需要密集 I/O 操作的应用程序时,推荐使用半虚拟化设备,而不是使用仿真设备
半虚拟化网络设备:virtio-net
半虚拟化块设备:virtio-blk
半虚拟化控制器设备:virtio-scsi
半虚拟化时钟:
半虚拟化串口设备:virtio-serial
气球设备:virtio-balloon
半虚拟化随机数字生成器:virtio-rng
半虚拟化图形卡:

透传物理主机设备:

特定硬件平台允许虚拟机直接访问多种硬件设备及组件。在虚拟化中,此操作被称为“设备分配 ”(device assignment)。设备分配又被称作 “传递 ”(passthrough)

VFIO 设备分配:
USB 传递:
SR-IOV:
NPIV:

KVM 集中管理和控制

  • oVirt:功能强大,Redhat 虚拟化管理平台 RHEV 的开源版
  • WebVirtMgr:virt-manager 的 Web 模式的替代品
  • OpenStack:最主流的开源虚拟化管理平台
  • Proxmox virtualization environment:简称 PVE,开源免费的基于 linux 的企业级虚拟化方案,可以认为是简化版的 OpenStack

重点学习 OpenStack 和 PVE

安装 KVM 工具包

  • qemu-kvm:为 kvm 提供底层仿真支持
  • libvirt-daemon:libvirtd 守护进程,管理虚拟机
  • libvirt-client:用户端软件,提供客户端管理命令
  • libvirt-daemon-driver-qemu:libvirtd 连接 qemu 的驱动
  • libvirt:提供统一 API,是使用最多的 KVM 虚拟化管理工具,通过 libvirt 调用 KVM 创建虚拟机,其不但能管理 KVM,还能管理 VMware、Xen、Hyper-V、virtualBox 等虚拟化方案
  • virt-manager:图形界面管理工具,其底层是调用 libvirt API 来完成对虚拟机的各种操作
  • virt-install:虚拟机命令行安装工具
  • virsh:基于 libvirt API 创建的命令行工具,它可以作为图形化的 virt-manager 应用的备选工具。
  • virt-viewer:通过 VNC 和 SPICE 协议显示虚拟机器图形控制台的最小工具。该工具来自 virtviewer 程序包
  • cockpit:CentOS8 专门提供的基于 Web 的虚拟机管理界面

libvirt 包功能

libvirt 程序包提供:

  1. 一个稳定的通用层来安全地管理主机上的虚拟机
  2. 一个管理本地系统和联网主机的通用接口

Libvirt API 是相对独立与 VMM 的虚拟化应用程序接口,在 VMM 支持的情况下,调用 Libvirt API 进行部署、创建、修改、监测、控制、迁移以及停止虚拟机等操作。

尽管 libvirt 可同时访问多个主机,但 API 只限于单节点操作。

libvirt 主要的功能是管理单节点主机,列举、监测和使用管理节点上的可用资源,其中包括 CPU、内存、储存、网络和非一致性内存访问(NUMA)分区。

virt-manager 与 virsh 是基于 Libvirt API 构建的高级管理工具。管理工具可以位于独立于主机的物理机上,并通过安全协议和主机进行交流。

libvirt 结构图:

安装 KVM 相关包

  • CentOS
yum -y install qemu-kvm libvirt virt-manager virt-install  virt-viewer
systemctl start --now libvirtd

# CentOS 8 还提供基于Web的虚拟机管理方式
yum -y install cockpit
  • Ubuntu

官方文档:https://ubuntu.com/server/docs/virtualization-libvirt

# kvm-ok 验证是否支持kvm,只有Ubuntu支持,CentOS 不支持
sudo apt -y install qemu-kvm virt-manager libvirt-daemon-system

创建虚拟机

三种方式:

  1. virt-manger 工具交互式安装
  2. virt-install 命令安装
  3. 基于现有虚拟机磁盘为模版创建新的虚拟机

重点掌握 virt-install 命令配合 PXE 自动实现自动安装系统

virt-install 命令

virt-install --help

virt-install 的选项很多,需要好好研究,但是这里就不一一列举了

qemu-img 命令

利用 qemu-img 命令创建虚拟磁盘,注意: qemu-img create 会覆盖原文件,所以要先检查是否有同名文件存在

sudo qemu-img create -f qcow2 /var/lib/libvirt/images/centos7-pxe1.qcow2 20G

范例:virt-install & PXE

HostOS:ubuntu20.04 (物理机)

GuestOS:Centos7

  1. 配置 PXE 环境,参考前面的笔记

    install
    xconfig --startxonboot
    keyboard --vckeymap=us --xlayouts='us'
    lang en_US.UTF-8
    rootpw --iscrypted $1$YyodG.X7$LzhHqxWONgSh0NBoC730o0
    url --url="http://10.0.0.1/centos/7/os/x86_64"
    auth --useshadow --passalgo=sha512
    text
    firstboot --enable
    selinux --disabled
    skipx
    services --disabled="chronyd"
    ignoredisk --only-use=vda
    firewall --disabled
    network --bootproto=dhcp --device=eth0
    network --hostname=c7
    reboot
    timezone Asia/Shanghai --nontp
    bootloader --append="net.ifnames=0" --location=mbr --boot-drive=vda
    zerombr
    clearpart --all --initlabel
    part /boot --fstype="ext4" --ondisk=vda --size=300
    part pv.01 --size 1 --grow
    volgroup volgrp pv.01
    logvol swap --vgname=volgrp --name=swap --fstype="swap" --size=2048
    logvol / --vgname=volgrp --name=root --fstype="ext4" --size=1 --grow
    %post
    useradd lujinkai
    %end
    %packages
    @^minimal
    @core
    %end
  2. qemu-img 命令创建虚拟磁盘

    sudo qemu-img create -f qcow2 /var/lib/libvirt/images/centos7-pxe1.qcow2 20G
  3. virt-install 命令安装

    sudo virt-install \
    --virt-type kvm \
    --name centos7-pxe1 \
    --memory 2048 \
    --vcpus 1 \
    --disk path=/var/lib/libvirt/images/centos7-pxe1.qcow2,bus=virtio \
    --network network=default \
    --graphics vnc,listen=0.0.0.0 \
    --location=/usr/local/src/CentOS-7-x86_64-Minimal-2003.iso \
    --extra-args="ks=http://10.0.0.1/ks/centos7.cfg"

    注意: –disk 的 bus 选项一定要指定,因为默认 bus=scsi,而这里直接在 ubutu 物理机中安装,硬盘是 sata,可以指定 bus=sata,不过这样是全虚拟化,而指定 bus=virtio 是半虚拟化,性能更好

  4. 安装成功,初始化配置,这里只说一点:

    关于 ssh 连接慢的问题,宿主机 ubuntu 修改/etc/ssh/ssh_conf:

    GSSAPIAuthentication no
    
    ServerAliveInterval 55
    ServerAliveCountMax 9
    

    来宾机 centos 修改/etc/ssh/sshd_conf:

    UseDNS no # 跳过dns验证

范例:基于现有虚拟机磁盘为模版创建新的虚拟机

# 先复制
lujinkai@Z510:~$ cd /var/lib/libvirt/images/
lujinkai@Z510:/var/lib/libvirt/images$ sudo cp centos7-pxe1.qcow2 centos7-pxe3.qcow2
# 然后创建
lujinkai@Z510:/var/lib/libvirt/images$ sudo virt-install \
> --virt-type kvm \
> --name centos7-pxe3 \
> --memory 2048 \
> --vcpus 1 \
> --disk bus=virtio,path=/var/lib/libvirt/images/centos7-pxe3.qcow2 \
> --network network=default,model=virtio \
> --graphics vnc,listen=0.0.0.0 \
> --noautoconsole \
> --autostart \
> --boot hd
WARNING  未检测到操作系统,虚拟机性能可能会受到影响。使用 --os-variant 选项指定操作系统以获得最佳性能。

开始安装......
域创建完成。

这样相当于直接拷贝镜像,开机后会发现 ip 冲突,需要手动修改 ip,不过 MAC 没有冲突

管理虚拟机

使用半虚拟化驱动 virtio

为了提高内存、硬盘、网络的性能,需要支持半虚拟化

virtio 工作原理

virtio 是一种 I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化 Hypervisor 中的一组通用 I/O 设备的抽象,提供了一套上层应用与各 Hypervisor 虚拟化设备(KVM,Xen,VMware)之间的通信框架和编程接口,减少跨平台所带来的兼容性问题,大大提高驱动程序开发效率,windows 系统需要单独安装 virtio 驱 动,linux 系统自带 virtio 驱动

virtio 使用 virtqueue 来实现 I/O 机制,每个 virtqueue 就是一个承载大量数据的队列,具体使用多少个队列取决于需求,例如,virtio 网络驱动程序(virtio-net)使用两个队列(一个用于接受,另一个用于发送),而 virtio 块驱动程序(virtio-blk)仅使用一个队列

使用统一的 virtio 接口,可以支持多种硬件设备:

  • 不同的虚拟设备和不同的虚拟机可以有不同的前端驱动
  • 不同的硬件设备可以有不同的后端驱动
  • 两者之间的交互遵循 virtio 的标准

virtio 驱动安装

Linux 自带,Windows 需要额外安装

# 如果有红帽的RHN订阅,可以从以下位置下载virtio-win包
https://rhn.redhat.com/rhn/software/packages/details/Overview.do?pid=868414
# 从社区获得
http://www.linux-kvm.org/page/Downloads
https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html

安装与配置 QEMU guest agent

在 GuestOS(VM)中安装 QEMU guest agent,HostOS 就可以调用 libvirt 向 VM 发送命令,例如:“冻结”、“释放文件系统、虚拟 CPU 的热添加及移除等

  • RHEL/CentOS 中有相应的安装包:qemu-guest-agent-xxx.rpm
  • Windows 需要手工安装
# 安装
[root@c71 ~]$yum install qemu-guest-agent.x86_64
# 启动
[root@c71 ~]$systemctl start qemu-guest-agent.service
virsh shutdown --mode=agen # 比--mode=acpi更加安全地关闭操作系统
virsh snapshot-create -quiesce # 在创建快照之前面,将缓存的内容刷入到磁盘
virsh domfsfreeze # 静默文件系统
virsh domfsthaw  # 恢复静默的文件系统
virsh domfstrim  # 让虚拟机trim文件系统
virsh domtime  # 获得虚拟机的时间
virsh setvcpus  # 配置虚拟机的vCPU
virsh domifaddr --source agent # 查询虚拟机的IP地址
virsh domfsinfo  # 显示虚拟机的文件系统列表
virsh set-user-password # 设置虚拟机用户的密码

范例:

lujinkai@Z510:~$ virsh domfsinfo centos7-pxe1
 Mountpoint   Name   Type   Target
------------------------------------
 /            dm-0   ext4   vda
 /boot        vda1   ext4   vda

lujinkai@Z510:~$ virsh domifaddr --source agent centos7-pxe1
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 lo         00:00:00:00:00:00    ipv4         127.0.0.1/8
 -          -                    ipv6         ::1/128
 eth0       52:54:00:5b:08:5d    ipv4         10.0.0.71/24
 -          -                    ipv6         fe80::5054:ff:fe5b:85d/64

安装和配置 SPICE agent

在 VM 操作系统中安装 SPICE client、SPICE agent 可以让 virt-manager 等图形应用程序更加流畅

  • 在 virt-manager 中调整窗口尺寸,SPICE agent 自动调整 X 会话的分辨率
  • 在 Host 与 Guest 之间复制与粘贴
  • 防止鼠标拖尾等

libvirt 管理虚拟机

主要通过 virsh 和 virst-manager 这两个工具调用 libvirt 来实现虚拟机的管理

注意: 如果 libvirtd 服务意外关闭,将导致相关工具,如 virt-manager 和 virsh 等无法和虚拟机连接,但虚拟机仍会正常运行

systemctl start libvirtd.service

virsh 命令

virsh 可以认为是 virt-manager 的命令行工具

两种工作模式:交互式和非交互式,重点掌握非交互式

virsh --help # 查看帮助
virsh help command # 查看子命令帮助
  • 启动和关闭虚拟机
virsh list      # 查看运行中的虚拟机
virsh list --all    # 查看所有虚拟机
virsh start         # 启动虚拟机
virsh shutdown         # 关闭虚拟机
  • 暂停和恢复虚拟机

暂停时,将内存、寄存器,缓存等全部状态保存到硬盘
恢复时,将保存下来的数据读取回去,所以就能按原来的状态运行了

virsh suspend  # 暂停虚拟机
virsh resume  # 回复虚拟机
  • 配置虚拟机开机自启动:
virsh autostart centos7-pxe1
  • 查看虚拟机配置:

每个虚拟机的配置默认存放在 /etc/libvirt/qemu 目录下的 xml 文件中

查看虚拟机配置:相当于查看 /etc/libvirt/qemu/centos7-pxe1.xml 文件

virsh dumpxml --domain centos7-pxe1
  • 删除虚拟机配置:

删除虚拟机配置(qemu/xxx.xml),但是不删除磁盘文件(images/xxx.qcow2)

virsh undefine centos7-pxe1

存储管理

KVM 中,存储主要有两个概念:

  1. 存储池
  2. 存储卷

存储池

libvirt 以存储池的形式对存储进行统一管理,简化操作

存储池有很多种类型,这取决于存储池是基于什么“介质”创建的,以下是存储池支持的“介质”,分为两种:文件系统 和 磁盘:

# 文件系统:
dir:文件系统目录,就是一个目录
fs:预格式化设备,就是一个创建了文件系统的分区,例如:/dev/sdb6
netfs:网络导出的目录,例如 nfs、samba

# 磁盘:
disk:物理磁盘设备,直接读写硬盘设备,例如: /dev/sdb
scsi:本地SCSI存储,例如:host0(/sys/class/scsi_host/host0)
iscsi:网络共享iSCSI存储
logical:LVM卷组,最常用,推荐

# 不太清楚文件系统还是磁盘:
gluster:Gluster 文件系统
mpath:多路径设备枚举器
rbd:RADOS 设备块/Ceph
sheepdog:Sheepdog文件系统,分布式文件系统
zfs:ZFS pool

存储卷

存储卷在存储池中,存储卷的类型取决于存储池的类型:

如果存储池基于文件系统,其中的存储卷就是文件,例如 dir、fs、netfs;
如果存储池是基于磁盘,其中的存储卷就是其对应的数据块,例如 logical 对应逻辑卷、disk 对应分区;

qcow2 和 lv

稀疏文件:从表现形式上来看,当 ls 和 du 命令查看文件,显示的大小不一样,那这个文件就是稀疏文件

虚拟机可以安装在不同的介质上,重点掌握两种:磁盘镜像 和 逻辑卷

  • 磁盘镜像

磁盘镜像就是个文件,可以存储在各种文件系统中

磁盘镜像的格式有好几种,最常用的是 qcow2 格式,qcow2 格式的镜像文件功能丰富,支持如快照、压缩及加密等功能,缺点就是性能不太好

上文创建虚拟机用的就是磁盘镜像

  • 逻辑卷

虚拟机直接安装在磁盘,性能最好,LVM 性能稍差,但是更加灵活,所以推荐 LVM,将虚拟机安装在逻辑卷中

使用 virt-manager 将虚拟机安装在逻辑卷,关键点在 step 4,选择自定义的存储,即选择逻辑卷

安装完后启动可能会报错,重启 libvirt 就好了

virt-install 安装虚拟机到逻辑卷,和前面安装虚拟机到磁盘镜像中的区别就是–disk 选项,其他都一样:

--disk path=/dev/vm_images_lvm/lv2,bus=virtio \

离线工具

不启动虚拟机的情况下,直接访问管理虚拟机对应的磁盘,即离线访问

离线工具应用

  • 拯救和修复客户无法启动或需要更改启动配置的虚拟机
  • 准备新的磁盘映像,其中包含文件、目录、文件系统、分区、逻辑卷和其他选项
  • 查看或下载虚拟机磁盘中的文件;编辑或上传文件到虚拟机磁盘
  • 通过克隆和修改模板来部署虚拟机
  • 读取或写入虚拟机配置
  • 监控虚拟机的磁盘使用情况

guestfs

guestfish 是一个基于 libguestfs API 的交互 shell

libguestfs 提供了一个简单地访问虚机磁盘镜像文件的方法,即使是在虚拟机无法启动的情况下

libguestfs 是由一组丰富的工具集组成,可以让管理员访问虚机文件,甚至调整和挽救文件

dnf -y install libguestfs-tools

# 查看虚拟机的磁盘文件
virsh domblklist centos7

# 只读方式打开虚拟磁盘,选项-i可以实现自动探查后进行自动挂载
guestfish --ro -a /var/lib/libvirt/images/centos7.qcow2 -i  # 交互式

# 读写方式打开虚拟磁盘
guestfish -d centos7 -i  # 交互式

其他离线工具

virt-df    # 监视磁盘使用
virt-resize   # 离线调整虚拟磁盘大小
virt-inspector   # 虚拟机检视
virt-win-reg   # Windows注册表读取和修改
virt-sysprep   # 虚拟机设置重置

网络管理

官方文档:https://wiki.libvirt.org/page/VirtualNetworking

nmcli 实现网桥

# 创建网桥
nmcli connection add type bridge con-name br0 ifname br0
nmcli connection modify br0 ipv4.addresses 10.0.0.100/24 ipv4.method manual
nmcli connection reload
nmcli connection up br0

#加入物理网卡
nmcli con add type bridge-slave con-name br0-port0 ifname eth0 master br0
nmcli con add type bridge-slave con-name br0-port1 ifname eth1 master br0
nmcli connection reload
nmcli con up br0-port0
nmcli con up br0-port1

qemu-kvm 支持的网络

默认网络架构

默认虚拟机网络配置为 NAT 模式,相当于 wmware 的 ANT 模式

自定义网桥架构

自定义网桥架构:桥接网络可以让运行在宿主机上的虚拟机使用和宿主机相同网段的 IP,并且可以从外部直接访问到虚拟机,目前企业中大部分场景都使用桥接网络

网桥(或者交换机)一定是有网卡接口的,给网卡接口配置 ip,才能实现桥接的功能,默认的 nat 模式下,虚拟网桥 virbr0 的网卡接口是 virbr0-nic;自定义网桥架构中,网卡接口是 eth0

ip a显示 nat 模式下,virbr0-nic 没有 ip,自定义网桥模式下,eth0 没有 ip,而虚拟网桥 virbr0 和 virbr1 显示有 ip,这时为什么呢? 我猜这是因为虽然我们常说给网卡配置 ip,但其实 ip 是配置在内核的,所以不论显示在哪里,都是网桥的 ip,形式不重要

用户自定义的隔离的虚拟网络

实战案例


虚拟化和KVM
http://blog.lujinkai.cn/运维/虚拟化和KVM/虚拟化和KVM/
作者
像方便面一样的男子
发布于
2020年12月9日
更新于
2023年12月5日
许可协议