Skip to Content
文档服务器虚拟化与容器

虚拟化与容器

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 \ --noautoconsole

virsh 常用命令

# 虚拟机管理 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-net

libvirt 管理

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 mypool

LXD 系统容器

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 lxd

LXD 容器管理

# 查看可用镜像 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=100Mbit

LXD 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 EOF

MicroCloud

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/QEMULXD 容器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/tcp

virt-manager(图形化管理)

# 安装(需要桌面环境或 X11 转发) sudo apt install virt-manager -y # 远程连接(通过 SSH X11 转发) ssh -X user@server virt-manager
Last updated on