公司新买的服务器让我在CentOS7搭建kvm,记录一下历经两天的踩坑日子,也希望能够帮助到你。
简单介绍一下什么是KVM
KVM 是 Kernel-based Virtual Machine(基于内核的虚拟机)的缩写,是一种开源的虚拟化解决方案,允许在 Linux 操作系统上创建和管理虚拟机。KVM 利用 Linux 内核提供的虚拟化技术,通过将虚拟化功能整合到 Linux 内核中,实现高性能的虚拟化环境。
KVM 的主要特点包括:
-
硬件虚拟化支持:KVM 利用处理器的硬件虚拟化功能(如 Intel VT 或 AMD-V 技术),实现更高效的虚拟机性能和更好的隔离。
-
Linux 内核集成:KVM 作为 Linux 内核的一部分,无需额外的内核模块,因此具有更好的稳定性和性能。
-
支持多种架构:KVM 可以在 x86、x86-64、ARM 等架构上运行,支持多样化的硬件平台。
-
强大的管理工具:KVM 提供了一系列管理工具,如
virt-manager
、virsh
和qemu-img
,方便用户创建、配置和管理虚拟机。 -
灵活性和可扩展性:KVM 可以满足各种应用场景的需求,支持不同的虚拟化配置,如桥接网络、NAT 网络、存储池等。
总的来说,KVM 是一种强大的虚拟化技术,广泛应用于服务器虚拟化、云计算和开发测试环境中。它提供了高性能、稳定性和灵活性,使得用户可以轻松地构建和管理虚拟化环境。
步骤一:准备工作
通过上面的介绍,应该知道KVM是需要硬件支持的,不然会很慢。。。
- 查看系统内核版本
hostnamectl
- 查看是否支持虚拟化
我这里使用的是lscpulscpu # 或者 grep -E "svm|vmx" /proc/cpuinfo
使用 grep -E "svm|vmx" /proc/cpuinfo 搜索cpu信息是否包含vmx或svm
1. 如果输出中包含 svm 或 vmx,则表示 CPU 支持虚拟化技术。
2. svm 对应 AMD 的虚拟化技术(AMD-V)。
3. vmx 对应 Intel 的虚拟化技术(VT-x)。 - 查看是否加载KVM
lsmod | grep kvm
如果没有这样的输出说明没有加载执行以下命令modprobe kvm
- 关闭selinux
# 暂时 setenforce 0 # 永久 vim /etc/sysconfig/selinux # 把这行改为 disable SELINUX=disabled
- 最后要检查硬件虚拟化是否已经在 BIOS 中启用,这个非常重要,否则在创建虚拟机的时候报错,且非常慢。。。
1. 重启计算机并进入 BIOS 设置。通常,在计算机开机时按下相应的按键(如 F2、Delete、F12 等,具体取决于计算机品牌)可以进入 BIOS 设置界面。
2. 在 BIOS 设置中,查找一个类似于 "Virtualization Technology"、"Intel VT-x"、"AMD-V" 或类似的选项。这个选项可能位于不同的菜单中,取决于你的主板制造商和BIOS版本。
3. 确保该选项被启用。如果能找到这样一个选项,并且它的状态是“Enabled”(已启用),那么硬件虚拟化就已经在 BIOS 中启用了。
4. 保存设置。在确认硬件虚拟化已启用后,保存 BIOS 设置并重新启动计算机。
步骤二:安装 KVM 软件包
这边需要联网下载,如果没有配置网络的自行百度,下载慢的换个源。。。
- 安装相关软件包
yum install qemu-kvm qemu-img \ virt-manager libvirt libvirt-python virt-manager \ libvirt-client virt-install virt-viewer -y
- 设置开机启动
systemctl start libvirtd systemctl enable libvirtd
步骤三:配置网络桥接
-
安装
bridge-utils
软件包sudo yum install bridge-utils
-
查看网卡信息,备份网卡,并修改网卡配置
# 查看网络信息 一般第一个网卡 我这里是em1 ifconfig # 进入到网络配置目录 cd /etc/sysconfig/network-scripts/ # 备份网卡 cp ifcfg-em1 ifcfg-em1.bak # 拷贝一份新网卡文件作为桥接网卡 cp ifcfg-em1 ifcfg-br1 # 编辑 原网卡 vim ifcfg-em1 # 编辑 桥接网卡 vim ifcfg-br1
原网卡配置:
TYPE=Ethernet DEVICE=em1 UUID=c8d686a6-629a-4869-af51-77d95e9f198 NAME=em1 ONBOOT=yes BRIDGE="br1" BOOTPROTO=none
桥接网卡配置:
DEVICE=br1 ONBOOT=yes PREFIX=24 TYPE=Bridge BOOTPROTO=none IPADDR=192.168.1.231 NETMASK=255.255.255.0 GATEWAY=192.168.1.1
- 重启网络服务以使更改生效:
查看配置情况sudo systemctl restart network
步骤四:创建和启动虚拟机
-
使用
virt-install
命令创建虚拟机,配置网络连接为 bridge 模式:virt-install --name=CentOS02 --memory=512,maxmemory=1024 \ --vcpus=2,maxvcpus=4 --os-type=linux --os-variant=rhel7 \ --location=/home/data/CentOS-7-x86_64-DVD-1804.iso \ --disk path=/kvm-data/images/CentOS02.img,size=50 --bridge=br0 \ --graphics=none --console=pty,target_type=serial \ --extra-args="console=tty0 console=ttyS0" # 命令说明: # –name 指定虚拟机的名称 # –memory 指定分配给虚拟机的内存资源大小 # maxmemory 指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源 # –vcpus 指定分配给虚拟机的CPU核心数量 # maxvcpus 指定可调节的最大CPU核心数量 # –os-type 指定虚拟机安装的操作系统类型 # –os-variant 指定系统的发行版本 # –location 指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL # –disk path 指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G # –bridge 指定使用哪一个桥接网卡,也就是说使用桥接的网络模式 # –graphics 指定是否开启图形 # –console 定义终端的属性,target_type 则是定义终端的类型 # –extra-args 定义终端额外的参数
-
正常的话会进入到安装界面,我这边是命令安装的,没有图形化界面,比较繁琐,所以跳过安装
-
配置虚拟机网络为桥接模式
# 修改虚拟机的配置 CentOS01 是你虚拟机的名字 virsh edit CentOS01 # 或者 # 1.进入下面的目录 cd /etc/libvirt/qemu # 2.修改虚拟机的配置文件 vim 虚拟机名称.xml # 以上两个方法都会进入编辑界面 # 主要修改两个参数 1. type改为bridge桥接模式 2. network='br1' 改为你桥接网卡的名字 # 示例如下: <interface type='bridge'> # 这里改成briage <mac address='52:54:00:84:1d:dc'/> <source network='br0'/> # 网卡名称 <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> # 最后保存退出
- 启动虚拟机
# virsh start 虚拟机名称 virsh start CentOS01 # 查看运行的虚拟机 virsh list # 进入虚拟机,进入后按回车 virsh console
- 配置虚拟机网网络
重启网络vi /etc/sysconfig/network-scripts/ifcfg-eth0 # 修改一下几项 BOOTPROTO=static # 该为静态 ONBOOT=yes # 打开网卡 # 然后配置你的ip什么的 IPADDR=192.168.1.232 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=144.144.144.144
systemctl restart network
- 测试
ping 宿主机
ping 其他虚拟机
宿主机ping虚拟机 ctrl + ] 退出虚拟机
如果ping不通
-
检查网络配置:
- 确保宿主机和虚拟机的 IP 地址、网关和子网掩码正确配置。确保它们在同一子网内。
- 检查宿主机和虚拟机的网络接口是否正确连接到桥接接口(例如
br0
)。
-
检查防火墙设置:
- 确保宿主机和虚拟机的防火墙规则允许通信。你可以尝试禁用防火墙进行测试,验证是否是防火墙导致的问题。如果是,你可以适当调整防火墙规则来允许所需的通信。
-
检查网络连通性:
- 在宿主机上执行命令
ping 虚拟机IP地址
,确保宿主机能够与虚拟机进行通信。 - 在虚拟机内部执行命令
ping 宿主机IP地址
,确保虚拟机能够与宿主机进行通信。
- 在宿主机上执行命令
-
检查虚拟机网络设置:
- 确保虚拟机的网络设置正确。例如,在虚拟机的网络设置中选择桥接模式,并指定正确的桥接接口(例如
br0
)。
- 确保虚拟机的网络设置正确。例如,在虚拟机的网络设置中选择桥接模式,并指定正确的桥接接口(例如
-
检查其他网络配置:
- 检查宿主机和虚拟机的 DNS 配置是否正确。你可以尝试手动设置 DNS 来测试连接是否恢复。