KVM 虚拟化物理机

一、KVM 环境准备


对下面的三台物理机各虚拟化一台16核64G的虚拟机

物理机1:192.168.10.10 ==> 虚拟机1:192.168.10.100

物理机2:192.168.10.11 ==> 虚拟机2:192.168.10.101

物理机3:192.168.10.12 ==> 虚拟机3:192.168.10.102


  1. 检查 CPU 是否支持虚拟化 执行以下命令,如果有输出(如 vmxsvm),说明支持虚拟化:
bash 复制代码
egrep -c '(vmx|svm)' /proc/cpuinfo
  1. 安装 KVM 及相关依赖 使用 yum 安装 KVM 核心组件、管理工具 virt-install 和网桥工具:
shell 复制代码
# 配置清华大学yum源
[root@worker1 yum.repos.d]# vim /etc/yum.repo.d/openeuler.repo 
[openeuler]
name=openEuler 22.03 LTS
baseurl=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-22.03-LTS/OS/x86_64/
enabled=1
gpgcheck=0
sslverify=0
bash 复制代码
# 安装KVM虚拟化核心组件
# qemu: KVM虚拟化核心软件
# libvirt: 虚拟机管理守护进程和工具
# virt-install: 命令行创建虚拟机的工具
# bridge-utils: 网络桥接管理工具
yum install -y qemu libvirt virt-install bridge-utils

# 启动libvirtd服务
systemctl start libvirtd

# 设置libvirtd开机自启
systemctl enable libvirtd

# 将当前用户加入libvirt组,避免每次使用sudo
usermod -a -G libvirt $(whoami)
newgrp libvirt

# 验证libvirtd服务状态
systemctl status libvirtd

二、配置桥接网络(每台物理机)

查看网络接口信息

bash 复制代码
ip addr show
# 记录使用的网络接口名(如ens33、eth0、eno1等)

配置桥接网络

使用 NetworkManager 配置桥接网络

第一步:检查当前网络连接状态

bash 复制代码
# 查看当前活动的连接
nmcli connection show --active

# 查看所有连接
nmcli connection show

第二步:创建桥接连接

先创建桥接连接

  • 物理机1

    shell 复制代码
    sudo nmcli connection add type bridge con-name br0 ifname br0 \
    ipv4.method manual \
    ipv4.address 192.168.10.10/24 \
    ipv4.gateway 192.168.10.254 \
    ipv4.dns 8.8.8.8 \
    bridge.stp no \
    connection.autoconnect yes
  • 物理机2

    shell 复制代码
    sudo nmcli connection add type bridge con-name br0 ifname br0 \
    ipv4.method manual \
    ipv4.address 192.168.10.11/24 \
    ipv4.gateway 192.168.10.254 \
    ipv4.dns 8.8.8.8 \
    bridge.stp no \
    connection.autoconnect yes
  • 物理机3

    shell 复制代码
    sudo nmcli connection add type bridge con-name br0 ifname br0 \
    ipv4.method manual \
    ipv4.address 192.168.10.12/24 \
    ipv4.gateway 192.168.10.254 \
    ipv4.dns 8.8.8.8 \
    bridge.stp no \
    connection.autoconnect yes

修改 eno1 配置,设置为桥接从属

shell 复制代码
sudo nmcli connection modify eno1 connection.slave-type bridge connection.master br0

先激活桥接

shell 复制代码
sudo nmcli connection up br0

激活 eno1(作为桥接端口)

shell 复制代码
sudo nmcli connection up eno1

验证桥接状态

shell 复制代码
# 检查桥接状态
nmcli connection show --active
ip addr show br0
ip addr show eno1

三、准备 openEuler 22.03 LTS 镜像

将镜像放置到合适位置

shell 复制代码
sudo mkdir -p /data/image
openEuler 22.03 LTS

四、创建虚拟机磁盘

首先需要确保挂载虚拟机磁盘的 /data/image 或者是 /home/data/image 路径有250G 的空闲磁盘

