diff --git a/Tech/operating-system/Virtualization/2.KVM虚拟化/2. KVM 安装配置.md b/Tech/operating-system/Virtualization/2.KVM虚拟化/2. KVM 安装配置.md new file mode 100644 index 00000000..095a3535 --- /dev/null +++ b/Tech/operating-system/Virtualization/2.KVM虚拟化/2. KVM 安装配置.md @@ -0,0 +1,538 @@ +--- +title: KVM 安装配置 +description: 如何在 Linux 系统上安装和配置 KVM 虚拟化技术,包括硬件要求、操作系统选择、KVM 安装步骤、网络桥接配置、存储池和存储卷管理、虚拟机创建和管理工具的使用。 +keywords: + - KVM + - Linux + - 虚拟化安装 + - 网络桥接 + - 存储池 + - 虚拟机管理 +tags: + - 技术/操作系统 + - 虚拟化/KVM +author: 仲平 +date: 2024-07-16 +--- + +## 环境准备 + +### 硬件要求 + +#### 检查 CPU 是否支持虚拟化技术(Intel VT-x 或 AMD-V) + +在部署 KVM 前,需要确保系统的 CPU 支持硬件虚拟化技术。这些技术包括 Intel 的 VT-x 和 AMD 的 AMD-V。以下是检查方法: + +1. **Intel CPU**:使用命令 `grep -E "vmx" /proc/cpuinfo` 检查 CPU 是否支持 VT-x。 +2. **AMD CPU**:使用命令 `grep -E "svm" /proc/cpuinfo` 检查 CPU 是否支持 AMD-V。 + +如果命令输出中包含 `vmx` 或 `svm`,则表示 CPU 支持相应的虚拟化技术。 + +#### 启用 BIOS/UEFI 中的虚拟化支持 + +**即使 CPU 支持虚拟化技术,也需要在 BIOS/UEFI 中启用相应的功能。**以下是通用的启用步骤,具体步骤可能因主板制造商不同而有所差异: + +1. 启动计算机并进入 BIOS/UEFI 设置界面(通常按 `Delete`、`F2`、`F10` 或 `Esc` 键)。 +2. 在 BIOS/UEFI 设置中,找到“高级”或“处理器”选项。 +3. 启用 "Intel Virtualization Technology" 或 "AMD-V" 选项。 +4. 保存更改并退出 BIOS/UEFI 设置。 + +### 操作系统要求 + +KVM 作为 Linux 内核的一部分,主要在 Linux 操作系统上运行。以下是一些常用的、支持 KVM 的 Linux 发行版: + +- **CentOS**:企业级发行版,基于 Red Hat Enterprise Linux (RHEL) 的源代码构建,适合服务器环境。 +- **RHEL**:Red Hat Enterprise Linux,提供商业支持和长期维护,广泛应用于企业环境。 +- **Ubuntu**:广泛使用的发行版,提供了良好的社区支持和文档。 + +## 安装 KVM 和 QEMU + +### 在 Ubuntu 上安装 + +1. 更新软件包列表: + + ```bash + sudo apt update + ``` + +2. 安装 KVM、QEMU 和相关工具: + + ```bash + apt -y install qemu-kvm libvirt-daemon-system libvirt-daemon virtinst libosinfo-bin + ``` + +3. 启用并启动 libvirtd 服务: + + ```shell + sudo systemctl enable --now libvirtd + ``` + +#### 在 CentOS/RHEL 上安装 + +1. 更新系统: + + ```shell + sudo dnf update + ``` + +2. 安装 KVM、QEMU 和相关工具: + + ```shell + sudo dnf install qemu-kvm libvirt virt-install + ``` + +3. 启用并启动 libvirtd 服务: + + ```shell + sudo systemctl enable --now libvirtd + ``` + +#### 在其他 Linux 发行版上安装 + +以下是一些其他常见 Linux 发行版的安装方法: + +- **Debian**: + + ```shell + sudo apt update + sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils + sudo systemctl enable --now libvirtd + ``` + +- **Fedora**: + + ```shell + sudo dnf update + sudo dnf install @virtualization + sudo systemctl enable --now libvirtd + ``` + +### 安装虚拟机管理工具 + +#### 安装 `libvirt` + +`libvirt` 是一个开源 API,用于管理平台虚拟化。前面已经在安装 KVM 和 QEMU 时安装了 `libvirt`。确保其已启用并正在运行: + +```shell +sudo systemctl enable --now libvirtd +``` + +#### 安装 `virt-manager` + +`virt-manager` 是一个基于 GUI 的虚拟机管理工具,适用于桌面用户。 + +- 在 Ubuntu 上安装: + + ```shell + sudo apt install virt-manager + ``` + +- 在 CentOS/RHEL 上安装: + + ```shell + sudo dnf install virt-manager + ``` + +- 在其他 Linux 发行版上安装: + + - Debian: + + ```shell + sudo apt install virt-manager + ``` + + - Fedora: + + ```shell + sudo dnf install virt-manager + ``` + +### 验证安装 + +#### 检查 KVM 模块是否已加载 + +1. 检查 KVM 模块是否已加载: + + ```shell + lsmod | grep kvm + ``` + + 应该看到类似以下的输出: + + ```shell + kvm_intel 204800 0 + kvm 655360 1 kvm_intel + ``` + +2. 如果使用 AMD 处理器,检查 `kvm-amd` 模块: + + ```shell + lsmod | grep kvm + ``` + + 应该看到类似以下的输出: + + ```shell + kvm_amd 204800 0 + kvm 655360 1 kvm_amd + ``` + +#### 确认虚拟化功能可用 + +1. 在 Ubuntu 和 Debian 上使用 `kvm-ok` 工具检查虚拟化功能: + + ```shell + sudo apt install cpu-checker + sudo kvm-ok + ``` + + 输出应显示: + + ```shell + INFO: /dev/kvm exists + KVM acceleration can be used + ``` + +2. 在 CentOS/RHEL 和其他发行版上,使用 `virt-host-validate` 工具检查: + + ```shell + sudo virt-host-validate + ``` + + 输出应显示: + + ```shell + QEMU: Checking for hardware virtualization: PASS + QEMU: Checking for device /dev/kvm: PASS + QEMU: Checking for device /dev/vhost-net: PASS + QEMU: Checking for device /dev/net/tun: PASS + …… + ``` + +通过以上步骤,可以确保 KVM 及其相关工具已正确安装并配置好。接下来可以开始创建和管理虚拟机,充分利用 KVM 提供的虚拟化功能。 + +## 基本配置 + +### 配置网络桥接 + +网络桥接允许虚拟机直接与主机网络进行通信,使其像物理机一样访问网络。以下是使用 `nmcli` 创建和配置虚拟网络桥接的详细步骤: + +#### 创建虚拟网络桥接(桥接模式) + +1. **安装必要的软件包**: + + - 在 Ubuntu 上: + + ```shell + sudo apt update + sudo apt install network-manager + ``` + + - 在 CentOS/RHEL 上: + + ```shell + sudo dnf install NetworkManager + ``` + +2. **配置网络桥接**: + + - 创建一个新的网桥接口: + + ```shell + sudo nmcli connection add type bridge ifname br0 + ``` + + - 将物理接口连接到网桥上,例如假设你正在使用 `eth0` 接口: + + ```shell + sudo nmcli connection add type bridge-slave ifname eth0 master br0 + ``` + + - 建议禁用网桥接口 IPv4 和 IPv6,网桥接口仅作为二层设备使用: + + ```shell + sudo nmcli connection modify br0 ipv4.method disable + sudo nmcli connection modify br0 ipv6.method disable + ``` + + - 激活网桥和物理接口: + + ```shell + sudo nmcli connection up br0 + sudo nmcli connection up eth0 + ``` + +#### 验证桥接配置 + +1. **检查网桥接口状态**: + + ```shell + nmcli connection show + nmcli device status + ``` + + 应该看到类似以下的输出,表示网桥 `br0` 和物理接口 `eth0` 已经配置并启用: + + ```text + NAME UUID TYPE DEVICE + br0 12345678-1234-1234-1234-123456789abc bridge br0 + eth0 87654321-4321-4321-4321-abcdefabcdef ethernet eth0 + ``` + +#### 配置 Libvirt 使用桥接网络 + +1. **编辑或创建网络配置文件**:例如 `/etc/libvirt/qemu/networks/bridged.xml`: + + ```xml + + bridged + + + + ``` + +2. **定义并启动该网络**: + + ```shell + sudo virsh net-define /etc/libvirt/qemu/networks/bridged.xml + sudo virsh net-start bridged + sudo virsh net-autostart bridged + ``` + +通过这些步骤,您可以在 Ubuntu 和 CentOS 系列系统中使用 `nmcli` 来统一配置和管理网络桥接。这确保了配置的一致性,并简化了网络管理。 + +### 配置存储池和存储卷 + +存储池和存储卷管理是 KVM 中虚拟机存储管理的重要组成部分。存储池可以是目录、LVM 或 NFS 等类型,存储卷则是具体的磁盘映像文件。 + +#### 创建存储池 + +1. **目录类型存储池**: + + - 创建目录: + + ```shell + sudo mkdir -p /var/lib/libvirt/images + ``` + + - 定义存储池: + + ```shell + sudo virsh pool-define-as --name default --type dir --target /var/lib/libvirt/images + ``` + + - 启动并自动启动存储池: + + ```shell + sudo virsh pool-start default + sudo virsh pool-autostart default + ``` + +2. **LVM 类型存储池**: + + - 创建物理卷和卷组: + + ```shell + sudo pvcreate /dev/sdX + sudo vgcreate vg_kvm /dev/sdX + ``` + + - 定义存储池: + + ```shell + sudo virsh pool-define-as --name lvm-pool --type logical --source-name vg_kvm + ``` + + - 启动并自动启动存储池: + + ```shell + sudo virsh pool-start lvm-pool + sudo virsh pool-autostart lvm-pool + ``` + +3. **NFS 类型存储池**: + + - 安装 NFS 客户端: + + - 在 Ubuntu 上: + + ```shell + sudo apt install nfs-common + ``` + + - 在 CentOS/RHEL 上: + + ```shell + sudo dnf install nfs-utils + ``` + + - 定义存储池: + + ```shell + sudo virsh pool-define-as nfs-pool netfs --source-host nfs-server --source-path /path/to/nfs/export --target /mnt/nfs + ``` + + - 启动并自动启动存储池: + + ```shell + sudo virsh pool-start nfs-pool + sudo virsh pool-autostart nfs-pool + ``` + +#### 管理存储卷 + +1. **创建存储卷**: + + - 在默认存储池中创建一个新的存储卷: + + ```shell + sudo virsh vol-create-as default new-volume 10G + ``` + + - 在 LVM 存储池中创建一个新的逻辑卷: + + ```shell + sudo virsh vol-create-as lvm-pool lv_new-volume 10G + ``` + +2. **查看存储卷**: + + ```shell + sudo virsh vol-list default + sudo virsh vol-list lvm-pool + ``` + +3. **删除存储卷**: + + ```shell + sudo virsh vol-delete new-volume --pool default + ``` + +通过以上配置步骤,可以成功配置 KVM 的网络桥接、存储池和存储卷,确保虚拟机具备网络连接和存储资源。 + +## 创建和管理虚拟机 + +### 使用命令行工具创建虚拟机 + +#### 使用 `virt-install` 创建虚拟机 + +`virt-install` 是一个命令行工具,用于创建虚拟机。它支持多种参数,可以灵活配置虚拟机的各种选项。 + +1. **创建基本虚拟机**: + + ```shell + sudo virt-install \ + --name myvm \ + --ram 2048 \ + --disk path=/var/lib/libvirt/images/myvm.qcow2,size=20 \ + --vcpus 2 \ + --os-type linux \ + --os-variant ubuntu20.04 \ + --network bridge=br0 \ + --graphics vnc \ + --cdrom /path/to/ubuntu-20.04.iso + ``` + + 以上命令创建了一个名为 `myvm` 的虚拟机,分配 2 GB 内存、20 GB 磁盘空间和 2 个虚拟 CPU,使用桥接网络,并通过 VNC 访问图形界面。 + +2. **其他常用选项**: + + 在使用 `virt-install` 创建和安装虚拟机时,以下是一些常用的选项及其功能,列在一个表格中以便参考: + + | 选项 | 功能 | + | ----------------- | ----------------------------------------- | + | `--name` | 虚拟机的名称 | + | `--memory` | 分配给虚拟机的内存大小(单位:MB) | + | `--vcpus` | 分配给虚拟机的虚拟 CPU 数量 | + | `--disk` | 定义虚拟机的磁盘配置 | + | `--cdrom` | 使用 CD-ROM 镜像文件作为安装源 | + | `--location` | 网络安装源的位置(URL 或本地路径) | + | `--os-type` | 指定操作系统类型(如 `linux`、`windows`) | + | `--os-variant` | 指定操作系统版本 | + | `--graphics` | 配置图形显示方式 | + | `--network` | 配置虚拟机的网络接口 | + | `--extra-args` | 向内核传递额外的启动参数 | + | `--boot` | 配置引导设备和引导顺序 | + | `--console` | 配置控制台类型 | + | `--import` | 从现有磁盘映像文件导入虚拟机 | + | `--autostart` | 安装后自动启动虚拟机 | + | `--cpu` | 配置 CPU 相关选项 | + | `--check` | 启用或禁用安装前的配置检查 | + | `--virt-type` | 指定虚拟化类型(如 `kvm`、`xen`) | + | `--initrd-inject` | 指定需要注入到 initrd 的文件 | + | `--metadata` | 定义虚拟机的元数据 | + | `--noautoconsole` | 安装后不自动连接到控制台 | + | `--wait` | 等待安装完成的时间(单位:分钟) | + +#### 使用 `virsh` 管理虚拟机 + +`virsh` 是一个强大的命令行工具,用于管理和控制虚拟机。以下是一些常用的命令及其功能,列在一个表格中以便参考: + +| 命令 | 功能 | +| ------------------------------------------------------ | -------------------------------- | +| `virsh list` | 列出当前运行的虚拟机 | +| `virsh list --all` | 列出所有虚拟机,包括停止的 | +| `virsh start ` | 启动指定的虚拟机 | +| `virsh shutdown ` | 关闭指定的虚拟机 | +| `virsh reboot ` | 重启指定的虚拟机 | +| `virsh destroy ` | 强制关闭指定的虚拟机 | +| `virsh suspend ` | 暂停指定的虚拟机 | +| `virsh resume ` | 恢复暂停的虚拟机 | +| `virsh create ` | 从 XML 配置文件创建并启动虚拟机 | +| `virsh define ` | 定义但不启动虚拟机 | +| `virsh undefine ` | 删除虚拟机定义,但不删除磁盘文件 | +| `virsh edit ` | 编辑虚拟机的 XML 配置 | +| `virsh dumpxml ` | 输出指定虚拟机的 XML 配置 | +| `virsh attach-disk ` | 附加磁盘到虚拟机 | +| `virsh detach-disk ` | 从虚拟机分离磁盘 | +| `virsh attach-interface ` | 附加网络接口到虚拟机 | +| `virsh detach-interface ` | 从虚拟机分离网络接口 | +| `virsh snapshot-create-as ` | 创建虚拟机快照 | +| `virsh snapshot-list ` | 列出虚拟机的所有快照 | +| `virsh snapshot-revert ` | 恢复到指定快照 | +| `virsh migrate ` | 迁移虚拟机到另一个主机 | +| `virsh console ` | 连接到虚拟机的控制台 | +| `virsh dominfo ` | 显示虚拟机的详细信息 | +| `virsh domstats ` | 显示虚拟机的统计信息 | + +### 使用图形化工具创建虚拟机 + +#### 安装和使用 `virt-manager` + +`virt-manager` 是一个基于图形界面的虚拟机管理工具,适合那些更喜欢图形界面操作的用户。 + +1. **安装 `virt-manager`**: + + - 在 Ubuntu 上: + + ```shell + sudo apt install virt-manager + ``` + + - 在 CentOS/RHEL 上: + + ```shell + sudo dnf install virt-manager + ``` + +2. **启动 `virt-manager`**: + + ```shell + virt-manager + ``` + +#### 通过 `virt-manager` 创建和配置虚拟机 + +1. **创建新虚拟机**: + - 打开 `virt-manager`,点击左上角的“创建新虚拟机”按钮。 + - 选择安装来源(例如,ISO 映像或 PXE 网络引导),然后点击“转到下一步”。 + - 设置虚拟机名称、内存和 CPU 配置,然后点击“转到下一步”。 + - 配置虚拟机硬盘(例如,创建新磁盘映像或导入现有磁盘),然后点击“转到下一步”。 + - 选择网络配置(例如,使用桥接网络),然后点击“转到下一步”。 + - 检查配置并点击“完成”以创建虚拟机。 +2. **配置虚拟机**: + - 右键点击已创建的虚拟机,选择“打开”以启动虚拟机。 + - 在虚拟机启动后,可以通过 VNC 或 SPICE 连接访问虚拟机的图形界面。 + - 可以通过“虚拟机”菜单下的“编辑”选项修改虚拟机配置,如增加内存、添加硬盘或修改网络设置。 + +通过上述方法,可以使用命令行工具和图形化工具创建和管理 KVM 虚拟机。无论是命令行操作还是图形界面,都提供了丰富的选项和灵活的配置,使得 KVM 虚拟机的管理变得简单高效。