KVM (全称是 Kernel-based Virtual Machine) 是 Linux 下 x86 硬件平台上的全功能虚拟化解决方案,包含一个可加载的内核模块 kvm.ko 提供和虚拟化核心架构和处理器规范模块。全虚拟化,可以快速部署新的环境,能使用qcow2磁盘格式,利用类似写实复制的功能,节约磁盘空间和创建时间。
快速创建虚拟机的模板,可以参考使用
# 需要准备 :[ .kvm-master.xml / .kvm-master.qcow2]
# 已经创建的虚拟机的 xml文件 / img文件 可以做为模板
#!/bin/bash
. /etc/init.d/functions
ONF_DIR=/etc/libvirt/qemu
IMG_DIR=/var/lib/libvirt/images
function createvm(){
if [ -e ${IMG_DIR}/${1}.img ];then
echo "警告 xn ${1}.img 已经存在"
return 1
else
qemu-img create -b ${IMG_DIR}/.kvm-master.qcow2 -f \
qcow2 ${IMG_DIR}/${1}.img 40G &>/dev/null
sed -e "s,kvm-name,${1}," ${IMG_DIR}/.kvm-master.xml >${CONF_DIR}/${1}.xml
sudo virsh define ${CONF_DIR}/${1}.xml &>/dev/null
echo "' xn ${1} 创建成功"
fi
}
if (( $# == 0 ));then
echo "$0 xn1 xn2 xn3 ... ..."
else
for i in $@;do
createvm ${i}
done
fi
exit 0
安装 KVM
1. 如何查看当前linux服务器是否支持虚拟化
grep -E '(svm|vmx)' /proc/cpuinfo
# 输出有SVM或VMX,表明CPU支持虚拟化技术:
# svm - AMD 的虚拟化技术AMD-V
# vmx - Intel 的虚拟化技术Intel-VT
# 使kvm虚拟机的支持虚拟化嵌套:
modinfo kvm_intel | grep nested
# parm: nested:bool
cat /sys/module/kvm_intel/parameters/nested
# 如果上面的显示结果不是 Y 的话需要开启 nested,执行以下:
modprobe -r kvm-intel
modprobe kvm-intel nested=1
cat /sys/module/kvm_intel/parameters/nested
# 上面的显示结果是 Y,已经 正确开启 虚拟化嵌套
#添加到内核自启动
tee /etc/sysconfig/modules/kvm.modules <<-'EOF'
modprobe -r kvm-intel
modprobe kvm-intel nested=1
EOF
chmod 755 /etc/sysconfig/modules/kvm.modules
source /etc/sysconfig/modules/kvm.modules
2. 安装KVM相关包文件
yum install -y virt-* libvirt bridge-utils qemu-img
3. 确认载入kvm模块
lsmod | grep kvm
4. 启动libvirtd服务(必须)
systemctl start libvirtd && systemctl enable libvirtd
KVM 已经完成安装了,接下来配置网络
方式一:
# 配置桥接网卡
tee /etc/sysconfig/network-scripts/ifcfg-br0 <<-'EOF'
TYPE=Bridge
NAME=br0
DEVICE=br0
IPADDR=10.0.10.129
NETMASK=255.255.255.0
GATEWAY=10.0.10.1
EOF
# 配置本地网卡与桥接网卡相同
echo 'BRIDGE=br0' >> /etc/sysconfig/network-scripts/ifcfg-eth0
# 重启网络服务 (注意可能会导致网络启动失败,无法 ssh连接)
# 或者增加一个备份网卡,保障
systemctl restart network
方式二:
# 拷贝当前的网卡文件,并修改名字
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0
# 增加一个桥接网卡
tee /etc/sysconfig/network-scripts/ifcfg-br0 <<-'EOF'
TYPE=Bridge
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
EOF
# 配置本地网卡与桥接网卡相同
echo 'BRIDGE=br0' >> /etc/sysconfig/network-scripts/ifcfg-eth0
# 重启网络服务 (注意可能会导致网络启动失败,无法 ssh连接)
# 或者增加一个备份网卡,保障
systemctl restart network
# 然后,ifconfig命令可以看出,eth0网卡的IP到br0上
使用KVM(命令行方式)安装centos7
# 创建 Kvm 数据基准目录
mkdir -p /kvm/iso/ /kvm/img/
# 下载 Centos镜像
cd /kvm/img/
wget https://mirrors.aliyun.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso
# 安装(可合理调整资源大小)
virt-install --name=demo --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 \
--os-type=linux --os-variant=rhel7 \
--location=/kvm/iso/CentOS-7-x86_64-Minimal-1908.iso\
--disk path=/kvm/img/demo.img,size=10 --bridge=br0 \
--graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0" \
-enable-kvm -cpu qemu64,+vmx
# 添加vmx支持
图形安装的虚拟机的 默认目录
# 存放虚拟机的img文件
/var/lib/libvirt/images/
# 存放虚拟机的xml文件
/etc/libvirt/qemu/
建立一台支持虚拟化的虚拟机
修改 xml 文件 cpu 部分
# 完全模拟物理机CPU
<cpu mode='host-passthrough' check='none'/>
管理虚拟机的一些命令
# 假设 虚拟机 为 demo
# 启动 虚拟机 demo
virsh start demo
# 关闭虚拟机
virsh shutdown demo
# 强制停止虚拟机
virsh destroy demo
# 彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
virsh undefine demo
# 设置宿主机开机时该虚拟机也开机
virsh autostart demo
# 解除开机启动
virsh autostart --disable demo
# 挂起虚拟机
virsh suspend demo
# 恢复挂起的虚拟机
virsh resume demo
自己遇到的坑
错误:
重启服务器后,发现
qemu://system 没有连接驱动器可用;
读取数据时进入文件终点: 输入/输出错误。
原因:
KVM的相关包 装少了
解决方法:
KVM的相关包 重新安装
yum install -y virt-* libvirt bridge-utils qemu-img
错误:
无法 virsh console 虚拟机
原因:
没有 /dev/ttyS0 启用串口登录
解决方法:
systemctl start serial-getty@ttyS0.service
systemctl enable serial-getty@ttyS0.service