Administrator
Administrator
发布于 2024-10-31 / 150 阅读
1
0

基于Ubuntu22.04进行KVM虚拟化

KVM虚拟化环境配置与管理指南

本文旨在为您详细介绍如何在服务器上配置和管理KVM虚拟化环境。内容涵盖从检查服务器支持情况、安装必要工具、配置虚拟化环境、创建与管理虚拟机,到网络配置与安全措施等多个方面。通过本指南,您将能够高效地搭建和维护KVM虚拟化平台。


目录

  1. 检查服务器是否支持KVM虚拟化
  2. 安装虚拟化工具
  3. 配置Cloud-Init
  4. 配置Cloudbase-Init(Windows环境)
  5. 配置Ubuntu 22.04桥接网卡
  6. 下载虚拟机镜像
  7. 创建虚拟机
  8. 限制虚拟机读写速度与IOPS
  9. KVM虚拟机命令行日常维护
  10. 通过iptables实现外部网络映射 - 10.1 开启IP转发 - 10.2 查看虚拟机IP地址 - 10.3 设置iptables规则 - 10.4 清除防火墙规则(如需) - 10.5 删除指定规则 - 10.6 真实IP转发 - 10.7 查看所有NAT规则 - 10.8 IPv6流量转发到内网IPv4
  11. 总结

1. 检查服务器是否支持KVM虚拟化

在配置KVM虚拟化之前,首先需要确认您的服务器是否支持KVM虚拟化技术。可以通过以下命令检查CPU是否支持虚拟化扩展:

egrep -c '(vmx|svm)' /proc/cpuinfo
  • 输出结果解释
    • 大于0:表示服务器支持KVM虚拟化。
    • 等于0:表示服务器不支持KVM虚拟化,或虚拟化未启用。

若不支持虚拟化扩展,可以尝试启用嵌套虚拟化:

对于Intel处理器:
if [[ -f /sys/module/kvm_intel/parameters/nested ]]; then
    sudo modprobe -r kvm_intel
    sudo modprobe kvm_intel nested=1
    echo "Intel处理器已开启嵌套虚拟化"
fi
对于AMD处理器:
if [[ -f /sys/module/kvm_amd/parameters/nested ]]; then
    sudo modprobe -r kvm_amd
    sudo modprobe kvm_amd nested=1
    echo "AMD处理器已开启嵌套虚拟化"
fi

注意:启用嵌套虚拟化需要处理器和内核支持,部分旧型号处理器可能不支持。


2. 安装虚拟化工具

安装KVM及相关虚拟化工具,以便创建和管理虚拟机。执行以下命令更新软件包列表并安装必要的软件:

sudo apt-get update
sudo apt-get install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst cloud-image-utils genisoimage libosinfo-bin openvswitch-switch

如果安装过程中遇到问题,可以修改软件源:

编辑 /etc/apt/sources.list 文件:

sudo vim /etc/apt/sources.list

添加或修改以下内容(以Ubuntu 22.04为例):

deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse

然后重新更新并安装:

sudo apt-get update
sudo apt-get install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst cloud-image-utils genisoimage libosinfo-bin openvswitch-switch

3. 配置Cloud-Init

Cloud-Init是一个用于自动化虚拟机初始化的工具,通过配置元数据和用户数据,可以实现自动化的系统配置和用户设置。

3.1 meta-data 文件内容

meta-data 文件用于定义实例的基本元数据,例如主机名和实例ID。文件内容采用YAML格式:

# meta-data
instance-id: my-instance-id   # 唯一实例标识符
local-hostname: my-hostname   # 实例主机名
  • 字段解释
    • instance-id:实例的唯一标识符,Cloud-Init使用该ID确定是否为新实例。
    • local-hostname:设置实例的主机名。

3.2 user-data 文件配置示例

user-data 文件用于定义用户级的配置和启动脚本,采用Cloud-Config格式:

#cloud-config
chpasswd:
  list: |
    root:Ds2I8udYLFnSAyyV  # 设置root密码
  expire: False
ssh_pwauth: True

# 开机脚本部分
runcmd:
  - echo "Hello!" > /home/hello.txt
  - apt update
  • 字段解释
    • chpasswd:用于批量设置用户密码。
    • ssh_pwauth:启用通过密码进行SSH登录。
    • runcmd:在系统启动时执行的命令列表。

