《探秘 CentOS 9 安装 KVM:开启高效虚拟化之旅》
在数字化转型的时代巨轮下,虚拟化技术已成为企业与开发者优化资源利用、提升效能的核心驱动力。你是否曾思索,如何在 CentOS 9 系统中搭建起 KVM 虚拟化环境,进而实现资源的灵活编排与高效流转?现在,就让我们一步步深入探索 CentOS 9 安装 KVM 的全过程,为你揭开这一技术的神秘面纱。完成部署后,虚拟机 IP、主机名以及密码的修改等常见难题,都将迎刃而解,助你轻松驾驭虚拟化环境,释放技术潜能。
一、硬件环境准备
1. 服务器要求
- CPU:支持Intel VT-x/AMD-V(
grep -E '(vmx|svm)' /proc/cpuinfo
验证) - 内存:建议物理内存≥64GB(根据虚拟机需求线性扩展)
- 存储:建议RAID 10 SSD阵列,或NVMe SSD(IOPS≥50k)
- 网卡:建议双万兆网卡(bonding做高可用)
2. BIOS设置
- 开启CPU虚拟化支持
- 禁用Secure Boot(避免驱动兼容问题)
- 启用SR-IOV(若需硬件直通)
验证CPU是否支持虚拟化
grep -cE '(vmx|svm)' /proc/cpuinfo
# 如果得到大于0的数说明支持虚拟化
二、宿主机系统配置
1. 关闭Selinux和防火墙
Selinux(Security - Enhanced Linux)是 Linux 系统的安全增强模块,而防火墙可能会对 KVM 的网络通信造成干扰。因此,在安装 KVM 之前,需要将它们关闭。
# 关闭Selinux
setenforce 0&&getenforce && sed -i "s/SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
# 防火墙
systemctl stop firewalld.service && systemctl disable firewalld.service
2.安装 epel 软件源
epel(Extra Packages for Enterprise Linux)是由 Fedora 社区提供的一个软件源,包含了许多额外的软件包,为 KVM 的安装提供了必要的支持。
yum install -y epel-release
yum clean all && yum makecache
dnf install virt-install libvirt-daemon-kvm qemu-kvm -y
virt-install
:这是一个用于创建和管理虚拟机的强大命令行工具,通过它可以方便地创建、启动、停止虚拟机等。libvirt-daemon-kvm
:KVM 虚拟化的守护进程,负责管理 KVM 虚拟机的运行。qemu-kvm
:基于 QEMU 的 KVM 虚拟机管理程序,为虚拟机提供硬件模拟和虚拟化支持。
3. 启动并设置开机自启 libvirtd 服务
安装完成后,需要启动libvirtd
服务,并将其设置为开机自启,以确保系统重启后 KVM 服务能正常运行。
systemctl start libvirtd && systemctl enable libvirtd
4. 验证 KVM 模块是否加载
使用以下命令检查 KVM 模块是否已成功加载:
lsmod | grep kvm
如果输出包含kvm
和kvm_intel
(Intel CPU)或kvm_amd
(AMD CPU),则表示KVM模块已成功加载;否则,可能需要检查内核配置或重新安装KVM。
三、内核参数优化
通过优化内核参数,可以进一步提升 KVM 的性能和稳定性。
# /etc/sysctl.conf
cat >> /etc/sysctl.conf << EOF
vm.swappiness = 10
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10
net.ipv4.ip_forward = 1
EOF
sysctl -p
四、网络设置
1.桥接网络配置
桥接网络可以让虚拟机与宿主机处于同一网络中,方便进行网络通信和管理。
systemctl start NetworkManager && systemctl enable NetworkManager
# 安装netplan
dnf install systemd-networkd netplan -y
编辑一下网桥配置文件
cat > /etc/netplan/bridge-config.yaml << EOF
network:
version: 2
renderer: networkd
ethernets:
ens160:
dhcp4: no
bridges:
br0:
interfaces: [ens160] # 多网卡可以用“,”号分开
dhcp4: no
addresses: [192.168.10.10/24] # 设置静态IP地址和子网掩码
gateway4: 192.168.10.2 # 设置网关地址(如果需要)
nameservers: # 设置DNS服务器(如果需要)
addresses: [233.5.5.5, 192.168.10.2]
EOF
执行netplan apply
让网桥生效。这里可能需要一些时间,有时甚至要重启系统才能看到br0
网桥。
netplan apply &
2.SR-IOV直通(可选)
当需要将物理网卡的部分功能直接透传给虚拟机时,可以启用 SR - IOV。
# 启用SR-IOV , enp5s0f0 是你自己的网卡
echo 4 > /sys/class/net/enp5s0f0/device/sriov_numvfs
# 验证VF
lspci | grep Virtual
五、虚拟机部署
1.下载Cloud镜像
Cloud 镜像经过了优化,并安装了上云所需的工具,使用起来更加方便。
cd /root
wget https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2
2.定制化配置
安装cloud - localds
,它可以帮助我们创建包含用户数据和元数据的 ISO 镜像。
# 安装编译依赖
dnf install -y git make
# 克隆代码仓库
git clone https://github.com/canonical/cloud-utils.git
# 编译并安装
cd cloud-utils
make && make install
显示下面的内容,没有报错,说明cloud - localds
安装完成。
如果你 git 不到 cloud-utils 可以到我的资源去下载。
https://download.youkuaiyun.com/download/sido777/90426990
echo manpages=cloud-localds.1 growpart.1 resize-part-image.1 write-mime-multipart.1
manpages=cloud-localds.1 growpart.1 resize-part-image.1 write-mime-multipart.1
mkdir -p "/usr/bin" "/usr/share/doc/cloud-utils" "/usr/share/man/man1"
cd bin && install cloud-localds ec2metadata growpart mount-image-callback resize-part-image vcs-run write-mime-multipart "/usr/bin"
cd man && install cloud-localds.1 growpart.1 resize-part-image.1 write-mime-multipart.1 "/usr/share/man/man1/" --mode=0644
3.创建用户数据文件
用户数据文件通常是一个 YAML 格式的文件,用于在实例启动时执行自定义脚本或配置系统。user - data.yaml
:
cat > /mnt/user-data.yaml << EOF
#cloud-config
users:
- name: admin
passwd: 123456
lock_passwd: false
groups: [sudo]
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_pwauth: True
chpasswd:
list: |
root:123456
expire: false
ssh_pwauth: true
runcmd:
- sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
- sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
- systemctl restart sshd
EOF
4.创建元数据文件(可选)
元数据文件包含了实例的一些基本信息,如实例 ID、主机名等。以下是一个简单的示例meta - data.yaml
:
cat > /mnt/meta-data.yaml << EOF
instance-id: my-id321a6d4f
local-hostname: Vm-Cos9
EOF
5.网络设置
此文件用于配置云实例的网络设置,不同的云环境和网络模式配置方式有所不同,network - config.yaml
。
静态 IP地址配置,可参考如下示例:
cat > /mnt/network-config.yaml << EOF
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.10.100/24
gateway4: 192.168.10.2
nameservers:
addresses:
- 233.5.5.5
- 8.8.8.8
EOF
version: 2
:表明使用的是 NetworkManager 版本 2 的网络配置格式。ethernets
:定义以太网接口的配置。eth0
:指定要配置的网络接口名称。addresses
:设置静态 IP 地址及其子网掩码。gateway4
:设置 IPv4 网关地址。nameservers
:设置 DNS 服务器地址。
DHCP 配置
若使用 DHCP 自动获取 IP 地址,配置如下:
version: 2
ethernets:
eth0:
dhcp4: true
这里 dhcp4: true
表示启用 IPv4 的 DHCP 功能。
6.创建 ISO 镜像
使用 cloud-localds
命令创建包含用户数据和元数据的 ISO 镜像:
cloud-localds --network-config /mnt/network-config.yaml /mnt/config.iso /mnt/user-data.yaml /mnt/meta-data.yaml
六、启动 KVM 实例
# 创建虚拟机目录
mkdir -p /var/lib/libvirt/images/centos9
# 把刚下载的镜像复制到虚拟机目录,命名为centos9.qcow2
cp /root/CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2 /var/lib/libvirt/images/centos9/centos9.qcow2
# 复制定制 ISO 镜像到虚拟机目录。
cp /mnt/config.iso /var/lib/libvirt/images/centos9
启到 KVM 虚拟机
virt-install \
--name centos9 \
--boot cdrom,hd,menu=on \
--ram 2048 \
--vcpus 2 \
--os-variant=centos8 \
--disk /var/lib/libvirt/images/centos9/centos9.qcow2 \
--disk /var/lib/libvirt/images/centos9/config.iso,device=cdrom \
--network bridge=br0,model=virtio \
--graphics vnc,port=5901,listen=0.0.0.0 \
--console pty,target_type=serial \
--noautoconsole
显示下面的提示,虚拟机启动成功。
Starting install...
Creating domain... | 00:00:00
Domain creation completed.
查看一下虚拟机
[root@COS-9 ~]# virsh list --all
Id Name State
-------------------------
1 centos9 running
ping 一下之前定制的 IP :192.168.10.100
[root@COS-9 ~]# ping 192.168.10.100
PING 192.168.10.100 (192.168.10.100) 56(84) bytes of data.
64 bytes from 192.168.10.100: icmp_seq=1 ttl=64 time=0.843 ms
64 bytes from 192.168.10.100: icmp_seq=2 ttl=64 time=0.387 ms
64 bytes from 192.168.10.100: icmp_seq=3 ttl=64 time=0.431 ms
64 bytes from 192.168.10.100: icmp_seq=4 ttl=64 time=0.625 ms
64 bytes from 192.168.10.100: icmp_seq=5 ttl=64 time=0.845 ms
^C
--- 192.168.10.100 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4083ms
rtt min/avg/max/mdev = 0.387/0.626/0.845/0.195 ms
ssh 到虚拟机看看。ssh root@192.168.10.100
[root@COS-9 ~]# ssh root@192.168.10.100
The authenticity of host '192.168.10.100 (192.168.10.100)' can't be established.
ED25519 key fingerprint is SHA256:ujA3iRkhYLU9S91VyGJ6DeBsauCHxKaK6aVt7HUiS4Y.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.100' (ED25519) to the list of known hosts.
root@192.168.10.100's password:
Activate the web console with: systemctl enable --now cockpit.socket
[root@Vm-Cos9 ~]# ip a | grep "inet "
inet 127.0.0.1/8 scope host lo
inet 192.168.10.100/24 brd 192.168.10.255 scope global noprefixroute eth0
[root@Vm-Cos9 ~]#
七、监控
性能监控
# 安装perf工具
yum install perf -y
# 采集虚拟机性能数据
perf kvm --host --guest record -a
使用 perf report
查看综合分析报告
perf report
是最常用的查看 perf
记录数据的命令,它会以交互式界面的形式展示性能分析结果。
perf report -i perf.data.kvm
通过以上详细步骤,我们成功在 CentOS 9 系统中完成了 KVM 虚拟化环境的搭建,并创建和启动了一个 KVM 虚拟机。在这个过程中,我们从硬件环境准备开始,精心配置宿主机系统,优化内核参数,设置网络环境,部署虚拟机,并最终启动 KVM 实例。每一个步骤都紧密相连,缺一不可,共同构建了一个高效、稳定、安全的虚拟化环境。希望本文能够帮助你顺利搭建自己的 KVM 虚拟化环境,开启虚拟化的高效之旅。同时,随着虚拟化技术的不断发展,我们还可以进一步探索更多的功能和应用场景,为企业和个人的数字化转型提供更强大的支持。