物理机搭建KVM并与局域网互访(保姆级教程)

2022-11-21 21:13:26 浏览数 (2)

物理机搭建KVM并与局域网互访

  • ★KVM简介
    • 1、KVM概述
    • 工作原理
    • 2、KVM的核心组件:
    • 3、KVM运行模式
    • 4、KSM机制
    • 5、kvm工具集:
  • ★ 安装步骤
    • 虚拟机创建成功以后需要做的

★KVM简介

1、KVM概述

  • 以色列qumranet公司研发,后被RedHad公司收购

(1)kvm只支持x86平台 (2)依赖于 HVM,inter VT AMD-v

  • KVM是(Kernel-based Virtual Machine)的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。
  • KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。

工作原理

KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。 但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。

2、KVM的核心组件:

(1)、 kvm.ko内核模块 (kvm.ko)/dev/kvm:工作为hypervisor,在用户空间可通过系统调用ioctl()与内核中的kvm模块交互,从而完成虚拟机的创建、启动、停止、删除等各种管理功能; (2)、 qemu-kvm:用户空间的工具程序 qemu-kvm进程:工作于用户空间,用于实现IO设备模拟;用于实现一个虚拟机实例; (3)libvirt:工具箱用于与主流操作系统虚拟化进行交互工具

  • libvirt是cs架构应用:
  • 客户端:libvirt-client

virt-manager

  • daemon:图像化工具

libvirt-deaemon

3、KVM运行模式

KVM模块load进内存之后,系统的运行模式:

  • 内核模式:GuestOS执行IO类的操作时,或其它的特殊指令操作时的模式;它也被称为“Guest-Kernel”模式;
  • 用户模式:Host OS的用户空间,用于代为GuestOS发出IO请求;
  • 来宾模式:GuestOS的用户模式;所有的非IO类请求;

4、KSM机制

扫描物理内存,发现多个虚拟机实例有相同的内存空间,合并成为一个共享内存空间,节省内存。

5、kvm工具集:

  • qemu工具

qemu-kvm:用户空间的工具程序,创建管理虚拟机

qemu-img:是 QEMU 的磁盘管理工具

  • libvirt工具

GUI:virt-manager, virt-viewer:图形化管理 CLI: virsh, virt-install:创建管理虚拟机

  • 集群工具:

libvirtd:管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。Libvirt是一个C工具包的虚拟化功能与最新版本的Linux(以及其他操作系统)。主包包含libvirtd服务器虚拟化支持出口。

★ 安装步骤

  • 此次物理机配置

运行内存

磁盘空间

操作系统

32G

2块4T(RAID1阵列)

linux-centos7(桌面版)

1.查看系统版本

代码语言:javascript复制
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 

2.检查是否开启虚拟化。有VMX或者svm

代码语言:javascript复制
[root@localhost ~]# cat /proc/cpuinfo | egrep 'vmx|svm'

如果返回无数据则无法搭建,虚拟机安装请参考点击 物理机的话安装系统的时候弄桌面版 虚拟机和物理机都建议弄桌面 也方便KVM工具操作

3.查看是否加载kvm

代码语言:javascript复制
[root@localhost ~]# lsmod | grep kvm
kvm_intel             183621  4 
kvm                   586948  1 kvm_intel
irqbypass              13503  3 kvm

没有任何输出即为报错

4.安装kvm相关的软件包

代码语言:javascript复制
[root@localhost ~]# yum -y install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-manager libvirt-client virt-install virt-viewer

5.修改配置文件 添加一些优化参数

代码语言:javascript复制
vi /etc/sysctl.conf
#末尾添加
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000    65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
net.ipv4.ip_nonlocal_bind = 1

为了防止报错

代码语言:javascript复制
net.bridge.bridge-nf-call-ip6tables = 0  找不到
net.bridge.bridge-nf-call-iptables = 0  找不到
net.bridge.bridge-nf-call-arptables = 0  找不到