3.3 network-config 网络配置示例

network-config 文件用于配置网络设置,采用YAML格式:

# network-config
version: 2
ethernets:
  eth0:
    match:
      macaddress: 52:54:00:7f:4a:63  # 配置的MAC地址
    set-name: eth0
    addresses:
      - 103.38.82.96/24        # 公网IP地址
    gateway4: 103.38.82.1
    nameservers:
      addresses:
        - 114.114.114.114       # DNS服务器1
        - 8.8.8.8               # DNS服务器2
  • 字段解释
    • version:网络配置版本。
    • ethernets:定义以太网接口配置。
      • match:匹配条件,如MAC地址。
      • set-name:设置接口名称。
      • addresses:分配静态IP地址。
      • gateway4:默认网关。
      • nameservers:DNS服务器地址。

3.4 创建Cloud-Init ISO文件

使用genisoimagemkisofs命令创建Cloud-Init所需的ISO文件:

genisoimage -output cloud-init.iso -volid cidata -joliet -rock user-data meta-data network-config

生成的cloud-init.iso文件结构如下:

cloud-init.iso
├── meta-data          # 元数据文件
├── user-data          # 用户数据文件
└── network-config     # 网络配置文件(可选)

注意:确保所有配置文件位于同一目录下,并在创建ISO时包含所有必要文件。


4. 配置Cloudbase-Init(Windows环境)

Cloudbase-Init是Cloud-Init的Windows版本,用于自动化Windows虚拟机的初始化配置。

注意:本文主要介绍Linux环境,Windows部分可参考相关文档。

4.1 meta-data 文件内容

# meta-data
instance-id: my-instance-id    # 唯一实例标识符
local-hostname: my-hostname    # 虚拟机主机名

4.2 user-data 文件内容

使用Cloud-Config格式

#cloud-config

# 配置用户
users:
  - name: Administrator
    plain_text_passwd: "YourPassword123"    # 设置Administrator密码
    lock_passwd: false
    groups: Administrators
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    shell: /bin/bash

# 执行初始化命令
runcmd:
  - echo "Cloudbase-Init已配置实例" > C:\cloudbase-init.txt
  - net user Administrator YourPassword123 /Y

使用PowerShell格式

#ps1

# 设置Administrator用户的明文密码
net user Administrator YourPassword123 /Y

# 其他初始化命令
New-Item -Path "C:\cloudbase-init.txt" -ItemType File -Value "Cloudbase-Init已配置实例"

4.3 使用net user设置明文密码

#cloud-config
runcmd:
  - net user Administrator YourPassword123 /Y

4.4 创建Cloudbase-Init ISO文件

genisoimage -output cloudbase-init.iso -volid cidata -joliet -rock user-data meta-data

生成的cloudbase-init.iso文件结构如下:

cloudbase-init.iso
├── meta-data          # 元数据文件
├── user-data          # 用户数据文件
└── network-config     # 网络配置文件(可选)

5. 配置Ubuntu 22.04桥接网卡

为了使虚拟机能够访问外部网络,需配置桥接网卡。以下是基于Netplan的桥接配置示例。

5.1 通用Netplan模板

编辑Netplan配置文件,如 /etc/netplan/01-bridge-config.yaml

network:
  version: 2
  renderer: networkd            # 使用 systemd-networkd 管理网络

  ethernets:
    eno1:                       # 物理网卡名称(例如 eno1)
      dhcp4: no                 # 禁用DHCP
      match:
        macaddress: 52:54:00:7f:4a:63 # 物理网卡的MAC地址
      set-name: eno1            # 设置网卡名称

  bridges:
    br0:
      interfaces: [eno1]         # 将物理网卡添加到桥接接口
      dhcp4: no                  # 为桥接接口禁用DHCP
      addresses:
        - 103.38.82.96/24        # 静态IP地址
      gateway4: 103.38.82.1       # 默认网关
      nameservers:
        addresses:
          - 114.114.114.114       # DNS服务器1
          - 8.8.8.8               # DNS服务器2
      parameters:
        stp: false                 # 禁用生成树协议(STP)
        forward-delay: 0           # 设置转发延迟

应用Netplan配置:

sudo netplan apply

5.2 将虚拟机添加到桥接接口

