麒麟V10-SP2-x86_64架构系统下通过KVM创建虚拟机及配置虚机的NAT、Bridge两种网络模式全过程

文章目录

一、什么是虚拟化?

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是否与虚机网络相通

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

相关推荐
Jason Yan11 分钟前
【经验分享】Ubuntu vmware虚拟机存储空间越来越小问题(已解决)
经验分享·虚拟机
努力努力再努力wz13 分钟前
【Linux实践系列】:用c语言实现一个shell外壳程序
linux·运维·服务器·c语言·c++·redis
Watink Cpper24 分钟前
[MySQL初阶]MySQL(1)MySQL的理解、库的操作、表的操作
linux·运维·服务器·数据库·c++·后端·mysql
青木沐30 分钟前
基于 openEuler 22.09 的 OpenStack Yoga 部署
运维·服务器·云计算·openeuler·私有云
鱼忆梦1 小时前
Debian基于Hexo搭建个人博客
运维·debian
赵民勇1 小时前
debian/control 文件中的${misc:Depends}
linux·运维·debian
shenzhenNBA1 小时前
Docker相关知识
linux·运维·docker·容器
土豆炒马铃薯。2 小时前
【Java 基础(人话版)】Java 虚拟机(JVM)
java·开发语言·jvm·后端·java基础·虚拟机
Azure DevOps2 小时前
Azure DevOps Service:连接到Microsoft Entra(AAD)
运维·microsoft·azure·devops
Azure DevOps2 小时前
Azure DevOps Server 2022.2 补丁(Patch 3)
运维·microsoft·azure·devops