KVM
目前虚拟化产品
- 仿真虚拟化(性能最低): VMware, Virtual Box, QEMU(能够模拟整台计算机, 效率很低)
- 半虚拟化(性能中): Xen(需要修改内核, 在rhel6中使用rpm -ivh kernel-xen-xxx.rpm安装一个新的内核, 注意: Xen只支持和物理机系统一样的操作系统, 因为他是半虚拟化的)
- 全虚拟化(硬件虚拟化, 性能最高): KVM(Kernel-based Virtual Machine, 它摆脱了Xen不能运行Windows的缺点, KVM可以运行Windows, 要想使用KVM, CPU需要支持Intel VT 或者 AMD V技术), docker
查看是否只是KVM
cat /proc/cpuinfo | grep vmx
cat /proc/cpuinfo | grep svm
KVM提出的新模式
- 在传统的Linux操作系统上有用户模式与内核模式, 在KVM中增加了第三种模式: 客户模式(有自己的内核和用户模式)
安装KVM
yum install -y qemu-kvm libvirt libguestfs-tools virt-install virt-manager libvirt-python tigervnc virt-viewer
1. qemu-kvm: kvm主程序, KVM虚拟化模块
2. virt-manager: KVM图形管理工具
3. libvirt: 虚拟化服务
4. libguestfs-tools: 虚拟机的系统管理工具
5. virt-install: 安装虚拟机的使用工具
6. libvirt-python: Python调用libvirt虚拟化服务的API接口库文件
7. tigervnc: VNC远程桌面客户端
8. virt-viewer: KVM启动图形界面需要
systemctl start libvirtd
# 启动服务ls mod | grep kvm
# 查看是否加载了KVM模块virt-manager
# 运行KVM管理器
配置桥接
-
配置KVM网络桥接br0, br0就相当于一个二层交换机, 我们需要将eth0物理网卡添加到br0上, 所有计算机的虚拟网卡都在br0上, br0上又有eth0物理网卡, 就可以通过eth0联网了
yum install bridge-utils -y
- cd /etc/sysconfig/network-scripts
- cp ifconfig-ens33 ifconfig-ens33.bak
- 编辑ifconfig-ens33
- 去掉与IPV4有关的条目: IPADDR, NETMASK, GATEWAY, DNS, 为什么? -> 因为创建了br0设备, 计算机就是通过br0通信的, 需要将ens33上的IPV4地址放到br0上, 接下来只要在ens33中告诉计算机ens33的被添加到br0上即可
- 添加
BRIDGE="br0"
告诉计算机(bridge-utils工具)ens33被添加到了br0上, IPV4的地址到br0上找即可
- 创建ifconfig-br0
DEVICE="br0" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Bridge" BOOTPROTO=none IPADDR=ens33的ip NETMASK=ens33的掩码 GATEWAY=ens33的网关 DNS1=ens33指定的DNS
- 重启网络服务:
service network restart
, 不要使用systemctl restart network
, 可能会有问题, 以后凡是与network有关的使用service ifconfig
查看是否新添加了br0接口, 发现ens33的ip跑到了br0接口上, br0与ens33的mac地址是一样的, 因为br0底层还是走ens33物理网卡
KVM文件
- KVM会把创建的虚拟机安装到/var/lib/libvirt/images目录下
- 配置文件在/etc/libvirt/qemu
工具
-
virsh
- list: 查看当前启动了几个虚拟机
- start: 启动虚拟机
- shutdown: 关闭虚拟机?
- CentOS6上shutdown无效解决方案
- 在安装好的KVM的Linux虚拟机中安装并启动acpid服务, virsh shutdown命令发送acpi指令来控制虚拟机的电源, 而KVM虚拟机最小化安装的CentOS6默认是没有安装acpi服务的, CentOS7的最小化安装是有的
- 在KVM虚拟机中的CentOS6中配置acpid的yum源,
yum install acpid -y
- CentOS6上shutdown无效解决方案
- autostart: 开机自启动
- autostart --disable: 取消开机自动启动
- suspend KVMName: 挂起一个虚拟机
- resume KVMName: 恢复一个挂起的虚拟机
- snapshot-create-as KVM虚拟机名 快照名:
- 在开机的状态下创建快照会慢很多, 因为需要把内存中的内容写到磁盘中, 记录虚拟机当前的状态; 而关机状态下创建快照没有这个过程, 会很快
- snapshot-list KVM虚拟名: 列出KVM虚拟机有什么快照
- snapshot-current KVM虚拟机: 查看当前快照
- snapshot-revert KVMName snapshotName: 恢复快照
- domstate KVMName: 虚拟机状态
- snapshot-delete KVMName snapshotName: 删除
-
virt-clone -> KVM虚拟机克隆
-
-n: new
-
-o: old
-
-f: path
-
virt-clone -o oldFileName -n newFileName -f newFileNamePath
-
注意:
- 克隆出来的虚拟机的mac地址与被克隆的是不同的, 但是里面的OS的mac地址两者是一样的, 这就导致了克隆出来的虚拟机上的mac地址与os的mac不一致, 在克隆之后需要修改os中的mac地址; 但是在CentOS7下不需要
-
虚拟机镜像
- raw格式: 可以很容易从raw转为其他格式, raw在格式转换时作为中间格式, raw就是dd命令产生的
- qcow2格式: 支持快照, 支持zlib磁盘压缩, 支持AES加密, 支持创建image镜像
- vmdk格式: VMware使用的
qemu-img info filepath
# 查看文件格式
虚拟机镜像格式的装换
-
qemu-img convert -f [pat] -O [pat] path1 path2
- -f: 源文件格式
- -O: 目标文件格式
- path1是源文件, path2是目标文件
- qcow2与vmdk可以直接装换
-
修改虚拟机配置文件
- virsh edit KVMName, 不要使用vim直接编辑/var/lib/libvirt/qemu目录下的配置文件, 如果使用vim修改了, 还需要重启服务
字符安装虚拟机
-
virt-install
- -n NAME
- -r RAM
- --vcpus=VCPUS
- --disk path=, size=几个G
- -c CDROM
- --network bridge=br0
- --graphics vnc
- --location=yum源, 可选
- -x "ks=url", 执行ks.cfg文件, 与--location配置无人值守安装
-
使用
virt-viewer
或者vncviwer 127.0.0.1
连接