使用virsh命令将虚拟机连接到桥接网络:

sudo virsh attach-interface --domain <vm-name> --type bridge --source br0 --model virtio --config --live

5.3 虚拟机内部临时绑定公网IP

在虚拟机内部执行以下命令配置网络:

# 查看网络接口
ip addr

# 启用网卡(假设网卡名为 eth0)
sudo ip link set eth0 up

# 添加IP地址
sudo ip addr add 103.38.82.96/24 dev eth0

# 查看当前路由表
ip route show

# 删除当前默认网关(如有必要)
sudo ip route del default

# 添加新的默认网关
sudo ip route add default via 103.38.82.1 dev eth0

# 验证新的路由
ip route show

注意:为了实现永久性配置,请将上述设置添加到网卡的Netplan配置文件中。


6. 下载虚拟机镜像

以下是常用操作系统的预制镜像下载链接:

操作系统 镜像文件 下载链接
AlmaLinux 8.8 AlmaLinux-8.8-x64.qcow2 下载链接
AlmaLinux 9.2 AlmaLinux-9.2-x64.qcow2 下载链接
CentOS 7.8.2003 CentOS-7.8.2003-x64.qcow2 下载链接
CentOS 8.2.2004 CentOS-8.2.2004-x64.qcow2 下载链接
Debian 10.3.3 Debian-10.3.3-x64.qcow2 下载链接
Fedora 31 Fedora-31-x64.qcow2 下载链接
OpenEuler 22.03-LTS-SP1 OpenEuler-22.03-LTS-SP1-x64.qcow2 下载链接
Rocky Linux 8.8 Rocky-linux-8.8-x64.qcow2 下载链接
Ubuntu 22.04 Ubuntu-22.04-x64.qcow2 下载链接
Windows 10 Windows10-cn.qcow2 下载链接

注意:确保下载镜像文件的完整性和来源的可靠性,避免使用未知来源的镜像文件以防安全风险。


7. 创建虚拟机

使用virt-install命令行工具创建KVM虚拟机。以下是virt-install常用参数及其详解,并提供创建虚拟机的示例。

7.1 virt-install参数详解

参数 作用
--name <vm-name> 指定虚拟机的名称。
--memory <size-in-MB> 为虚拟机分配内存,例如--memory 12288分配12GB内存。
--vcpus sockets=<sockets>,cores=<cores>,threads=<threads> 设置虚拟机的CPU配置,如--vcpus sockets=1,cores=12,threads=1
--disk path=<path>,format=<format>,bus=<bus> 指定虚拟机的磁盘,示例:--disk path=/home/kvm/kvm001/Ubuntu-22.04-x64.qcow2,format=qcow2,bus=virtio
--os-variant <variant> 指定操作系统类型,帮助优化配置,如--os-variant ubuntu22.04
--network network=<network>,model=<model> 配置虚拟机的网络,示例:--network network=default,model=virtio
--graphics <type>,listen=<address> 配置图形输出,如--graphics vnc,listen=0.0.0.0
--console pty,target_type=serial 设置控制台访问方式,适用于无图形界面的安装。
--boot <device> 设置启动设备,如--boot hd表示从硬盘启动。
--cpu host-passthrough 配置CPU模型,将宿主机CPU透传给虚拟机,提升性能。
--noautoconsole 禁止自动连接到虚拟机控制台。

7.2 创建虚拟机示例

以下示例展示如何使用virt-install创建一个名为kvm001的Ubuntu 22.04虚拟机:

virt-install \
  --name kvm001 \
  --memory 12288 \
  --vcpus sockets=1,cores=12,threads=1 \
  --disk path=/home/kvm/kvm001/Ubuntu-22.04-x64.qcow2,format=qcow2,bus=virtio \
  --disk path=/home/kvm/kvm001/cloud-init.iso,device=cdrom \
  --os-variant ubuntu22.04 \
  --network network=default,model=virtio \
  --graphics vnc,listen=0.0.0.0 \
  --console pty,target_type=serial \
  --boot hd \
  --cpu host-passthrough \
  --noautoconsole

