虚拟化与容器
Ubuntu 26.04 提供完整的虚拟化和容器技术栈。本文介绍 KVM/QEMU 硬件虚拟化、libvirt 管理工具、LXD 系统容器和 MicroCloud 集群方案。
KVM / QEMU
KVM(Kernel-based Virtual Machine)是 Linux 内核内置的虚拟化模块,配合 QEMU 提供完整的硬件虚拟化能力。
检查硬件支持
# 检查 CPU 虚拟化支持
grep -Ec '(vmx|svm)' /proc/cpuinfo
# 输出大于 0 表示支持
# 或使用 kvm-ok 工具
sudo apt install cpu-checker -y
kvm-ok安装 KVM
sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager -y
# 将当前用户加入 libvirt 组
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER
newgrp libvirt
# 验证服务运行
sudo systemctl status libvirtd
# 验证安装
virsh list --all使用 virt-install 创建虚拟机
# 下载 ISO
wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/26.04/ubuntu-26.04-live-server-amd64.iso -O /var/lib/libvirt/images/ubuntu-26.04.iso
# 创建虚拟机
# 注意:--os-variant 应与 ISO 一致;若本机 osinfo-db 尚未收录,
# 可用 osinfo-query os | grep ubuntu 确认。未收录时可临时回退到
# ubuntu24.04,或改用 --os-variant detect=on,name=ubuntu26.04
virt-install \
--name ubuntu-vm \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/ubuntu-vm.qcow2,size=20,format=qcow2 \
--cdrom /var/lib/libvirt/images/ubuntu-26.04.iso \
--os-variant ubuntu26.04 \
--network bridge=virbr0 \
--graphics vnc,listen=0.0.0.0,port=5901 \
--console pty,target_type=serial \
--noautoconsole
# 使用 cloud 镜像快速创建(无需安装过程)
wget https://cloud-images.ubuntu.com/releases/26.04/release/ubuntu-26.04-server-cloudimg-amd64.img
# 创建磁盘副本并调整大小
cp ubuntu-26.04-server-cloudimg-amd64.img /var/lib/libvirt/images/vm-disk.qcow2
qemu-img resize /var/lib/libvirt/images/vm-disk.qcow2 20G
# 配合 cloud-init 使用
# 若 osinfo-db 未收录 ubuntu26.04,可临时回退 ubuntu24.04
virt-install \
--name cloud-vm \
--ram 2048 \
--vcpus 2 \
--disk /var/lib/libvirt/images/vm-disk.qcow2 \
--import \
--os-variant ubuntu26.04 \
--network bridge=virbr0 \
--cloud-init user-data=cloud-config.yaml \
--noautoconsolevirsh 常用命令
# 虚拟机管理
virsh list --all # 列出所有虚拟机
virsh start ubuntu-vm # 启动
virsh shutdown ubuntu-vm # 正常关机
virsh destroy ubuntu-vm # 强制关机
virsh reboot ubuntu-vm # 重启
virsh suspend ubuntu-vm # 暂停
virsh resume ubuntu-vm # 恢复
virsh undefine ubuntu-vm --remove-all-storage # 删除虚拟机及磁盘
virsh autostart ubuntu-vm # 设置开机自启
# 资源调整
virsh setvcpus ubuntu-vm 4 --config # 修改 CPU 数(需关机)
virsh setmaxmem ubuntu-vm 4G --config # 修改最大内存
virsh setmem ubuntu-vm 4G --config # 修改当前内存
# 快照管理
virsh snapshot-create-as ubuntu-vm snap1 "安装后快照"
virsh snapshot-list ubuntu-vm
virsh snapshot-revert ubuntu-vm snap1
virsh snapshot-delete ubuntu-vm snap1
# 控制台连接
virsh console ubuntu-vm # 串口控制台
virsh vncdisplay ubuntu-vm # 查看 VNC 端口
# 磁盘管理
qemu-img info /var/lib/libvirt/images/ubuntu-vm.qcow2
qemu-img resize /var/lib/libvirt/images/ubuntu-vm.qcow2 +10G网络桥接配置
# 创建网桥(Netplan 配置)
sudo tee /etc/netplan/01-bridge.yaml << 'EOF'
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: false
bridges:
br0:
interfaces:
- ens33
dhcp4: true
parameters:
stp: false
forward-delay: 0
EOF
sudo netplan apply
# 在 libvirt 中使用桥接网络
virsh net-define bridge-net.xml
virsh net-start bridge-net
virsh net-autostart bridge-netlibvirt 管理
XML 定义虚拟机
<!-- /etc/libvirt/qemu/example-vm.xml -->
<domain type='kvm'>
<name>example-vm</name>
<memory unit='GiB'>4</memory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='q35'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='host-passthrough'/>
<devices>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/example-vm.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<graphics type='vnc' port='-1' autoport='yes'/>
</devices>
</domain># 从 XML 创建虚拟机
virsh define example-vm.xml
virsh start example-vm存储池管理
# 查看存储池
virsh pool-list --all
# 创建目录存储池
virsh pool-define-as mypool dir --target /data/libvirt/images
virsh pool-build mypool
virsh pool-start mypool
virsh pool-autostart mypool
# 创建卷
virsh vol-create-as mypool vm-disk.qcow2 20G --format qcow2
# 列出卷
virsh vol-list mypoolLXD 系统容器
LXD 提供轻量级系统容器,拥有完整的 Linux 系统环境,启动速度快,资源开销小。
安装 LXD
# 通过 Snap 安装
sudo snap install lxd
# 初始化 LXD
sudo lxd init
# 交互式配置:
# - 集群:no(单机)
# - 存储池:dir 或 zfs
# - 网络:创建新的桥接网络
# - 自动更新镜像:yes
# 最小化初始化
sudo lxd init --minimal
# 将用户加入 lxd 组
sudo usermod -aG lxd $USER
newgrp lxdLXD 容器管理
# 查看可用镜像
lxc image list ubuntu: # Ubuntu 官方镜像
lxc image list images: # 社区镜像
# 启动容器
lxc launch ubuntu:26.04 my-container
lxc launch ubuntu:26.04 web-server
# 启动虚拟机(LXD 也支持 VM)
lxc launch ubuntu:26.04 my-vm --vm
# 容器操作
lxc list # 列出所有
lxc start my-container # 启动
lxc stop my-container # 停止
lxc restart my-container # 重启
lxc delete my-container --force # 删除
lxc info my-container # 详细信息
# 进入容器
lxc exec my-container -- bash
lxc exec my-container -- cat /etc/os-release
# 文件传输
lxc file push local-file.txt my-container/root/
lxc file pull my-container/etc/hostname .
# 快照
lxc snapshot my-container snap0
lxc restore my-container snap0
lxc info my-container # 查看快照列表LXD 资源限制
# CPU 限制
lxc config set my-container limits.cpu 2
# 内存限制
lxc config set my-container limits.memory 1GB
# 磁盘限制
lxc config device set my-container root size=10GB
# 网络带宽限制
lxc config device set my-container eth0 limits.ingress=100Mbit
lxc config device set my-container eth0 limits.egress=100MbitLXD Profile
# 创建自定义 profile
lxc profile create web-server
lxc profile set web-server limits.cpu 2
lxc profile set web-server limits.memory 2GB
# 使用 profile 启动容器
lxc launch ubuntu:26.04 web1 --profile default --profile web-server
# 查看 profile
lxc profile show web-server
# cloud-init 集成
lxc profile set web-server user.user-data - << 'EOF'
#cloud-config
packages:
- nginx
runcmd:
- systemctl enable --now nginx
EOFMicroCloud
MicroCloud 是 Canonical 推出的轻量级集群方案,整合了 LXD、MicroCeph(分布式存储)和 MicroOVN(SDN 网络)。
安装 MicroCloud
# 在所有节点上安装
sudo snap install lxd
sudo snap install microceph
sudo snap install microovn
sudo snap install microcloud
# 在第一个节点上初始化集群
sudo microcloud init初始化集群
# microcloud init 将引导你完成:
# 1. 发现局域网中的其他节点
# 2. 选择要加入集群的节点
# 3. 配置 MicroCeph 分布式存储
# 4. 配置 MicroOVN 网络
# 5. 配置 LXD 集群
# 初始化完成后验证
lxc cluster list
sudo microceph status
sudo microovn status使用 MicroCloud 集群
# 启动容器(自动分配到集群节点)
lxc launch ubuntu:26.04 app1
lxc launch ubuntu:26.04 app2
lxc launch ubuntu:26.04 app3
# 指定节点启动
lxc launch ubuntu:26.04 db1 --target node2
# 查看容器分布
lxc list -c nNtSl
# 实时迁移容器
lxc move app1 --target node3技术选型对比
| 特性 | KVM/QEMU | LXD 容器 | Docker |
|---|---|---|---|
| 虚拟化类型 | 硬件虚拟化 | 系统容器 | 应用容器 |
| 隔离级别 | 完全隔离 | 内核共享 | 内核共享 |
| 启动时间 | 数十秒 | 1-2 秒 | 亚秒级 |
| 资源开销 | 较大 | 小 | 极小 |
| 运行内核 | 独立内核 | 共享宿主内核 | 共享宿主内核 |
| 适用场景 | 异构 OS | 完整 Linux 环境 | 微服务 |
| 密度 | 低 | 高 | 极高 |
| 实时迁移 | 支持 | 支持 | 需要编排工具 |
选择建议
- KVM/QEMU:需要运行不同操作系统、需要最强隔离、传统虚拟化场景
- LXD:需要完整的 Linux 系统环境、开发测试、轻量级服务隔离
- Docker:微服务部署、CI/CD、应用打包分发
- MicroCloud:小型集群、边缘计算、需要简单的分布式方案
管理工具
Cockpit Web 控制台
# 安装 Cockpit
sudo apt install cockpit cockpit-machines -y
# 启动服务
sudo systemctl enable --now cockpit.socket
# 访问 https://server-ip:9090
# 可以通过 Web 界面管理虚拟机
# 防火墙
sudo ufw allow 9090/tcpvirt-manager(图形化管理)
# 安装(需要桌面环境或 X11 转发)
sudo apt install virt-manager -y
# 远程连接(通过 SSH X11 转发)
ssh -X user@server virt-managerLast updated on