本文最后更新于:2024年5月7日 下午
本文介绍Linux虚拟机 KVM 相关内容。
简介
KVM(Kernel-based Virtual Machine) ,基于内核的虚拟机,配合QEMU(处理器虚拟软件),需要CPU支持虚拟化技术(并且在BIOS里打开虚拟化选项),效率可达到物理机的80%以上。此外,它对SMP的支持很好。
对比
虚拟工具 | 效率描述 |
---|---|
Vmware | 的功能全面,设置全面,速度相对最慢 |
VirtualBox | 效率比Vmware高一些,中文用户最多 |
KVM | 效率最高 |
虚拟化支持
需要cpu有虚拟化功能,并且在BIOS中开启
- 为了查看当前是否支持虚拟化,查看文件
/proc/cpuinfo
,如果在cpu flags字段看到了vmx(Intel)或svm(AMD),那么你的处理器就支持KVM。
1 |
|
或者简单地计数
1 |
|
- 显示大于零即支持虚拟化
关闭 iptables 和 selinux
防火墙和Linux 安全管理工具,为了方便可以选择暂时关闭
关闭 iptables 服务:
1 |
|
关闭 selinux:
1 |
|
安装KVM
安装KVM及依赖项
1 |
|
如果
libvirt-bin
找不到,报错类似
1
E: Package 'libvirt-bin' has no installation candidate
原因是由于libvirt-bin被拆成了两个包
libvirt-daemon-system libvirt-clients
执行如下安装命令即可:
1
sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
-
安装虚拟系统管理器
1
sudo apt install virt-manager
-
启动libvirtd服务,并设置开机自动启动
1 |
|
1 |
|
- 执行
service libvirtd status
查看libvirtd服务状态
1 |
|
- 查看 kvm 模块是否加载到内核
1 |
|
如果没有加载,可以尝试执行命令:modprobe kvm_intel ,不行的话,试试重启宿主机。
桥接网络配置
一般虚拟机网络配置有Bridge、NAT等几种模式。
-
NAT模式下,虚拟机不需要配置自己的IP,通过宿主机来访问外部网络;
-
Bridge模式下, 虚拟机需要配置自己的IP,然后虚拟出一个网卡, 与宿主机的网卡一起挂到一个虚拟网桥上(类似于交换机)来访问外部网络,这种模式下,虚拟机拥有独立的IP,局域网其它主机能直接通过IP与其通信。
简单理解,就是NAT模式下,虚机隐藏在宿主机后面了,虚机能通过宿主机访问外网,但局域网其它主机访问不到它,Bridge模式下,虚机跟宿主机一样平等地存在,局域网其它主机可直接通过IP与其通信。一般我们创建虚机是用来部署服务供使用的, 所以都是用Bridge模式。
网桥模式 方法1
- ubuntu 18中,网络配置通过netplan来实现了,如下,更改配置文件 /etc/netplan/50-cloud-init.yaml
1 |
|
- 将宿主机原有网卡enp7s0挂到网桥br0上,并指定IP地址为192.168.40.241,nameservers指定DNS服务器。修改完后,通过
sudo netplan apply
重启网络服务生效,然后通过ifconfig
查看,原来挂在enp7s0网卡下的IP现在挂到了br0上,宿主机及所有其它虚拟机都通过该网桥来与外部通讯。我们也可以通过brctl show
来直观地查看:
1 |
|
目前因为还没虚机,所以只有宿主机的网卡enp7s0挂在网桥br0上。同时也可以看到docker容器也是通过网桥docker0来通讯的。
网桥模式 方法2
1 |
|
虚拟机安装
创建虚拟机镜像
关于虚拟机镜像,有很多种类型:raw、qcow2、vmdk等,我们推荐使用 qcow2 格式的镜像,因为 qcow2 格式的镜像支持快照,使用的比较广泛。在创建虚拟机之前需要手动去创建 qcow2 格式的镜像磁盘文件,以供安装虚拟机时使用。按照如下命令进行创建:
1 |
|
–os-variant
-
–os-variant 参数控制 kvm 支持的操作系统,可以通过如下命令查看:
1
osinfo-query os
安装虚拟机
- 安装方式一:通过网络镜像安装,文本控制台,无vnc支持。
1 |
|
- 安装方式二:通过网络镜像安装,支持 vnc ,默认无文本控制台。
1 |
|
- 安装方式三:通过 iso 镜像实现本地安装,支持 vnc ,无文本控制台。
1 |
|
安装命令
1 |
|
- 其中:
- –name指定虚机名称,后面可通过virsh管理;
- –memory=16384,maxmemory=16384配置了16G内存;
- –vcpus=4,maxvcpus=4配置了4个CPU内核;
- centos7需要指定–os-variant=rhel7;
- –disk path=xx,size=300制定了磁盘路径与大小,这里是300G。
如果执行上述命令出现qemu-kvm: could not open 'xx/CentOS-7-x86_64-DVD-1810.iso': Permission denied
异常退出时,可通过修改/etc/libvirt/qemu.conf
文件将user = "root"
,group = "root"
前面的注释去掉解决(https://github.com/jedi4ever/veewee/issues/996)
- 安装方式四:通过基础镜像模板快速安装(拷贝)
创建镜像文件:
1 |
|
安装命令:
1 |
|
说明:本方式创建 img 镜像的时候没有指定 preallocation=metadata 选项,这样存储文件空间显示比较小,方便拷贝,不加这个选项时,在 virt-install 时候需要在 –disk 选项后边加上 bus=virtio,如果不加在安装操作系统的时候似乎是识别不出来磁盘空间,会提示磁盘空间不足。采用这种方式安装的速度非常快,其实就是从已经存在的操作系统镜像启动虚拟机并 define 一个新的虚拟机 liwei01,可以通过脚本快速创建出多个相同配置的虚拟机。当然可以在基础镜像中安装公共的软件包和设置相同的配置,这样后续基于这个 img 安装的虚拟机都有类似的配置,省去重复安装软件包的麻烦。
- 安装方式五:通过基础镜像模板快速安装(共享)
创建镜像:
1 |
|
安装命令:
1 |
|
说明:在创建镜像 liwei01.qcow2 指定了 backing_file=liwei.qcow2 选项,表示以 liwei.qcow2 为后端镜像,以后对虚机 liwei01 的所有的写操作都会记录到 liwei01 镜像,实际操作系统是在 liwei.qcow2 镜像中,liwei.qcow2 镜像是只读的。也就是说后续以 liwei.qcow2 镜像为后端的虚机都共享这个镜像,而具体某个虚机的写操作内容都要记录到对应自己的镜像文件中去。注意和方式4的区别。
通过 vnc 或 文本控制台进行系统安装
方式一:通过文本控制台进行管理安装 virsh console liwei01 后续也能用此方式进行登陆管理虚拟机。
方式二:通过 vnc 客户端进行连接, virsh vncdisplay liwei01 :20 客户端通过url: 172.16.1.8:20 进行连接。
方式三:同方式二一样,具体安装过程与普通操作系统安装过程一样,过程略。
虚拟机网络配置
- 虚拟机安装完后,是没有分配IP的,我们通过
ip a
命令查看 - 这时候的eth0下面空空如也,什么都没有。在
/etc/sysconfig/network-scripts/ifcfg-eth0
文件中添加如下内容:
1 |
|
- 并通过
systemctl restart network
重启网络生效,这时候再运行ip a
查看,eth0下面已经有配置的IP了。不出意外的话,局域网其它主机就可以通过该IP来远程SSH连接了。
这时候我们再通过
brctl show
来查看网桥挂载情况,br0下面已经多了一个vnet0虚拟网卡了。
1 |
|
虚拟机管理
-
列出当前运行的虚拟机
virsh list
列出所有的,则
virsh list --all
-
从宿主机进入虚拟机
virsh console
,后面接虚拟机ID或名称
1 |
|
输入用户名,密码即可登录虚拟机,按
Ctrl+]
可退出。
- 启动与关闭虚拟机
virsh start|shutdown
1 |
|
- libvirtd启动时,自动启动虚拟机
1 |
|
- 挂起/恢复虚拟机
1 |
|
- 销毁虚拟机
1 |
|
总结常用命令
开机:virsh start vm
关机:virsh shutdown vm 如果不生效,需要在 vm 中执行:yum install -y acpid
强关:virsh destroy vm
删除:virsh undefine vm
定义:virsh define vm
挂起:virsh suspend vm
恢复:virsh resume vm
虚拟机列表:virsh list
包含关机的虚机:virsh list --all
设置自动启动:virsh autostart vm
关闭自动启动:virsh autostart --disable vm
登陆虚机控制台:virsh console vm # 只对指定了console的虚机才管用,方式一
退出虚机控制台:ctrl + ]
虚拟机的克隆
将虚拟机 liwei01 克隆为虚拟机 liwei02
1 |
|
注意:克隆前需要先关闭虚拟机;克隆完毕,一般需要设置虚拟机的网络。
创建虚拟机的快照
1. 创建快照的条件
- 虚拟机是关机状态。
- 虚拟机镜像格式是 qcow2。
2. 创建快照
1 |
|
3. 查看快照列表
1 |
|
4. 切换快照
1 |
|
5. 查看当前快照
1 |
|
6. 删除快照
1 |
|
7. 快照文件存储位置
1 |
|
虚拟机磁盘扩容和添加磁盘
1. 虚拟机扩容磁盘,给现有磁盘增加容量
1 |
|
在虚拟机中使用 fdisk -l 查看,通过观察block 块 id 可以发现存储空间多了,还必须将多余部分分区、格式化使用,默认使用 lvm 。
2. 给虚拟机添加磁盘
按照如下步骤:
- 关闭虚拟机
- 使用 qemu-img 创建磁盘镜像
- 使用 virsh edit liwei 编辑虚机配置文件,添加一条磁盘记录,适当修改信息
- 虚拟机开机 -> fdisk -> 格式化 -> ok.
注:可以尝试不分区直接格式化,也可以尝试使用 lvm 。
使用虚拟磁盘恢复虚拟机
思路:首先得有镜像文件(已有) + xml 配置文件
1 |
|
调整CPU、内存规格
如果要调整的 cpu 核数和内存超过安装虚机时指定的最大值,则需要关闭虚机来修改最大值,动态调整的值不能超过设置最大值,擦,一般使用值和最大值都是保持一致,一起修改。所以在线动态修改没什么意义,推荐直接修改配置文件就 OK。
1 |
|
重启虚机 liwei01 就ok.
调整虚拟机网卡
1. 添加虚拟机网卡
1 |
|
2. 删除虚拟机网卡
1 |
|
3. 指定网卡类型
网卡默认类型是 rtl 品牌的网卡,这里设置为 intel 网卡 e1000 系列。修改如下配置文件即可。
1 |
|
使用 virsh 重启虚拟机,在虚拟机中查看:
1 |
|
虚拟机的迁移
几个步骤:
1 |
|
参考资料
文章链接:
https://www.zywvvd.com/notes/system/linux/kvm/kvm-intr/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付