制作标准化系统模板是虚拟化环境部署的基础工作。对于CentOS Stream 8系统,首先需要配置可靠的软件源。阿里云镜像站提供了稳定的软件仓库,以下是具体配置方法:
bash复制# 清理现有repo配置
rm -rf /etc/yum.repos.d/*
# 配置BaseOS和AppStream源
cat <<EOF > /etc/yum.repos.d/os.repo
[baseos]
name=CentOS Stream 8 - BaseOS
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/BaseOS/x86_64/os/
gpgcheck=0
enabled=1
[appstream]
name=CentOS Stream 8 - AppStream
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/AppStream/x86_64/os/
gpgcheck=0
enabled=1
EOF
# 重建yum缓存
dnf clean all
dnf makecache
关键点说明:
- 使用阿里云镜像可避免官方源访问不稳定问题
- 禁用gpgcheck可跳过软件包签名验证(生产环境建议开启)
- 分离BaseOS和AppStream源便于后续维护
制作模板前需处理系统唯一性标识,避免克隆后产生冲突:
bash复制# 禁用SELinux(需重启生效)
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# 清理SSH主机密钥(新系统会重新生成)
cd /etc/ssh/
rm -rf ssh_host_*
# 重置机器ID(重要!)
cat /dev/null > /etc/machine-id
注意事项:
- 机器ID为空时,系统首次启动会自动生成新ID
- 清除SSH密钥可防止多台虚拟机使用相同密钥
- 生产环境需评估SELinux禁用带来的安全影响
完成上述配置后,执行关机并创建快照:
bash复制# 清理yum缓存
dnf clean all
# 关机准备制作模板
poweroff
此时应在虚拟化平台(如VMware、VirtualBox)中对虚拟机创建快照,标记为"Clean Template"。
当使用物理服务器或无法连接外网时,可通过本地镜像安装KVM:
bash复制# 挂载安装镜像
mount /dev/sr0 /mnt
# 配置本地yum源
cat <<EOF > /etc/yum.repos.d/dvd.repo
[AppStream]
name=AppStream
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0
[BaseOS]
name=BaseOS
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0
EOF
# 安装虚拟化组件
yum clean all
yum makecache
yum group install "Virtualization*" -y
验证安装结果:
bash复制virsh version
典型生产环境配置建议:
bash复制# 创建目录型存储池
virsh pool-define-as --name vms --type dir --target /data/vm_pool
virsh pool-start vms
virsh pool-autostart vms
bash复制# 查看运行中的虚拟机
virsh list
# 查看所有虚拟机(含关机状态)
virsh list --all
# 启动虚拟机
virsh start vm_name
# 正常关机(发送ACPI信号)
virsh shutdown vm_name
# 强制关机(相当于拔电源)
virsh destroy vm_name
bash复制# 挂起虚拟机(内存状态保存到磁盘)
virsh suspend vm_name
# 恢复挂起的虚拟机
virsh resume vm_name
# 设置开机自启
virsh autostart vm_name
# 禁用开机自启
virsh autostart --disable vm_name
经验之谈:
生产环境中推荐使用virsh shutdown正常关机,强制关机可能导致文件系统损坏。对于无响应的虚拟机,可先尝试virsh destroy后再检查虚拟机日志。
bash复制# 导出虚拟机XML配置
virsh dumpxml vm_name > vm_name.xml
# 编辑配置文件(会自动校验语法)
virsh edit vm_name
# 根据XML文件定义新虚拟机
virsh define vm_name.xml
动态调整vCPU数量(需要Guest OS支持):
bash复制# 查看当前vCPU配置
virsh vcpucount vm_name
# 设置vCPU数量为4
virsh setvcpus vm_name 4 --config --maximum
virsh setvcpus vm_name 4 --config
内存热调整(需要Balloon驱动):
bash复制# 将内存调整为8GB
virsh setmem vm_name 8192 --live
推荐使用qcow2格式,支持快照和动态扩容:
bash复制# 创建20G磁盘(实际不占用物理空间)
qemu-img create -f qcow2 /var/lib/libvirt/images/vm2.qcow2 20G
# 查看磁盘信息
qemu-img info /var/lib/libvirt/images/vm2.qcow2
bash复制virt-install \
--name vm2 \
--memory 4096 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/vm2.qcow2 \
--location /iso/CentOS-7-x86_64-Minimal-1810.iso \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--os-type linux \
--os-variant centos7.0
关键参数说明:
--graphics vnc:启用VNC远程控制--os-variant:优化虚拟机配置(可通过osinfo-query os查询支持的系统)bash复制# 创建带描述的关机状态快照(推荐)
virsh shutdown vm2
virsh snapshot-create-as vm2 snap1 "Initial state after installation"
# 创建运行状态快照(内存状态也会保存)
virsh snapshot-create-as vm2 snap2 --live
最佳实践:
- 重要操作前创建快照
- 定期创建"黄金镜像"快照
- 避免过多快照影响性能
- 关机状态快照更可靠
bash复制# 查看快照列表
virsh snapshot-list vm2
# 恢复到指定快照
virsh shutdown vm2
virsh snapshot-revert vm2 snap1
# 删除旧快照
virsh snapshot-delete vm2 snap2
对于生产环境,建议使用外置快照:
bash复制# 创建外置磁盘快照
virsh snapshot-create-as \
--domain vm2 \
--name snap3 \
--disk-only \
--diskspec vda,snapshot=external,file=/snapshots/vm2-snap3.qcow2
这种方式的优势在于:
症状:虚拟机无法获取IP或访问外网
排查步骤:
bash复制# 检查虚拟网络接口
virsh net-list --all
# 查看默认网络配置
virsh net-dumpxml default
# 重启虚拟网络
virsh net-destroy default
virsh net-start default
CPU优化:
bash复制# 查看CPU模型
virsh capabilities | grep -A 20 "<cpu>"
# 使用主机CPU模式
virsh edit vm2
# 在<cpu>部分添加:
<mode>host-passthrough</mode>
磁盘IO优化:
bash复制# 使用virtio-scsi控制器
<controller type='scsi' index='0' model='virtio-scsi'/>
# 启用IO线程
<iothreads>4</iothreads>
bash复制# 查看虚拟机控制台日志
virsh console vm2
# 查看libvirt日志
journalctl -u libvirtd -f
# 查看qemu进程参数
ps aux | grep qemu
对于无法启动的虚拟机,可尝试在XML配置中添加<serial type='stdio'>配置,通过控制台查看启动过程。