说明

  • 磁盘配置

    • /home/kvm/kvm001/Ubuntu-22.04-x64.qcow2:虚拟机主磁盘。
    • /home/kvm/kvm001/cloud-init.iso:Cloud-Init配置ISO,用于自动化初始化。
  • 网络配置

    • 使用默认网络default,并采用virtio模型提高网络性能。
  • 图形输出

    • 通过VNC提供图形化界面,监听所有IP地址(生产环境建议限制访问)。

7.3 从XML配置文件启动虚拟机

如果您有预先配置好的XML文件,可以使用以下命令定义并启动虚拟机:

virsh define <xml-config-file>.xml
virsh start <vm-name>

示例

virsh define /home/kvm/kvm001/kvm001.xml
virsh start kvm001

8. 限制虚拟机读写速度与IOPS

为了优化资源分配和提高系统性能,可以对虚拟机的磁盘I/O进行限制。

8.1 限制虚拟机读写速度

使用virsh blkdeviotune命令限制虚拟机磁盘的读写速度:

virsh blkdeviotune vm1 vda --read-bytes-sec 10485760 --write-bytes-sec 5242880 --live
  • 参数解释
    • --read-bytes-sec 10485760:限制读取速度为10 MB/s。
    • --write-bytes-sec 5242880:限制写入速度为5 MB/s。
    • --live:实时应用配置,不需要重启虚拟机。

8.2 限制虚拟机IOPS

限制每秒的I/O操作次数(IOPS):

virsh blkdeviotune vm1 vda --read-iops-sec 100 --write-iops-sec 50 --live
  • 参数解释
    • --read-iops-sec 100:限制每秒读取IOPS为100。
    • --write-iops-sec 50:限制每秒写入IOPS为50。

8.3 设置突发读写速度和IOPS

配置突发读写速度和IOPS限制:

virsh blkdeviotune vm1 vda \
    --read-bytes-sec 10485760 \
    --write-bytes-sec 5242880 \
    --read-bytes-sec-max 20971520 \
    --write-bytes-sec-max 10485760 \
    --read-iops-sec 100 \
    --write-iops-sec 50 \
    --read-iops-sec-max 200 \
    --write-iops-sec-max 100 \
    --read-iops-sec-burst 500 \
    --write-iops-sec-burst 250 \
    --live
  • 参数解释
    • --read-bytes-sec-max 20971520:设置突发读取速度上限为20 MB/s。
    • --write-bytes-sec-max 10485760:设置突发写入速度上限为10 MB/s。
    • --read-iops-sec-max 200:突发的最大读取IOPS为200。
    • --write-iops-sec-max 100:突发的最大写入IOPS为100。
    • --read-iops-sec-burst 500:设置读取IOPS的突发持续时间。
    • --write-iops-sec-burst 250:设置写入IOPS的突发持续时间。

8.4 查看当前限制

查看当前配置的I/O限制:

virsh blkdeviotune vm1 vda

确保磁盘设备名称(如vda)正确,可以通过以下命令查看虚拟机的磁盘设备列表:

virsh domblklist vm1

9. KVM虚拟机命令行日常维护

以下是KVM虚拟机日常管理的常用命令,使用virsh工具进行操作。

9.1 基本管理操作

操作 命令 说明
列出所有虚拟机 virsh list --all 显示所有虚拟机及其状态
启动虚拟机 virsh start <vm_name> 启动指定虚拟机
优雅地关闭虚拟机 virsh shutdown <vm_name> 安全关闭虚拟机
断电关机(强制关闭) virsh destroy <vm_name> 强制关闭虚拟机
重启虚拟机 virsh reboot <vm_name> 重启指定虚拟机
强制重启(硬重启) virsh reset <vm_name> 强制重启虚拟机
暂停虚拟机 virsh suspend <vm_name> 暂停指定虚拟机
恢复虚拟机 virsh resume <vm_name> 恢复暂停的虚拟机
删除虚拟机 virsh undefine <vm_name> 删除虚拟机定义(不删除磁盘文件)
从XML文件启动虚拟机 virsh define <xml_file>.xml 使用XML配置文件定义并启动虚拟机

9.2 配置和状态查看