临时添加模块

代码语言:javascript复制
modprobe br_netfilter
modprobe  ip_vs_rr

开机自动加载模块

代码语言:javascript复制
cat > /etc/rc.sysinit << EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
EOF

cat > /etc/sysconfig/modules/br_netfilter.modules << EOF
modprobe br_netfilter
EOF

chmod 755 /etc/sysconfig/modules/br_netfilter.modules
lsmod |grep br_netfilter

使配置文件生效

代码语言:javascript复制
sysctl -p

6.修改宿主机网络为桥接 如果不设置桥接,后面创建出来的虚拟机不能与局域网内的主机互访 记得把配置文件备份一份 有的默认网卡名叫ens33,有的叫eth0,都可以无所谓

代码语言:javascript复制
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-em1 /root/ifcfg-em1_backup

再复制出来一份文件叫br0,一会作为桥接网卡

代码语言:javascript复制
[root@localhost network-scripts]# cp ifcfg-em1 ifcfg-br0

修改配置文件如下:

代码语言:javascript复制
vi /etc/sysconfig/network-scripts/ifcfg-em1
#文件内容如下:
TYPE=Ethernet
NAME=em1
UUID=b8730dd7-4855-401c-8ad3-5c009969089c    #UUID用自己机器默认的
DEVICE=em1
ONBOOT=yes
BRIDGE=br0   #这个br0是桥接网卡
#文件内容只需要有以上几个就行,其他的都删除或者注释,否则后面会报错

修改桥接网卡

代码语言:javascript复制
vi /etc/sysconfig/network-scripts/ifcfg-br0
#文件内容如下
TYPE=Bridge                 #桥接
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_AUTOCONF=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
BOOTPROTO=static          #静态IP
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.166      #根据自己使用的网络进行设置
NETMASK=255.255.255.0     #根据自己使用的网络进行设置
GATEWAY=192.168.1.1       #根据自己使用的网络进行设置
DNS1=8.8.8.8              #设置一下DNS要不不能上网
DNS2=114.114.114.114
#文件内容只需要有以上几个就行,其他的都删除或者注释,否则后面会报错

重启网络并重启主机

代码语言:javascript复制
systemctl restart network
网络重启之后建议把主机也重启一下
reboot

开机以后可以看一下自己的网络是不是配置成功

代码语言:javascript复制
ip a

7.启动

代码语言:javascript复制
[root@localhost ~]# systemctl start libvirtd

8.进入图形华界面

代码语言:javascript复制
[root@localhost ~]# virt-manager

9.主机导入镜像 位置自定义

10.开始创建KVM虚拟机 点击文件,新建虚拟机。

本地安装介质,前进!

后面我现在没截图 有机会我会完善文章 后面都是图形化操作比较简单

  • 选择镜像
  • 配置运行内存,cpu
  • 配置磁盘空间这个注意一下(这个是根据自己物理机磁盘空间分布情况而定) 默认的位置应该是/var/lib/libvirt,显示我只有50G可用 但是我的4T内存挂载到/home,我想从4T中分给他们用 在选择的时候自己根据目录创建一个卷就行了
  • 设置网络的时候选择桥接网络 (只有使用桥接网络才可以达到与局域网其他主机互访) 应该是桥接br0主机em1

后面就可以启动虚拟机一系列进行系统设置了

虚拟机创建成功以后需要做的

设置一下网络,修改固定ip、添加DNS可以上网 修改文件

代码语言:javascript复制
vi /etc/sysconfig/network-scripts/ifcfg-eth0
#我下面只写出需要修改或添加的位置:
BOOTPROTO=static  #修改  
ONBOOT=yes        #修改
#尾部添加 根据自己网络设置
IPADDR=192.168.1.167
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=144.144.144.144

修改好之后重启网络
systemctl restart network

验证: 在虚拟机上试试能不能上网

用同局域网内的主机是否能ping通

成功

0 人点赞