KVM 全称 Kernel-base Virtual Machine,是一种基于内核的虚拟化技术;原生自带内存压缩技术(KSM)。
一、 KVM安装
step 01 确认CPU支持虚拟化
开启虚拟化Intel VT-x/EPT 或 AMD-V/RVI 技术
lsmod | grep kvm |
[root@kvm01 ~]# lsmod | grep kvm
kvm_intel 183621 0
kvm 586948 1 kvm_intel
irqbypass 13503 1 kvm
step 02 安装虚拟化管理软件
yum install -y libvirt virt-install qemu-kvm |
软件包名称 | 作用 | 说明 |
---|---|---|
libvirt | 虚拟机通用管理软件 | 可管理KVM,Xen,qemu,lxc... |
virt | 虚拟机的安装工具和克隆工具 | 包含virt-install和virt-clone两个子功能 |
qemu-kvm | 管理虚拟机的虚拟磁盘 | 包含qemu-img(qcow,raw) |
[root@kvm01 ~]# yum install -y libvirt virt-install qemu-kvm
Loaded plugins: fastestmirror
Determining fastest mirrors
......
Dependency Updated:
cyrus-sasl-lib.x86_64 0:2.1.26-24.el7_9 device-mapper.x86_64 7:1.02.170-6.el7_9.5
device-mapper-libs.x86_64 7:1.02.170-6.el7_9.5 gnutls.x86_64 0:3.3.29-9.el7_6
Complete!
step 03 启动虚拟化管理软件
systemctl start libvirtd.service systemctl enable libvirtd.service |
[root@kvm01 ~]# systemctl start libvirtd.service
[root@kvm01 ~]# systemctl enable libvirtd.service
[root@kvm01 ~]# systemctl status libvirtd.service
● libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-03-21 15:36:34 CST; 15s ago
Docs: man:libvirtd(8)
......
Hint: Some lines were ellipsized, use -l to show in full.
二、 创建KVM虚拟机
virt-install 参数 |
虚拟机的名字和磁盘路径必须唯一
核心参数
- --virt-type 类型 #指定虚拟化类型(默认虚拟化类型是qemu)
- --os-type=类型 #指定系统类型
- --os-variant 系统版本 #指定系统版本
- --name 名称 #指定虚拟机名称
- --memory 数字 #指定虚拟机内存(单位MB)
- --vcpus 数字 #指定虚拟CPU核数
- --disk /目录/文件名称,format=磁盘格式,size=数字 #指定虚拟化磁盘位置,格式及容量(单位GB)
- --cdrom /目录/镜像文件 #指定系统镜像文件
- --network network=default #使用默认NAT的网络
- --graphics vnc,listen=IP地址 #指定VNC监听地址
- --noautoconsole
建议: 虚拟机内存不要低于1024M,否则安装系统特别慢! 使用KVM虚拟机安装Linux系统,不建议分配swap分区; |
[root@kvm01 ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory=2048 --vcpus 1 --disk /opt/centos7.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-2009.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
Starting install...
Allocating 'centos7.raw' | 10 GB 00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
[root@kvm01 ~]# netstat -lntup | grep kvm
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 13725/qemu-kvm
[root@kvm01 ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name test --memory=1024 --vcpus 1 --disk /opt/test.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-2009.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
Starting install...
Allocating 'test.raw' | 10 GB 00:00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
三、 virsh日常管理与配置
KVM虚拟机只有首次启动的时候,才能正常安装系统。 KVM虚拟机能登入系统,才算启动成功。 |
virsh list (--all) #查看虚拟机列表(默认仅查看处于运行状态的虚拟机) virsh start 虚拟机名称 #开启虚拟机(该方式启动虚拟机不加载光盘) virsh shutdown 虚拟机名称 #关闭虚拟机(该方式仅可关闭含有操作系统的虚拟机) virsh destroy 虚拟机名称 #虚拟机断电 virsh reboot 虚拟机名称 #重启虚拟机(该方式仅可重启又操作系统的虚拟机) virsh dumpxml 虚拟机名称 >/目录/备份文件名称 #导出配置 virsh undefine 虚拟机名称 #删除虚拟机(删除虚拟机配置文件;建议先将虚拟机断电,再删除虚拟机) virsh define /目录/配置文件名称 #导入虚拟机配置文件 virsh edit 虚拟机名称 #修改虚拟机配置(自带语法检查) virsh domname 虚拟机名称 #重命名虚拟机(低版本不支持,关机修改) virsh suspend 虚拟机名称 #挂起虚拟机 virsh resume 虚拟机名称 #恢复虚拟机 virsh vncdisplay 虚拟机名称 #查看虚拟机VNC端口 virsh autostart 虚拟机名称 #设置虚拟机开机自启(--disable 取消虚拟机开机自启) virsh console 虚拟机名称 #console控制台登录虚拟机(须修改虚拟机内核参数:grubby --update-kernel=ALL --args="console=ttyS0,115200n8") |
若使用 undefine 删除处于运行状态的虚拟机,虚拟机不会停止,仍可保持正常运行;但当虚拟机 shutdown 或 destroy 时(虚拟机进程终止),会被系统直接删除; |
[root@kvm01 ~]# virsh list
Id Name State
----------------------------------------------------
2 test running
[root@kvm01 ~]# virsh list --all
Id Name State
----------------------------------------------------
2 test running
- centos7 shut off
[root@kvm01 ~]# virsh start centos7
Domain centos7 started
[root@kvm01 ~]# virsh shutdown centos7
Domain centos7 is being shutdown
[root@kvm01 ~]# virsh list
Id Name State
----------------------------------------------------
2 test running
3 centos7 running
[root@kvm01 ~]# virsh destroy test
Domain test destroyed
[root@kvm01 ~]# virsh reboot centos7
Domain centos7 is being rebooted
[root@kvm01 ~]# virsh suspend centos7
Domain centos7 suspended
[root@kvm01 ~]# virsh resume centos7
Domain centos7 resumed
[root@kvm01 ~]# virsh undefine test
Domain test has been undefined
[root@kvm01 ~]# virsh list --all
Id Name State
----------------------------------------------------
3 centos7 running
[root@kvm01 ~]# virsh dumpxml centos7 > centos7.xml
[root@kvm01 ~]# ll centos7.xml
-rw-r--r-- 1 root root 5294 Mar 21 21:19 centos7.xml
[root@kvm01 ~]# virsh undefine centos7
Domain centos7 has been undefined
[root@kvm01 ~]# virsh shutdown centos7
Domain centos7 is being shutdown
[root@kvm01 ~]# virsh list --all
Id Name State
----------------------------------------------------
[root@kvm01 ~]# virsh define centos7.xml
Domain centos7 defined from centos7.xml
[root@kvm01 ~]# virsh start centos7
Domain centos7 started
[root@kvm01 ~]# virsh list --all
Id Name State
----------------------------------------------------
4 centos7 running
[root@kvm01 ~]# virsh shutdown centos7
Domain centos7 is being shutdown
[root@kvm01 ~]# mv /opt/centos7.raw /opt/centos7-web01.raw
[root@kvm01 ~]# virsh domrename centos7 centos7-web01
Domain successfully renamed
[root@kvm01 ~]# virsh edit centos7-web01
Domain centos7-web01 XML configuration edited.
[root@kvm01 ~]# grep -A3 '<disk' /etc/libvirt/qemu/centos7-web01.xml | head -4
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/opt/centos7-web01.raw'/>
<target dev='vda' bus='virtio'/>
[root@kvm01 ~]# virsh start centos7-web01
Domain centos7-web01 started
[root@kvm01 ~]# virsh list --all
Id Name State
----------------------------------------------------
5 centos7-web01 running
虚拟机配置文件目录为/etc/libvirt/qemu KVM开启自动主机目录为/etc/libvirt/qemu/autostart |
[root@kvm01 ~]# ls /etc/libvirt/qemu/
centos7.xml networks
[root@kvm01 ~]# virsh autostart centos7-web01
Domain centos7-web01 marked as autostarted
[root@kvm01 ~]# systemctl restart libvirtd.service
[root@kvm01 ~]# ls /etc/libvirt/qemu/autostart/ -l
total 0
lrwxrwxrwx 1 root root 35 Mar 22 10:25 centos7-web01.xml -> /etc/libvirt/qemu/centos7-web01.xml
[root@kvm01 ~]# virsh list --all
Id Name State
----------------------------------------------------
1 centos7-web01 running
四、. console控制台登录
step 01 登录Linux虚拟机,修改内核参数;
修改内核前,建议备份内核文件;
grubby --update-kernel=ALL --args="console=ttyS0,115200n8" |
step 02 重启Linux虚拟机;
[root@kvm01 ~]# ssh root@192.168.122.126
root@192.168.122.126's password:
Last login: Tue Mar 22 13:16:29 2022
[root@localhost ~]# reboot
Connection to 192.168.122.126 closed by remote host.
Connection to 192.168.122.126 closed.
step 03 Console控制台登录Linux虚拟机;
virsh console 虚拟主机名称 |
[root@kvm01 ~]# virsh console centos7-web01
Connected to domain centos7-web01
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
localhost login: root
密码:
Last login: Tue Mar 22 14:01:08 from gateway
[root@localhost ~]# lscpu | grep -i kvm
超管理器厂商: KVM