操作 命令 说明
编辑虚拟机配置文件 virsh edit <vm_name> 通过编辑XML文件配置虚拟机
查看虚拟机磁盘信息 virsh domblklist <vm_name> 列出虚拟机的磁盘设备
查看虚拟机网卡IP地址 virsh domifaddr <vm_name> 显示虚拟机网络接口的IP地址
查看虚拟机的VNC端口 virsh vncdisplay <vm_name> 获取虚拟机VNC连接的端口
从宿主机登录虚拟机控制台 virsh console <vm_name> 连接到虚拟机的控制台
查看虚拟机ID virsh domid <vm_name> 获取虚拟机的域ID
查看虚拟机UUID virsh domuuid <vm_name> 获取虚拟机的UUID

9.3 网络管理

操作 命令 说明
列出所有网络 virsh net-list 显示所有虚拟网络及其状态
启动指定网络 virsh net-start <network_name> 启动指定的虚拟网络
停止指定网络 virsh net-destroy <network_name> 停止指定的虚拟网络
编辑虚拟网络配置 virsh net-edit <network_name> 通过编辑XML文件配置虚拟网络
查看虚拟机接口列表 virsh domiflist <vm_name> 列出虚拟机的网络接口
添加网络接口 virsh attach-interface <vm_name> <network/bridge> 将虚拟机连接到指定的网络或桥接接口
移除网络接口 virsh detach-interface <vm_name> <interface> 从虚拟机移除指定的网络接口

9.4 磁盘管理

操作 命令 说明
查看虚拟机的磁盘信息 virsh domblklist <vm_name> 列出虚拟机的磁盘设备
挂载磁盘到虚拟机 virsh attach-disk <vm_name> <disk_path> <target_dev> 将磁盘文件挂载到虚拟机
从虚拟机卸载磁盘 virsh detach-disk <vm_name> <target_dev> 从虚拟机卸载指定磁盘
调整磁盘大小 virsh blockresize <vm_name> <target_dev> <size> 调整虚拟机磁盘的大小
列出存储池中的磁盘卷 virsh vol-list <pool_name> 列出指定存储池中的所有磁盘卷

9.5 性能和资源管理

操作 命令 说明
动态调整虚拟机内存 virsh setmem <vm_name> <memory> 动态调整虚拟机内存大小(单位MB)
动态调整虚拟机CPU数量 virsh setvcpus <vm_name> <vcpus> 动态调整虚拟机的CPU数量
查看虚拟机内存使用情况 virsh dommemstat <vm_name> 显示虚拟机的内存统计信息
限制磁盘I/O速率 virsh blkdeviotune <vm_name> <disk> 设置虚拟机磁盘的I/O限制
管理磁盘设备的I/O限制 virsh blkdeviotune <vm_name> <disk> 管理虚拟机磁盘设备的I/O限制
设置带宽限制 virsh domiftune <vm_name> <interface> --inbound <rate> --outbound <rate> 设置虚拟机网络接口的带宽限制
保存虚拟机状态到文件 virsh save <vm_name> <path> 将虚拟机当前状态保存到指定文件
从文件恢复虚拟机状态 virsh restore <path> 从保存的文件恢复虚拟机状态

9.6 快照和备份

操作 命令 说明
创建快照 virsh snapshot-create-as <vm_name> <snapshot_name> 创建虚拟机快照
列出所有快照 virsh snapshot-list <vm_name> 列出虚拟机的所有快照
恢复到指定快照 virsh snapshot-revert <vm_name> <snapshot_name> 恢复虚拟机到指定快照
删除快照 virsh snapshot-delete <vm_name> <snapshot_name> 删除指定的虚拟机快照

9.7 虚拟机性能监控

操作 命令 说明
查看虚拟机统计信息(CPU、内存、磁盘、网络等) virsh domstats <vm_name> 显示虚拟机的综合统计信息
查看虚拟机CPU使用情况 virsh cpu-stats <vm_name> 显示虚拟机的CPU统计信息
查看宿主机上的网络接口使用情况 virsh iface-metrics <interface> 显示宿主机网络接口的统计信息
获取或同步虚拟机时间 virsh domtime <vm_name> 获取或同步虚拟机的时间

9.8 设备管理和安全

操作 命令 说明
通过XML添加设备 virsh attach-device <vm_name> <device.xml> 通过XML配置文件向虚拟机添加设备
通过XML移除设备 virsh detach-device <vm_name> <device.xml> 通过XML配置文件从虚拟机移除设备

10. 通过iptables实现外部网络映射

在没有虚拟交换机和独立IP的KVM环境下,可以通过iptables实现外部网络流量的映射,将宿主机的端口转发到虚拟机。

