1
0
wiki/Tech/operating-system/Virtualization/2.KVM虚拟化/2. KVM 安装配置.md
2024-07-17 20:01:45 +08:00

539 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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
<network>
<name>bridged</name>
<forward mode='bridge'/>
<bridge name='br0'/>
</network>
```
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 <vm_name>` | 启动指定的虚拟机 |
| `virsh shutdown <vm_name>` | 关闭指定的虚拟机 |
| `virsh reboot <vm_name>` | 重启指定的虚拟机 |
| `virsh destroy <vm_name>` | 强制关闭指定的虚拟机 |
| `virsh suspend <vm_name>` | 暂停指定的虚拟机 |
| `virsh resume <vm_name>` | 恢复暂停的虚拟机 |
| `virsh create <xml_file>` | 从 XML 配置文件创建并启动虚拟机 |
| `virsh define <xml_file>` | 定义但不启动虚拟机 |
| `virsh undefine <vm_name>` | 删除虚拟机定义,但不删除磁盘文件 |
| `virsh edit <vm_name>` | 编辑虚拟机的 XML 配置 |
| `virsh dumpxml <vm_name>` | 输出指定虚拟机的 XML 配置 |
| `virsh attach-disk <vm_name> <disk_path> <target_dev>` | 附加磁盘到虚拟机 |
| `virsh detach-disk <vm_name> <target_dev>` | 从虚拟机分离磁盘 |
| `virsh attach-interface <vm_name> <type> <source>` | 附加网络接口到虚拟机 |
| `virsh detach-interface <vm_name> <type> <mac>` | 从虚拟机分离网络接口 |
| `virsh snapshot-create-as <vm_name> <snapshot_name>` | 创建虚拟机快照 |
| `virsh snapshot-list <vm_name>` | 列出虚拟机的所有快照 |
| `virsh snapshot-revert <vm_name> <snapshot_name>` | 恢复到指定快照 |
| `virsh migrate <vm_name> <dest_uri>` | 迁移虚拟机到另一个主机 |
| `virsh console <vm_name>` | 连接到虚拟机的控制台 |
| `virsh dominfo <vm_name>` | 显示虚拟机的详细信息 |
| `virsh domstats <vm_name>` | 显示虚拟机的统计信息 |
### 使用图形化工具创建虚拟机
#### 安装和使用 `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 虚拟机的管理变得简单高效。