文章目录
-
- 一、什么是虚拟化?
- 二、常见的虚拟化技术
- 三、安装kvm并启动第一个kvm机器
-
- 1、环境准备
- 2、安装kvm工具
- [3、启动并设置开机自启 libvirtd 服务](#3、启动并设置开机自启 libvirtd 服务)
- [4、验证 KVM 模块是否加载](#4、验证 KVM 模块是否加载)
- 5、上传系统镜像到指定目录
- 6、网络
- [7、 以NAT网络模式虚拟化机器](#7、 以NAT网络模式虚拟化机器)
- 8、补充、通过console通道给虚机安装操作系统
- 9、以桥接网络模式虚拟化机器
一、什么是虚拟化?
yaml
说通俗一点,自己的windows笔记本为一台物理机,然后你想在你这个windows上运行多个操作系统,
并且每个操作系统之间互不干扰,那么就可以采取虚拟化技术,将你的windows机器虚拟为多个逻辑计算机。这个过程就可以称为为虚拟化
虚拟化具有哪些优势
yaml
借助虚拟化可在单一硬件上快速启动和停止不同的操作系统环境,从而为 IT 生态系统带来诸多益处。
1、灵活适变
可以将主机分为多个虚拟机,并根据需要为这些虚拟机分配资源。这样,就可以在单个物理硬件上托管多个虚拟机,从而最大限度地利用空间、
功耗和维护资源。
2、速度
虚拟机配置由软件定义,因此可以快速创建、移除、克隆和迁移虚拟机。可以远程控制虚拟机,还可以实现虚拟机的自动化管理。
3、兼容性
可以利用虚拟机运行未针对的操作系统发布的软件。例如可以在虚拟机中启动旧版操作系统,以便现有软件继续在现代硬件上运行。
4、稳定性和安全性
每个虚拟机都是独立运行,因此,虚拟机还具有安全方面的优势。虚拟机可能会出现的不稳定性不会影响主机操作系统或同一主机上的其他虚拟机。
可以在不影响整个系统的前提下测试新配置。
二、常见的虚拟化技术
yaml
vmware vspere: 付费,图形界面,管理简单方便
kvm: 免费的,纯命令行,LINUX内核原生集成。
KVM、vmware与虚拟化是什么关系?
kvm和vmwrae都可看做是一个可以实现虚拟化的软件。
[root@ops ~]# lscpu
Virtualization: VT-x
Hypervisor vendor: VMware #显示虚拟化平台是vmware
Virtualization type: full
通过vmware workstation打开的的虚拟机是上述这样的,如果是服务器厂商的就会显示是kvm了
1、kvm介绍
yaml
KVM 是 Kernel-based Virtual Machine 的缩写,是一种用于虚拟化的开源硬件虚拟化技术,
通过 intel VT-x 和 AMD-V 等 CPU 虚拟化指集的支持,将虚拟化性能提升到接近原生性能。它使用 Linux 内核的虚拟化模块,
将物理服务器划分为多个虚拟机。提供出色的性能和稳定性,同时还支持许多常见的操作系统和应用程序。
KVM 使用了 QEMU (Quick Emulator) 作为其默认的虚拟机监控程序。
除此之外,KVM 还支持多种嵌入式和云计算场景,并且得到了广泛的应用
2、kvm工作原理
yaml
KVM 的工作原理是使用 Linux 内核的虚拟化模块,将物理服务器划分为多个虚拟机。
具体来说,它在 Linux 内核之上构建一个虚拟化层,该虚拟化层允许多个虚拟机共享物理服务器上的计算资源(如 CPU、内存和磁盘设备)。
在此虚拟化层中,每个虚拟机都被视为单独的计算机,每个虚拟机可以运行不同的操作系统和应用程序。
3、kvm功能
yaml
在 KVM 中,虚拟机是一个 Linux 进程,由内核进行调度和管理。利用 KVM 运行的虚拟机可受益于 Linux 的性能特性,
且用户可以利用 Linux 调度程序提供的精细控制。KVM 还提供了与安全、存储、硬件支持和实时迁移相关的功能。
1、通过 SELinux 和 sVirt 实现安全边界
KVM 利用安全增强型 Linux(SELinux)和安全虚拟化(sVirt)组合来加强虚拟机的安全性和隔离性。SELinux 在虚拟机周围建立安全边界,sVirt 则扩展 SELinux 的功能,使强制访问控制(MAC)安全机制应用于客户虚拟机,并防止手动标记错误。
2、存储灵活性
KVM 能够使用 Linux 支持的任何存储,包括某些本地磁盘和网络附加存储(NAS)。KVM 还支持共享文件系统,因此虚拟机镜像可以由多个主机共享。
3、支持多种硬件架构
KVM 可在多种硬件平台上运行。作为红帽企业 Linux 9 的一部分使用时,KVM 支持 64 位 AMD、英特尔和 ARM 架构以及 IBM z13 系统及更高版本。
4、实时迁移
KVM 支持实时迁移,即能够在物理主机之间移动运行中的虚拟机,而不会出现明显的服务中断。迁移虚拟机的过程中,虚拟机仍保持开机状态,网络连接保持有效状态,且应用可继续运行。KVM 还会保存虚拟机的当前状态并对其进行存储,以便日后进行恢复。
三、安装kvm并启动第一个kvm机器
1、环境准备
yaml
本次实验以VMware为主,操作系统选择麒麟V10 SP2 x86_64架构
服务器配置如下:
ip: 192.168.56.100 (VMWare NAT连接)
内存: 4G
CPU: 4
磁盘: 20G(系统盘)+20G(数据盘)
必须开启虚拟化
实现功能:
1、在该机器上通过kvm虚拟化出网络模式为NAT、磁盘类型为qcow2的虚机
2、在该机器上通过kvm虚拟化出网络模式为、磁盘类型为qcow2的虚机

2、安装kvm工具
shell
注意事项:
1、关闭selinux
2、关闭firewalld
3、开启内核转发参数net.ipv4.ip_forward = 1
4、确保系统支持虚拟化技术,可以通过以下命令来检查,只有返回结果大于0表示该系统支持虚拟化:
[root@ops ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
4
通过yum在线安装kvm工具
shell
#通过yum在线安装kvm工具
[root@ops ~]# yum install libvirt* virt-* qemu-kvm* -y
#安装软件说明内容:
libvirt # KVM 虚拟化的守护进程,负责管理 KVM 虚拟机的运行
virt-* # 用于创建和管理虚拟机的强大命令行工具,通过它可以方便地创建、启动、停止虚拟机等
qemu-kvm # 基于 QEMU 的 KVM 虚拟机管理程序,为虚拟机提供硬件模拟和虚拟化支持
#注意:
安装kvm之后会多出两个网卡: virbr0和virbr0-nic
3、启动并设置开机自启 libvirtd 服务
shell
[root@ops ~]# systemctl start libvirtd && systemctl enable libvirtd
4、验证 KVM 模块是否加载
shell
[root@ops ~]# lsmod | grep kvm
kvm_intel 241664 0
kvm 753664 1 kvm_intel
irqbypass 16384 1 kvm
#如果输出包含kvm和kvm_intel(Intel CPU)或kvm_amd(AMD CPU),则表示KVM模块已成功加载;否则可能需要检查内核配置或重新安装KVM。
5、上传系统镜像到指定目录
shell
[root@ops img]# ls
Kylin-Server-10-SP2-Release-Build09-20210524-x86_64.iso
6、网络
KVM网络的两种模式
yaml
#KVM网络的两种模式:
NAT 默认设置,数据包由 NAT 方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络
网桥 这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持(一般有线网卡都支持)
shell
#查看主机网上相关信息
[root@ops vmIsoDisk]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:58:b0:c5 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.100/24 brd 192.168.56.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe58:b0c5/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:42:58:c7:cc brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
4: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:13:e9:62 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:13:e9:62 brd ff:ff:ff:ff:ff:ff
7: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:07:f5:ae brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe07:f5ae/64 scope link
valid_lft forever preferred_lft forever
上图可以看到,有4块网卡(不同的设备不同),分别为docker0、virbr0、virbr0-nic、vnet0其中
#注意:
virbr0: KVM安装完后自带的网桥,主要供NAT网络使用。
virbr0-nic: virbr0网桥上的一个子接口,相当与NAT网络里的网关接口。
vnet0: 是虚拟化环境中重要的网络接口,用于实现虚拟机与宿主机、其他虚拟机或外部网络之间的网络通信
7、 以NAT网络模式虚拟化机器
yaml
此次演示使用KVM自带的virbr0网桥进行测试,因为自带的virbr0实际就是NAT模式.
7.1、创建存放虚拟机硬盘镜像文件
yaml
[root@ops export]# mkdir vmIsoDisk
[root@ops export]# cd vmIsoDisk/
[root@ops vmIsoDisk]# ls
#raw磁盘格式(了解即可)
[root@ops vmIsoDisk]# qemu-img create -f raw KySP2.raw 10G
Formatting 'KySP2.raw', fmt=raw size=10737418240
#此次演示使用qcow2
[root@ops vmIsoDisk]# qemu-img create -f qcow2 KySP27.qcow2 20G #qcow2磁盘格式
Formatting 'KySP27.qcow2', fmt=qcow2 size=10737418240 cluster_size=65536 lazy_refcounts=off refcount_bits=16
[root@ops vmIsoDisk]# ls
KySP2.raw KySP27.qcow2
#查看虚拟机硬盘镜像文件信息
[root@ops vmIsoDisk]# qemu-img info KySP2.raw
image: KySP2.raw
file format: raw #虚拟机硬盘使用格式
virtual size: 10 GiB (10737418240 bytes) #虚拟机硬盘容量
disk size: 4 KiB
[root@ops vmIsoDisk]# qemu-img info KySP27.qcow2
image: KySP27.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
7.2、使用命令virt-install创建并安装虚拟机
#创建raw磁盘类型的虚机(了解即可)
shell
[root@ops vmIsoDisk]# virt-install --virt-type kvm --os-type=linux --os-variant centos7.0 --name kytest01 --memory 2048 --vcpus 2 --disk /export/vmIsoDisk/KySP2.raw,format=raw,size=10 --cdrom /export/img/Kylin-Server-10-SP2-Release-Build09-20210524-x86_64.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
Starting install...
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
#创建qcow2磁盘格式的虚机(此次演示使用qcow2,网络使用kvm自带的virbr0,即NAT网络模式)
shell
[root@ops vmIsoDisk]# virt-install --virt-type kvm --os-type=linux --os-variant centos7.0 --name kytest02 --memory 2048 --vcpus 2 --disk /export/vmIsoDisk/KySP27.qcow2,format=qcow2,size=10 --cdrom /export/img/Kylin-Server-10-SP2-Release-Build09-20210524-x86_64.iso --network bridge=virbr0 --graphics vnc,listen=0.0.0.0 --noautoconsole
Starting install...
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
7.2.1、参数解释
yaml
virt-install --virt-type kvm 指定安装的虚拟机类型是kvm
--os-type=linux 指定系统的类型是linux
--os-variant centos7.0 指定系统的版本是centos7,可以使用osinfo-query os命令查看支持的系统版本
--name kytest01 指定虚拟机的名字为kytest01
--memory 2048 指定内存为2G
--vcpus 2 指定cpu为2颗
--disk /export/vmIsoDisk/KySP2.raw 指定磁盘的路径是/export/vmIsoDisk/KySP2.raw
format=raw 指定磁盘的格式,常用的有两种格式,下方有解释
size=10 指定磁盘的大小为10G,默认单位为G
--cdrom /export/img/Kylin-Server-10-SP2-Release-Build09-20210524-x86_64.iso 指定光盘镜像的位置
#区别之处 是否采用图形化
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole 网络使用NAT网络,通过VNC图形界面安装,侦听到0.0.0.0,最后一个选项的意思是运行完当前使命令之后返回终端,而不是一直占用
--network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole 网络使用桥接网络,通过VNC图形界面安装,侦听到0.0.0.0,最后一个选项的意思是运行完当前使命令之后返回终端,而不是一直占用
--network bridge=br0 --nographics --console pty,target_type=serial --extra-args 'console=ttyS0,115200n8 serial' #网络使用桥接网络,通过命令行console控制台进行操作系统安装
yaml
磁盘格式对比:
raw 这种类型的磁盘不支持快照,但是性能好,用的比较少。
qcow2 这种类型的磁盘支持快照,性能相对raw差一点,用的比较多。
当创建好虚机后,会默认启动一个5900端口,以此类推
7.3、使用vnc工具给虚机安装操作系统


yaml
其余步骤就是跟在VMware中安装虚拟机操作一致,选择最小化安装,不再过多描述
当安装完成并重启后,通过宿主机连接当前kvm虚拟化出来的机器,如下所示
#注意:
此时该虚拟的ip是通过DHCP自动分配获取的,因此,改为静态获取



yaml
至此,NAT网络模式下的KVM虚拟化演示完成,但是只能通过宿主机访问到,其余外部机器会访问不到该虚机

8、补充、通过console通道给虚机安装操作系统
yaml
https://blog.csdn.net/shaock2018/article/details/117511250
https://www.cnblogs.com/caijt/p/11174676.html
9、以桥接网络模式虚拟化机器
9.1、创建bridge
shell
[root@ops vmIsoDisk]# brctl addbr br0
[root@ops vmIsoDisk]# brctl addif br0 ens33
[root@ops vmIsoDisk]# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.000c2958b0c5 no ens33
[root@ops vmIsoDisk]# brctl stp br0 on
[root@ops vmIsoDisk]# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.000c2958b0c5 yes ens33
[root@ops vmIsoDisk]# ifconfig ens33
ens3: flagS=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.100 netmask 255.255.255.0 broadcast 192.168.56.255
ether 00:0c:29:58:b0:c5 txqueuelen 1000 (Ethernet)
Rx packets 40959 bytes 13269505(12.6 MiB)
RX errors 0 dropped 2298 overruns 0 frame 0
TX packets 3618 bytes 369812(361.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@ops vmIsoDisk]# ifconfig br0
br0: flags=4163<BROADCAST,MULTICAST> mtu 1500
ether 00:0c:29:58:b0:c5 txqueuelen 1000 (Ethernet)
RX packets 21128 bytes 1200022 (1.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6270 bytes 46323515 (44.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@ops vmIsoDisk]# ifconfig ens33 0 up
[root@ops vmIsoDisk]# ifconfig br0 up
[root@ops vmIsoDisk]# dhclient br0
9.2、修改网卡配置文件
yaml
创建磁盘类型及虚拟化命令跟NAT一致
#桥接模式--手动创建br0网桥
[root@ops vmIsoDisk]# vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.56.100
NETMASK=255.255.255.0
GATEWAY=192.168.56.2
DNS1=8.8.8.8
DNS2=114.114.114.114
[root@ops vmIsoDisk]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # static是静态IP
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0 #添加这个,删除掉之前配置的静态ip
#重启网络
[root@ops vmIsoDisk]# systemctl restart network-online.target
[root@ops vmIsoDisk]# systemctl restart NetworkManager
#重启 libvirt 服务
[root@ops vmIsoDisk]# systemctl restart libvirtd


9.3、创建存放虚拟机硬盘镜像文件
shell
[root@ops vmIsoDisk]# qemu-img create -f qcow2 KySP27.qcow2 20G
Formatting 'KySP27.qcow2', fmt=qcow2 size=21474836480 cluster_size=65536 lazy_refcounts=off refcount_bits=16
9.4、使用命令virt-install创建并安装虚拟机
#注意: 将--network bridge=virbr0替换为--network bridge=br0
shell
[root@ops vmIsoDisk]# virt-install --virt-type kvm --os-type=linux --os-variant centos7.0 --name kytest03 --memory 2048 --vcpus 2 --disk /export2/vmIsoDisk/KySP27.qcow2,format=qcow2,size=10 --cdrom /export/img/Kylin-Server-10-SP2-Release-Build09-20210524-x86_64.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
Starting install...
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
9.5、通过VNC进行操作系统安装



yaml
其余步骤就是跟在VMware中安装虚拟机操作一致,选择最小化安装,不再过多描述
当安装完成并重启后,通过xshell连接当前kvm虚拟化出来的机器,如下所示
#注意:
1、此时该虚拟的ip是通过DHCP自动分配获取的,因此,改为静态获取
2、使用xshell连接该虚机
3、验证物理机192.168.56.100是否与虚机网络相通



至此,文章开头提到的两种虚拟化方式都已实现