10.1 开启IP转发

首先,启用宿主机的IP转发功能:

sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sudo sysctl -p

10.2 查看虚拟机的IP地址

使用以下命令查看虚拟机的内部IP地址:

virsh domifaddr <vm_name>

10.3 设置iptables规则

配置iptables以实现端口转发:

# 将宿主机的30001端口映射到虚拟机192.168.122.143的22端口
sudo iptables -t nat -A PREROUTING -p tcp --dport 30001 -j DNAT --to-destination 192.168.122.143:22
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

说明

  • PREROUTING:将指定端口的流量转发到虚拟机。
  • POSTROUTING:使用MASQUERADE实现源地址伪装,适用于动态外部IP。

10.4 清除防火墙规则(如需)

如端口转发不通畅,可清除当前NAT表中的所有规则:

sudo iptables -t nat -F

注意:此操作仅清除NAT表中的规则,不影响其他表(如filter或mangle)。

10.5 删除指定规则

根据规则内容删除特定的iptables规则:

# 删除PREROUTING规则
sudo iptables -t nat -D PREROUTING -p tcp --dport 30001 -j DNAT --to-destination 192.168.122.143:22

# 删除POSTROUTING规则
sudo iptables -t nat -D POSTROUTING -j MASQUERADE

10.6 真实IP转发

当宿主机拥有真实IP时,可针对特定外部端口进行精确转发:

# 将外部真实IP的30002端口流量转发到内网IPv4的192.168.122.155:22
sudo iptables -t nat -A PREROUTING -d 110.40.59.251 -p tcp --dport 30002 -j DNAT --to-destination 192.168.122.155:22
sudo iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o eth0 -j MASQUERADE

10.7 查看所有NAT规则

使用以下命令查看iptables的所有NAT规则:

sudo iptables -t nat -L -n -v

10.8 IPv6流量转发到内网IPv4

配置IPv6流量转发到内网IPv4:

# 将外部IPv6地址的30002端口流量转发到内网IPv4的192.168.122.155:22
sudo ip6tables -t nat -A PREROUTING -d 2001:db8::1 -p tcp --dport 30002 -j DNAT --to-destination 192.168.122.155:22

# 使用MASQUERADE实现源地址伪装
sudo iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o eth0 -j MASQUERADE

验证规则

# 查看IPv6 NAT规则
sudo ip6tables -t nat -L -n -v

# 查看IPv4 NAT规则
sudo iptables -t nat -L -n -v

说明:此配置允许通过IPv6地址的特定端口访问内网IPv4虚拟机,适用于双栈网络环境。


11. 总结

本文全面介绍了在服务器上配置和管理KVM虚拟化环境的各个步骤与细节,包括:

  • 支持性检查:确认服务器CPU支持KVM虚拟化,并启用嵌套虚拟化(如需)。
  • 工具安装:安装必要的虚拟化工具和依赖。
  • 自动化配置:使用Cloud-Init和Cloudbase-Init实现虚拟机的自动化初始化。
  • 网络配置:配置桥接网卡,使虚拟机能够访问外部网络。
  • 镜像管理:下载并管理各类操作系统的虚拟机镜像。
  • 虚拟机创建:通过virt-install命令创建配置灵活的虚拟机。
  • 性能优化:限制虚拟机的磁盘I/O速度和IOPS,确保资源合理分配。
  • 日常维护:使用virsh工具进行虚拟机的日常管理与监控。
  • 网络映射:通过iptables实现宿主机与虚拟机之间的网络流量转发。

通过掌握以上内容,您将能够高效地搭建和维护一个稳定、安全的KVM虚拟化环境,满足不同业务需求。

建议

  • 定期备份:为虚拟机和配置文件定期进行备份,防止数据丢失。
  • 安全性配置:限制外部网络访问,确保虚拟机与宿主机的安全隔离。
  • 性能监控:持续监控虚拟机和宿主机的性能指标,及时调整资源分配。
  • 更新维护:保持虚拟化工具和操作系统的更新,确保系统安全和功能完善。

如果您在配置过程中遇到任何问题,建议参考相关文档或社区资源,或向专业人士寻求帮助。


附录:常用命令汇总

# 检查虚拟化支持
egrep -c '(vmx|svm)' /proc/cpuinfo