shell 复制代码
# 使用下面的命令进行查看(在物理机上执行)
[root@worker1 ~]# df -hT /data/image
Filesystem                         Type  Size  Used Avail Use% Mounted on
/dev/mapper/root xfs   557G  116G  442G  21% /

[root@worker3 ~]# df -hT /home/data/image
Filesystem                         Type  Size  Used Avail Use% Mounted on
/dev/mapper/home xfs   484G   72G  413G  15% /home

在三台物理机上分别执行:

物理机1:

bash 复制代码
qemu-img create -f qcow2 /data/image/test-worker1.qcow2 250G
chmod 755 /data/image/
chown root:root /data/image/
chmod 644 /data/image/openEuler 22.03 LTS

物理机2:

bash 复制代码
qemu-img create -f qcow2 /data/image/test-worker2.qcow2 250G
chmod 755 /data/image/
chown root:root /data/image/
chmod 644 /data/image/openEuler 22.03 LTS

物理机3:

bash 复制代码
qemu-img create -f qcow2 /home/data/image/test-worker3.qcow2 250G
chmod 755 /home/data/image/
chown root:root /home/data/image/
chmod 644 /home/data/image/openEuler 22.03 LTS

五、创建虚拟机


参数详解:

  • --name test-worker1:指定虚拟机名称为 test-worker1

  • --vcpus 16:分配16个虚拟 CPU 核心给虚拟机

  • --memory 65536:分配 64G 内存给虚拟机

  • --disk path=/data/image/test-worker1.qcow2,size=200,format=qcow2

    • path:磁盘镜像文件路径

    • size:磁盘容量

    • format:磁盘格式

  • --network bridge=br0:将虚拟机连接到物理机的桥接网络 br0

  • --graphics vnc,listen=0.0.0.0:表示允许所有的 IP 地址连接至 VNC 服务

  • --cdrom /data/image/openEuler 22.03 LTS:挂载光盘镜像作为虚拟光驱,用于安装操作系统

  • --video cirrus 指定虚拟显卡类型为 Cirrus Logic GD5446,兼容传统图形界面

  • --noautoconsole:创建虚拟机后不自动连接至控制台,需要通过 virsh 或者 VNC 客户端访问


物理机1(创建vm1):

bash 复制代码
virt-install \
  --name test-worker1 \
  --vcpus 16 \
  --memory 65536 \
  --disk path=/data/image/test-worker1.qcow2,size=250,format=qcow2 \
  --network bridge=br0 \
  --graphics vnc,listen=0.0.0.0 \
  --cdrom /data/image/openEuler 22.03 LTS \
  --video cirrus \
  --noautoconsole

物理机2(创建vm2):

bash 复制代码
virt-install \
  --name test-worker2 \
  --vcpus 16 \
  --memory 65536 \
  --disk path=/data/image/test-worker2.qcow2,size=250,format=qcow2 \
  --network bridge=br0 \
  --graphics vnc,listen=0.0.0.0 \
  --cdrom /data/image/openEuler 22.03 LTS \
  --video cirrus \
  --noautoconsole

物理机3(创建vm3):

bash 复制代码
virt-install \
  --name test-worker3 \
  --vcpus 16 \
  --memory 65536 \
  --disk path=/data/image/test-worker3.qcow2,size=250,format=qcow2 \
  --network bridge=br0 \
  --graphics vnc,listen=0.0.0.0 \
  --cdrom /data/image/openEuler 22.03 LTS \
  --video cirrus \
  --noautoconsole

六、虚拟机操作系统安装

查看VNC连接信息

通过 VNC 登录 IP:5900

在操作系统的网络配置部分

shell 复制代码
# 下面以 test-worker3 举例
# IP 地址应该与宿主机同网段(桥接模式)
192.168.10.102
# 子网掩码为 24
255.255.255.0
# 网关设置为和物理机相同的网关
192.168.10.254
# DNS设置为和物理机相同的 dns
8.8.8.8

七、配置虚拟机静态IP

查看网络接口名称

shell 复制代码
ip addr

修改网络配置文件

