KVM虚拟化
目录
一、KVM 概述
KVM 是 Kernelbased Virtual Machine 的缩写,是一种用于虚拟化的开源硬件虚拟化技术。
它使用 Linux 内核的虚拟化模块,将物理服务器划分为多个虚拟机。
KVM 允许虚拟机直接访问物理硬件资源,从而提供出色的性能和稳定性,同时还支持许多常见的操作系统和应用程序。
KVM 使用了 QEMU (Quick Emulator) 作为其默认的虚拟机监控程序。
除此之外,KVM 还支持多种嵌入式和云计算场景,并且得到了广泛的应用。
二、KVM工作原理
KVM 的工作原理是使用 Linux 内核的虚拟化模块,将物理服务器划分为多个虚拟机。
具体来说,它在 Linux 内核之上构建一个虚拟化层,该虚拟化层允许多个虚拟机共享物理服务器上的计算资源(如 CPU、内存和 0 设备)。在此虚拟化层中,每个虚拟机都被视为单独的计算机,每个虚拟机可以运行不同的操作系统和应用程序。
KVM使用硬件虚拟化技术,即通过 intel VTx 和 AMDV 等 CPU 虚拟化指集的支持,将虚拟化性能提升到接近原生性能。
此外,KVM 还使用 QEMU 作为其虚拟机监控程序,QEMU为每个虚拟机提供了一个虚拟化的环境,在该环境中,虚拟机可以访问它需要的资源(如磁盘、网络和其他I/0 设备)。
同时,KVM 利用 Linux 内核的强大功能,如分时调度和内存管理,来确保多个虚拟机之间的隔离性和安全性。
综上所述,KVM 的工作原理是结合硬件虚拟化技术和 Linux 内核的虚拟化模块,创建出一个虚拟化层,将物理服务器划分为多个虚拟机,并为每个虚拟机提供一个虚拟化的环境,从而实现资源共享和隔离。
三、KVM应用场景
KVM 作为一种强大的硬件虚拟化技术,在许多场景下都具有广泛的应用,以下是几个主要的应用场景:
1.云计算: KVM 在云计算中表现优异,可用于构建虚拟私有云、虚拟机托管服务等。KVM可以帮助企业实现资源共享、高可用性和快速部署的目标,同时还可以提高数据安全性和隔离性。
2.Web 托管: KVM 可以用于 Web 服务器的虚拟化,通过将多个虚拟机分配在一个物理服务器上,可以极大地提高服务器的利用率和性能。同时,KVM 还提供了快速备份和恢复数据的功能,保证了服务器的高可靠性。
3.测试和开发:KVM 可以帮助开发者创建多个虚拟机进行测试和开发,从而提高软件开发周期的效率和速度。开发者可以在虚拟机中运行不同的操作系统和应用程序,隔离他们的开发环境,同时可以在开发过程中随时备份和还原虚拟机。
4.HPC(高性能计算): KVM 可以用于构建 HPC 集群系统。通过虚拟化技术,HPC 集群系统可以实现资源共享和高效管理,同时保证计算资源的隔离性和安全性。
5.VDI(虚拟桌面基础设施): KVM 可以用于构建VDI 系统,将多个桌面虚拟机部署在一个物理服务器上,实现桌面虚拟化。VDI 系统可以提供远程访问、资源共享和快速部署的功能,同时可以保证数据隔离和安全性。
四、KVM 安装
1、升级系统、不升级内核
[root@kvm ~]# yum -y update --exclude=kernel* --exclude=centos-release*
2、安装 KVM 及依赖
[root@kvm ~]# yum -y install virt-manager libvirt virt-install qemu-kvm xauth dejavu-lgc-sans-fonts
-
Virt-Manager
A desktop user interface for managing virtual machines through libvirt.
-
Libvirt
A toolkit to interact with the virtualization capabilities of recent versions of Linux.
-
Virt-Install
A command line tool for creating new KVM container guests using the "libvirt"hypervisor management library.
-
Qemu-kvm
A Linux kernel module that allows a user space program to utilize the hardware virtualization features of various processors.
-
Dejavu-lgc-sans-fonts
A font family based on the Vera Fonts.
-
virt-viewer
A minimal tool for displaying the graphical console of a virtual machine.
3、配置网络转发
[root@kvm ~]# echo "net.ipv4.ip_forward = 1"|sudo tee /etc/sysctl.d/99-ipforward.conf
[root@kvm ~]# sudo sysctl -p /etc/sysctl.d/99-ipforward.conf
4、修改网卡配置
sudo nmcli connection add type bridge ifname br0
sudo nmcli connection modify br0 ipv4.method auto
sudo nmcli connection up br0
sudo nmcli connection add type bridge-slave ifname eth0 master br0
5、服务启停
重启 network 服务
[root@kvm ~]# systemctl restart NetworkManager
libvirtd 服务配置
[root@kvm ~]# systemctl start libvirtd
[root@kvm ~]# systemctl enable libvirtd
6、KVM 创建虚拟机
准备工作
存放目录创建
[root@kvm ~]# mkdir -p /home/virsh_workstation
虚拟机系统磁盘准备
[root@kvm ~]# qemu-img create -f qcow2 /home/virsh_workstation/test/test.qcow2 50G
Formatting '/home/virsh_workstation/test/test.qcow2', fmt=qcow2 size=53687091200 encryption=off cluster_size=65536 lazy_refcounts=off
系统镜像准备
[root@kvm ~]# ll | grep CentOS
-rw-r--r-- 1 root root 8280604672 Sep 9 16:56 CentOS-7-x86_64-Everything-1611.iso
virt-install 安装
[root@kvm ~]# virt-install \
> --virt-type=kvm \
> --name=virsh_host_online_keyan06 \
> --os-type=linux \
> --os-variant=rhel7 \
> --vcpus=4 \
> --ram=51200 \
> --cdrom=/home/CentOS-7-x86_64-Everything-1611.iso \
> --disk=/home/virsh_workstation/virsh_host_online_keyan06/virsh_host_online_keyan06.qcow2,format=qcow2 \
> --network bridge=br0 \
> --graphics vnc,listen=0.0.0.0 \
> --force
会调用安装窗口,通过界面进行 CentOS 7 虚拟机安装
7、KVM 虚拟机添加磁盘
查看虚拟机信息
查看所有虚拟机
[root@kvm ~]# virsh list --all
Id Name State
----------------------------------------------------
- test shut off
查看虚拟机磁盘信息
[root@kvm ~]# virsh domblklist test
Target Source
------------------------------------------------
vda /home/virsh_workstation/test/test.qcow2
hda -
为虚拟机增加磁盘
新建磁盘文件
[root@kvm ~]# qemu-img create -f qcow2 /home/virsh_workstation/test/test_data.qcow2 500G
Formatting '/home/virsh_workstation/test/test_data.qcow2', fmt=qcow2 size=536870912000 encryption=off cluster_size=65536 lazy_refcounts=off
将磁盘添加到虚拟机中
[root@kvm ~]# virsh attach-disk test --source /home/virsh_workstation/test/test_data.qcow2 --target vdb --subdriver qcow2 --persistent
Disk attached successfully
删除磁盘
[root@kvm ~]# virsh detach-disk test /home/virsh_workstation/test/test_data.qcow2
查看虚拟机磁盘信息
[root@kvm ~]# virsh domblklist test
Target Source
------------------------------------------------
vda /home/virsh_workstation/test/test.qcow2
vdb /home/virsh_workstation/test/test_data.qcow2
hda -
进入虚拟机查看
[root@kvm ~]# fdisk -l | grep vdb
Disk /dev/vdb: 536.9 GB, 536870912000 bytes, 1048576000 sectors
8、KVM 虚拟机快照操作
KVM 虚拟机快照 – 查看
[root@kvm ~]# virsh snapshot-list test
Name Creation Time State
------------------------------------------------------------
KVM 虚拟机快照 – 创建
创建快照
[root@kvm ~]# virsh snapshot-create-as --domain test --name test_snapshot --description "system clear"
Domain snapshot test_snapshot created
查看创建结果
[root@kvm ~]# virsh snapshot-list virsh_host_online_keyan06
Name Creation Time State
------------------------------------------------------------
test_snapshot 2020-09-09 18:35:20 +0800 running
查看快照详细信息
[root@kvm ~]# virsh snapshot-dumpxml --domain test --snapshotname test_snapshot
--domain:指定虚拟机
--snapshotname:指定虚拟机快照名称
KVM 虚拟机快照 – 恢复
[root@kvm ~]# virsh snapshot-revert test test_snapshot
virsh snapshot-revert 虚拟机名称 虚拟机快照名称
KVM 虚拟机快照 – 删除
[root@kvm ~]# virsh snapshot-delete --domain test --snapshotname test_snapshot
Domain snapshot test_snapshot deleted
9、KVM 常用命令
虚拟机启停
启动虚拟机
[root@kvm ~]# virsh start test
停止虚拟机
[root@kvm ~]# virsh shutdown test
查看虚拟机状态
[root@kvm ~]# virsh list --all
进入虚拟机
[root@kvm ~]# virsh console test
虚拟机关机
[root@kvm ~]# virsh shutdown test
虚拟机重启
[root@kvm ~]# virsh reboot test
强制停止虚拟机
[root@kvm ~]# virsh destroy test
彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
[root@kvm ~]# virsh undefine test
设置宿主机开机时该虚拟机也开机
[root@kvm ~]# virsh autostart test
解除开机启动
[root@kvm ~]# virsh autostart --disable test
退出虚拟终端
[root@kvm ~]# Ctrl + ]