# 安装虚拟化工具
sudo apt-get update
sudo apt-get install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst cloud-image-utils genisoimage libosinfo-bin openvswitch-switch

# 启用并检查libvirtd服务
sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd
virsh list --all

# 创建Cloud-Init ISO
genisoimage -output cloud-init.iso -volid cidata -joliet -rock user-data meta-data network-config

# 创建虚拟机
virt-install \
  --name kvm001 \
  --memory 12288 \
  --vcpus sockets=1,cores=12,threads=1 \
  --disk path=/home/kvm/kvm001/Ubuntu-22.04-x64.qcow2,format=qcow2,bus=virtio \
  --disk path=/home/kvm/kvm001/cloud-init.iso,device=cdrom \
  --os-variant ubuntu22.04 \
  --network network=default,model=virtio \
  --graphics vnc,listen=0.0.0.0 \
  --console pty,target_type=serial \
  --boot hd \
  --cpu host-passthrough \
  --noautoconsole

# 限制虚拟机读写速度
virsh blkdeviotune vm1 vda --read-bytes-sec 10485760 --write-bytes-sec 5242880 --live

# 查看虚拟机磁盘I/O限制
virsh blkdeviotune vm1 vda

# 日常维护命令示例
virsh list --all
virsh start <vm_name>
virsh shutdown <vm_name>
virsh destroy <vm_name>
virsh reboot <vm_name>
virsh reset <vm_name>
virsh suspend <vm_name>
virsh resume <vm_name>
virsh undefine <vm_name>
virsh define <xml_file>.xml
virsh edit <vm_name>
virsh domblklist <vm_name>
virsh domifaddr <vm_name>
virsh vncdisplay <vm_name>
virsh console <vm_name>
virsh domid <vm_name>
virsh domuuid <vm_name>

# 网络管理命令示例
virsh net-list
virsh net-start <network_name>
virsh net-destroy <network_name>
virsh net-edit <network_name>
virsh domiflist <vm_name>
virsh attach-interface <vm_name> <network/bridge>
virsh detach-interface <vm_name> <interface>

# 磁盘管理命令示例
virsh attach-disk <vm_name> <disk_path> <target_dev>
virsh detach-disk <vm_name> <target_dev>
virsh blockresize <vm_name> <target_dev> <size>
virsh vol-list <pool_name>

# 性能管理命令示例
virsh setmem <vm_name> <memory>
virsh setvcpus <vm_name> <vcpus>
virsh dommemstat <vm_name>
virsh blkdeviotune <vm_name> <disk>
virsh domiftune <vm_name> <interface> --inbound <rate> --outbound <rate>
virsh save <vm_name> <path>
virsh restore <path>

# 快照管理命令示例
virsh snapshot-create-as <vm_name> <snapshot_name>
virsh snapshot-list <vm_name>
virsh snapshot-revert <vm_name> <snapshot_name>
virsh snapshot-delete <vm_name> <snapshot_name>

# 性能监控命令示例
virsh domstats <vm_name>
virsh cpu-stats <vm_name>
virsh iface-metrics <interface>
virsh domtime <vm_name>

# 设备管理命令示例
virsh attach-device <vm_name> <device.xml>
virsh detach-device <vm_name> <device.xml>

# iptables端口转发示例
sudo iptables -t nat -A PREROUTING -p tcp --dport 30001 -j DNAT --to-destination 192.168.122.143:22
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

# 清除NAT规则
sudo iptables -t nat -F

# 删除特定iptables规则
sudo iptables -t nat -D PREROUTING -p tcp --dport 30001 -j DNAT --to-destination 192.168.122.143:22
sudo iptables -t nat -D POSTROUTING -j MASQUERADE

# IPv6流量转发示例
sudo ip6tables -t nat -A PREROUTING -d 2001:db8::1 -p tcp --dport 30002 -j DNAT --to-destination 192.168.122.155:22
sudo iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o eth0 -j MASQUERADE

通过以上步骤,您已成功配置并管理了一个功能完善的KVM虚拟化环境。持续关注系统性能和安全性,定期更新和备份,将有助于保持虚拟化平台的稳定与高效运行。

如果您在配置过程中遇到任何问题,建议参考相关官方文档或社区资源,或向专业人士寻求帮助。


评论