编辑对应网卡的配置文件,例如 ens3:(以虚拟机3举例)

bash 复制代码
# 首先确保连接是活跃且持久的
nmcli con show --active

# 修改连接配置
nmcli con mod "ens3" ipv4.addresses 192.168.10.102/24
nmcli con mod "ens3" ipv4.gateway 192.168.10.254
nmcli con mod "ens3" ipv4.dns 8.8.8.8
nmcli con mod "ens3" ipv4.method manual

# 关键步骤:将连接设置为开机自动启动
nmcli con mod "ens3" connection.autoconnect yes

# 重启网络连接使配置生效
nmcli con down "ens3"
nmcli con up "ens3"

关闭防火墙

shell 复制代码
systemctl disable firewalld
systemctl stop firewalld

八、修改 SSH 配置允许密码登录

在虚拟机内部执行:

shell 复制代码
# 修改配置允许密码认证和 root 登录
vim /etc/ssh/sshd_config
PasswordAuthentication yes
PermitRootLogin yes
shell 复制代码
# 启动 SSH 服务
systemctl start sshd
systemctl enable sshd

配置主机名解析

shell 复制代码
vim /etc/hosts
192.168.10.100 master1
192.168.10.101 master2
192.168.10.102 master3

九、网络互通验证

查看虚拟机IP地址

shell 复制代码
# 在虚拟机内执行
ip addr show

# 或通过virsh查看
sudo virsh net-dhcp-leases default

测试网络互通

bash 复制代码
# 在 test-worker1 上测试
ping 192.168.10.101
ping 192.168.10.102

# 在 test-worker2 上测试  
ping 192.168.10.100
ping 192.168.10.102

# 在 test-worker3 上测试
ping 192.168.10.100
ping 192.168.10.101

十、常用管理命令

查看虚拟机状态

shell 复制代码
virsh list --all

启动/关闭/重启虚拟机

shell 复制代码
virsh start test-worker1
virsh shutdown test-worker1
virsh reboot test-worker1

查看虚拟机信息

bash 复制代码
virsh dominfo test-worker1

进入虚拟机控制台

bash 复制代码
svirsh console test-worker1

常用管理命令 (virsh) 安装完成后,你可以使用 virsh 命令管理虚拟机:

功能 命令
查看虚拟机列表 virsh list --all
连接/进入虚拟机控制台 virsh console test-worker1
退出控制台 Ctrl + ]
启动虚拟机 virsh start test-worker1
关闭虚拟机 virsh shutdown test-worker1
强制断电 virsh destroy test-worker1
设置开机自启 virsh autostart test-worker1
删除虚拟机 virsh undefine test-worker1
重启虚拟机 virsh reboot test-worker1

更换虚拟机磁盘存放位置

首先停止相关服务

shell 复制代码
# 停止 libvirtd 服务
systemctl stop libvirtd

# 关闭虚拟机
virsh shutdown test-worker1

# 确认虚拟机关闭状态
virsh list --all

创建目标目录

shell 复制代码
# 在 /home 下创建 data 目录
mkdir -p /home/data/image

# 设置正确的权限
chown -R root:root /home/data/
chmod 755 /home/data/


chmod 755 /home/data/image/
chown root:root /home/data/image/
chmod 644 /home/data/image/openEuler 22.03 LTS

移动数据文件

