kvm简介
KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。
kvm.ko(内核模块),只用于管理虚拟 CPU 和内存。IO 的虚拟化,就交给 Linux 内核和qemu来实现。
Libvirt:是 KVM 的管理工具。Libvirt 除了能管理 KVM 这种 Hypervisor,还能管理 Xen,VirtualBox 等。OpenStack 底层也使用 Libvirt。
Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh
(1)libvirtd是服务程序,接收和处理 API 请求;
(2)API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具,后面我们也会介绍;
(3)virsh 是我们经常要用的 KVM 命令行工具,后面会有使用的示例。作为 KVM 和 OpenStack 的实施人员,virsh 和 virt-manager 是一定要会用的
CPU 的虚拟化技术可以将单 CPU 模拟多 CPU 并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
centos7下 kvm安装
1、安装qemu-kvm(用户态管理工具),libvirt(命令行管理工具),virt-install(安装kvm工具),bridge-utils(桥接设备管理工具)
yum install -y qemu-kvm libvirt virt-install bridge-utils
2、确保加载kvm模块
[root@localhost ~]# lsmod |grep kvm
kvm_intel 174841 0
kvm 578518 1 kvm_intel
irqbypass 13503 1 kvm
#如果没有加载,运行一下命令
[root@localhost ~]# modprobe kvm
[root@localhost ~]# modprobe kvm-intel
注意查看你的虚拟机架构支持的是amd还是intel CPU 虚拟化透传
在宿主机启用 kvm_amd/kvm-intel 模块的嵌套虚拟化功能,并且使透传永久有效
modprobe kvm-intel/modprobe kvm-amd
modprobe: ERROR: could not insert 'kvm_intel': Operation not supported
解决办法:看下是否开启CPU虚拟化,如果你是用VMware或者virtualbox,它们有各自的CPU虚拟化选项,勾上即可。如果是在物理机上,则需要进入bios了。
启动libvirtd服务
[root@localhost ~]# systemctl enable libvirtd
[root@localhost ~]# systemctl start libvirtd
[root@localhost ~]# systemctl status libvirtd
配置kvm桥接模式
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@localhost network-scripts]# vi ifcfg-br0
NAME=br0
DEVICE=br0
ONBOOT=yes
NETBOOT=yes
IPV6INIT=no
BOOTPROTO=static
NM_CONTROLLED=no
TYPE=Bridge
IPADDR=10.12.104.250
NETMASK=255.255.0.0
GATEWAY=10.12.1.1
DNS1=8.8.8.8
[root@localhost network-scripts]# vi ifcfg-ens32
NAME=ens33
DEVICE=ens33
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
BRIDGE=br0
查看网桥
[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29d1267b no ens32
virbr0 8000.52540063d8f4 yes virbr0-nic
删除virbr0
[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29d1267b no ens32
virbr0 8000.52540063d8f4 yes virbr0-nic
[root@localhost ~]# virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
default active yes yes
[root@localhost ~]# virsh net-destroy default
Network default destroyed
[root@localhost ~]# virsh net-undefine default
Network default has been undefined
[root@localhost ~]# systemctl restart libvirtd.service
[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29d1267b no ens32
若使用virt-manager管理kvm
由于要用virt-manager图形化安装虚拟机,所以还需要安装桌面,这里只有安装步骤
[root@localhost ~]# yum grouplist
[root@localhost ~]# yum groupinstall "GNOME Desktop" -y
test.sh
grep -E "^[ \t]*export[ \t]+LANG[ \t]*=" /etc/profile&& y="yes" || y="no"
if [[ "$y" = "yes" ]]; then
sed -r -i -e '/^[ \t]*export[ \t]+LANG[ \t]*=/c\export LANG="zh_CN.UTF-8"' /etc/profile
else
echo 'export LANG="zh_CN.UTF-8"' >>/etc/profile
fi
source /etc/profile
提前将ISO系统镜像存放到服务器的一个目录里,比如/data/iso
[root@localhost ~]# mkdir -p /data/{iso,kvmstorage}
[root@localhost ~]# cd /data/iso/
[root@localhost iso]# ll
总用量 4217748
-rw-r--r-- 1 root root 950009856 11月 22 15:24 CentOS-7-x86_64-Minimal-1804.iso
-rw-r--r-- 1 root root 3368962048 3月 23 2012 cn_windows_server_2008_r2.iso
kvm常用命令
KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理
virsh list #在线VM
virsh list --all #所有VM
virsh start #开机
virsh shutdown #软关机
virsh destroy #强制关机
virsh dnmpxml vm_name > name.xml #配置备份,xml配置文件路径 /etc/libvirt/qemu
virsh undefine #删除vm,只是删除配置文件,磁盘文件还在;
virsh define name.xml #导入备份的xml配置
virsh edit vm_name #修改配置文件,带语法检查
virsh domrename oldname newname #重命名,在关机状态修改
virsh suspend #挂起,状态paused
virsh resume #解除挂起
virsh vncdisplayer #查看vnc端口号
virsh autostart name #开机自启动,原理配置软连接实现
virsh autostart --disable name #取消开机启动
virsh console name #ctrl + ] 切换退出,可不通过网络,底层console连接
raw:裸格式,占用空间大,不支持快照,性能好
qcow2:qemu copy on write(qemu写时复制,thin)支持快照,性能较raw稍差
qemu-img info #查看磁盘信息
qemu-img convert -f raw -O qcow2 name.raw name.qcow2 #转换格式,支持vmdk
virsh snapshot-create #快照
virsh snapshot-list #快照列表,快照直接放在虚拟磁盘中
virsh snapshot-delete vmname --snapshotname #删除快照,删除快照文件不会变小
virsh snapshot-revert vmname #还原快照
案例:
安装虚拟机
首先创建存储卷:qemu-img create -f qcow2 /data/kvmstorage/centos71.qcow2 40G
然后使用virt-install创建虚拟机:
virt-install --name centos --ram 4096 \
--disk /data/kvmstorage/centos7.qcow2,format=qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel7 \
--location=/data/iso/CentOS-7-x86_64-Minimal-1908.iso
打开VNC Viewer--进行操作系统安装
安装完成后,可进行配置备份:virsh dumpxml centos11 > /data/kvmstorage/centos11.xml
对配置备份xml进行克隆同类型的操作系统
virt-clone --original-xml /data/kvmstorage/centos11.xml --name centos12 --file /data/kvmstorage/centos712.qcow2
另外可远程调用和查看:
因为ssh的不能访问 所以使用tcp进行对远程libvirtd进行连接访问(libvirtd 部署在远程)
修改文件vim /etc/sysconfig/libvirtd,用来启用tcp的端口
LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
LIBVIRTD_ARGS="--listen"
修改文件vim /etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
listen_addr = "0.0.0.0"
auth_tcp = "none"
运行 libvirtd
service libvirtd restart
在客户机上安装yum install -y libvirt,就可以远程访问查看
virsh -c qemu+tcp://10.12.104.250/system list