shell 复制代码
# 移动镜像文件到新位置
mv /data/image/* /home/data/image/

# 验证文件完整性
ls -lh /home/data/image/

更新虚拟机配置

shell 复制代码
# 编辑虚拟机配置
virsh edit test-worker1

# 修改磁盘路径:
# 将 <source file='/data/image/test-worker1.qcow2'/>
# 改为 <source file='/home/data/image/test-worker1.qcow2'/>

重启验证

shell 复制代码
# 启动 libvirtd 服务
systemctl start libvirtd

# 启动虚拟机
virsh start test-worker1

# 检查虚拟机状态
virsh list --all

# 检查磁盘空间
df -h

后续资源配置修改方案

修改 CPU 数量

  • 动态修改(需要虚拟机支持热插拔)

    shell 复制代码
    virsh setvcpus test-worker1 20 --live
  • 永久修改(需要关机)

    shell 复制代码
    # 修改XML中的<vcpu>标签后重启生效
    virsh edit test-worker1
    <vcpu placement='static'>20</vcpu>

修改内存大小

  • 动态修改(需要虚拟机支持 Balloon 驱动)

    shell 复制代码
    virsh setmem test-worker1 81920 --live
  • 永久修改(需要关机)

    shell 复制代码
    # 修改<memory>和<currentMemory>标签后重启
    virsh edit test-worker1
    # <memory> 最大内存
    <memory unit='KiB'>67108864</memory>
    # <currentMemory> 虚拟机运行可分配内存
    <currentMemory unit='KiB'>67108864</currentMemory>

修改磁盘容量

  • 扩容磁盘文件(需要关机)

    shell 复制代码
    # 增加100GB空间
    qemu-img resize /data/image/test-worker1.qcow2 +100G
  • 虚拟机内分区调整

    扩容后需在虚拟机内部使用 fdisk/partedresize2fs(针对ext4)等工具扩展分区和文件系统。

KVM 虚拟机可视化平台管理

WebVirtMgr

  • 特点:专为 KVM 设计的 Web 管理工具,非常轻量(基于 Python+Django)
  • 部署方式:只需在一台服务器上安装,即可添加和管理其他 KVM 主机
  • 功能
    • 虚拟机创建、启动、关闭、暂停
    • VNC/SPICE 控制台访问
    • 硬件配置(CPU、内存、磁盘等)
    • 快照管理
  • 资源占用:约 100-200MB 内存
  • 安装简易度:中等(需要配置 Nginx + Supervisor)

Cockpit + Machines 插件

  • 特点:Red Hat 官方工具,系统集成度高
  • 部署方式:每台 KVM 主机安装 Cockpit,通过一台主界面管理其他主机
  • 功能
    • 基础虚拟机操作
    • 实时性能监控
    • 存储和网络管理
    • 多主机切换查看
  • 资源占用:约 50-100MB 内存
  • 安装简易度:简单(yum/dnf 直接安装)
bash 复制代码
# CentOS/RHEL 安装
yum install cockpit cockpit-machines -y
systemctl enable --now cockpit.socket
# 访问 https://服务器IP:9090

Kimchi(基于 Cockpit)

  • 特点:IBM 开发的 KVM 管理插件,比 WebVirtMgr 更简单
  • 部署:作为 Cockpit 插件安装
  • 功能:基础的虚拟机生命周期管理
  • 资源占用:极低(作为插件运行)
相关推荐
xcbeyond2 小时前
Linux 磁盘挂载
linux·运维·服务器
Dontla2 小时前
santifer/career-ops介绍(使用Claude Code自动化搜索招聘岗位并分析)(Playwright、Chromium)
运维·自动化
倔强的胖蚂蚁3 小时前
AI 人工智能配置管理 Nginx
运维·nginx·云原生
上海云盾安全满满3 小时前
服务器如果做好日常维护,有什么作用
运维·服务器
正在走向自律3 小时前
企业级数据库存储运维实战:表空间自动创建与存储架构深度优化
运维·数据库·架构·表空间
Agent产品评测局3 小时前
图片生成智能体哪家好?2026年企业级视觉创作与自动化选型全景横评
运维·人工智能·ai·自动化
猫头虎-人工智能3 小时前
ToDesk ToClaw AI自动化实测:零门槛玩转日常自动化,告别折腾与硬件损耗
运维·人工智能·架构·开源·自动化·aigc·ai编程
实在智能RPA3 小时前
Agent 能做流程的自动化监控吗?——深度拆解2026年AI智能体在企业级闭环监控中的技术实践
运维·人工智能·ai·自动化
翱翔-蓝天3 小时前
WSL + Docker + GPU 安装 video-subtitle-remover 完整文档
运维·docker·容器