前言

KVM是一种开源技术,可将任何现有 Linux 平台转变为功能齐全的虚拟机管理程序。它是Linux内核中的虚拟化模块,因此易于启用,并可用于以原生速度运行多个虚拟操作系统。KVM 代表基于内核的虚拟机虚拟机安装ubuntu,需要具有硬件虚拟化扩展(Intel VT 或 AMD-V)的处理器,所有现代处理器都具备该扩展。

QEMU 是一款通用的开源机器模拟器和虚拟器。当用作虚拟器(与 KVM 配合使用)时,QEMU 可通过直接在主机 CPU 上执行客户机代码来实现接近原生的性能。当用作模拟器时,它可以模拟各种架构,让您能够运行为不同平台设计的应用程序和操作系统。

24.04 KVM QEMU安装1.检查硬件虚拟化支持

我们不知道我们的 BIOS 中是否启用了虚拟化,因此要确认我们可以在我们的 24.04 终端中运行

lscpu | grep Virtualization

2.在 24.04 LTS 上安装 KVM

qemu-KVM 软件包可通过默认的 24.04 系统存储库安装,它将在我们的 Linux 系统上启用内核虚拟机功能。除此之外虚拟机安装ubuntu,我们还将安装管理虚拟机所需的其他一些软件包

sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon virt-top libguestfs-tools libosinfo-bin qemu-system tuned

3.将普通用户添加到 和 KVM 组

要管理没有 root 权限的虚拟机,将当前的 24.04 用户添加到和kvm组:

 sudo usermod -aG libvirt $(whoami) && sudo usermod -aG kvm $(whoami)

之后启用并启动 服务

sudo systemctl enable --now libvirtd

验证 KVM 模块是否已加载:将在输出中看到“ KVM ”,表明它已加载...

lsmod | grep kvm

重启系统

sudo reboot

针对运行 KVM 来宾进行优化

在安装 KVM 时,我们还安装了一个名为“tuned”的软件包。此工具提供预配置的配置文件,可根据需要优化主机或客户机。

启用 Tuned 服务:

sudo systemctl enable --now tuned

默认情况下,平衡配置文件将在 Tuned 上激活,但由于我们想要在 Linux 主机上运行虚拟机,我们可以选择一个优化主机以运行虚拟机的配置文件,下面是执行此操作的命令:

sudo tuned-adm profile virtual-host

验证相同

tuned-adm active

列出所有可用的配置文件

tuned-adm list

在 24.04 上创建桥接网络

默认情况下,NAT 配置为在 KVM 客户机上使用,如果只在客户虚拟机上浏览互联网,但无法连接或访问主机网络上可用的其他系统,那么它就很好了。即使是在客户操作系统上运行的 Web 服务器和其他 Web 服务也无法从主机系统外部访问。因此,我们将创建一个 网络,允许客户虚拟机直接从我们主机系统可用的同一 DHCP 服务器获取 IP 地址。

通过 ,客户虚拟机将像主机系统一样在物理网络上可用,因此配置 网络非常重要,下面是需要遵循的命令:

sudo virsh net-list --all

现在,找到主机用于连接外界或网络的网络适配器或接口:

sudo apt  install network-manager
sudo nmcli device status

创建一个能够与虚拟机一起使用的桥接接口。 “ Br0 ”是分配给桥接口的名称。

sudo nmcli connection add type bridge con-name br0 ifname br0

添加物理网卡(例如)到桥接

sudo nmcli connection add type ethernet slave-type bridge con-name ens9f0-br0 ifname ens9f0 master br0

配置桥接网络

方式 1:使用 DHCP 获取 IP


sudo nmcli connection modify br0 ipv4.method auto
sudo nmcli connection modify br0 ipv6.method auto

方式 2:手动设置静态 IP


sudo nmcli connection modify br0 ipv4.addresses 10.200.8.170/22
sudo nmcli connection modify br0 ipv4.gateway 10.200.11.254
sudo nmcli connection modify br0 ipv4.dns "8.8.8.8 114.114.114.114"
sudo nmcli connection modify br0 ipv4.method manual

启用桥接网络

sudo vim /etc/NetworkManager/NetworkManager.conf 添加 managed=true
sudo systemctl restart NetworkManager

sudo nmcli connection up ens9f0-br0
sudo nmcli connection up br0
sudo nmcli connection reload

然后确认br0是否成功启用:

ip a show br0

如果br0获取了正确的 IP 地址,说明桥接网络已成功。

持久化桥接网络

如果br0断电重启后失效,需要设置其为开机自启:

sudo nmcli connection modify br0 connection.autoconnect yes

修改 KVM 虚拟机的存储路径

KVM 默认将虚拟机磁盘镜像存储在/var/lib///目录下。更改存储路径将其改为/data/kvm-/,

先创建目标存储目录:

sudo mkdir -p /data/kvm-images
sudo chmod 777 /data/kvm-images

添加新的存储池

virsh pool-define-as new_pool dir --target /data/kvm-images
virsh pool-build new_pool
virsh pool-start new_pool
virsh pool-autostart new_pool

其中:

执行virsh pool-list --all确保新的存储池已经创建。

设置新建虚拟机的默认存储路径

virsh pool-autostart new_pool
virsh pool-list --all
然后在创建虚拟机时,指定存储池:
virt-install --name my-vm --disk pool=new_pool,size=20 ...

在KVM上创建虚拟机

在 KVM 上创建虚拟机有两种图形方式,一种是使用 ,另一种是借助 。

在 Linux 操作系统上运行给定的命令来安装虚拟管理器:

sudo apt install virt-manager virt-viewer

使用命令创建虚拟机

先创建虚拟磁盘

qemu-img create -f qcow2 /data/kvm-images/kmaster3.qcow2 1000G

virt-install 
  --name harbor
  --memory 32768
  --vcpus 8
  --disk path=/data/kvm-images/harbor.qcow2,size=1000
  --os-variant ubuntu22.04
  --cdrom /var/lib/libvirt/images/ubuntu-22.04.5-live-server-amd64.iso
  --network bridge=br0
  --graphics vnc,listen=0.0.0.0
  --console pty,target_type=serial
  --noautoconsole

注:在 22.04 中,cloud-init会覆盖配置。

需要禁用cloud-init的网络管理功能 否则每次更改静态ip后都会变成dhcp,方法如下:

sudo touch /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg 
network: {config: disabled}

systemctl restart systemd-networkd
netplan apply

创建虚机后初始化系统脚本

#!/bin/bash
set -e

echo "==== Ubuntu 24.04 初始化脚本 ===="

# 1. 换阿里源
echo "==== 更换阿里APT源 ===="
sed -i.bak 's|http://.*.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list
apt update && apt -y upgrade

# 2. 安装常用工具
echo "==== 安装常用工具 ===="
apt install -y vim curl wget git net-tools iproute2 lsof htop unzip tar chrony bash-completion build-essential openssh-server

# 3. 设置时区和时间同步(使用 chrony)
echo "==== 设置时区为上海 ===="
timedatectl set-timezone Asia/Shanghai

echo "==== 启用 Chrony 时间同步 ===="
systemctl enable --now chrony.service

# 4. 关闭 swap (可选)
echo "==== 关闭 swap ===="
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

# 5. 关闭防火墙 (可选)
echo "==== 关闭 ufw 防火墙 ===="
ufw disable

# 6. 配置 ulimit
echo "==== 配置 ulimit ===="
cat >> /etc/security/limits.conf << EOF
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 65535
* hard nproc 65535
EOF

# 7. 优化内核参数
echo "==== 优化内核参数 ===="
cat > /etc/sysctl.d/99-custom.conf << EOF
fs.file-max = 1048576
net.core.somaxconn = 1024
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 10
net.ipv4.ip_local_port_range = 1024 65000
EOF
sysctl --system

# 8. 开启 BBR
echo "==== 开启 BBR ===="
modprobe tcp_bbr
echo "tcp_bbr" > /etc/modules-load.d/bbr.conf
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
sysctl -p

# 9. 禁止 root 用户使用密码登录
echo "==== 禁止 root 用户使用密码登录,仅允许密钥 ===="
sed -i 's/^#?PermitRootLogin .*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
systemctl restart ssh.service

# 10. 自动补全
echo "==== 开启 bash 自动补全 ===="
echo "source /etc/profile.d/bash_completion.sh" >> ~/.bashrc

# 11. 最后检查
echo "==== 系统信息 ===="
uname -a
lsb_release -a
ulimit -n
sysctl net.ipv4.tcp_congestion_control

echo "==== 时间同步状态 ===="
chronyc tracking

echo "==== SSH 状态 ===="
systemctl status ssh.service | grep Active

echo "==== 初始化完成 ====

创建win虚机

virt-install 
  --name windows_server_2019
  --ram 16384
  --vcpus 8  
  --virt-type kvm  
  --os-variant=generic
  --description windows_server_2019  
  --network bridge=br0,model=virtio  
  --graphics vnc,listen=0.0.0.0  
  --disk path=/data/kvm-images/winserver_2019.qcow2,size=300,format=qcow2,bus=virtio
  --disk path=/data/kvm-images/virtio-win-0.1.266.iso
  --cdrom=/data/kvm-images/cn_windows_server_2019_updated_jan_2020_x64_dvd_4bbe2c37.iso
  --noautoconsole
  --console pty,target_type=serial
  --autostart

开启虚拟机自动启动

sudo virsh autostart kmaster3
virsh list --autostart --all   #所有虚拟机开启自动启动

虚拟机备份方案

virt-是一个用于KVM 虚拟机备份的轻量级工具,基于,支持:

系统环境要求:三、安装 virt-方式一:使用 pip 安装(推荐)


sudo apt install python3-pip -y
pip3 install virt-backup

方式二:从源码安装


git clone https://github.com/borvi/virt-backup
cd virt-backup
pip3 install .

四、配置文件说明默认配置文件路径:


~/.config/virt-backup/virt-backup.conf

示例配置(virt-.conf):


[default]
backup_path = /backup/vms       # 备份存放目录
log_file = /var/log/virt-backup.log
max_workers = 2                  # 并发备份线程数

[vm:centos7]
disks = vda                      # 仅备份指定磁盘
type = incremental              # 备份类型:full/incremental
mode = snapshot                 # 备份模式:snapshot/stop
retention = 7                   # 保留最近 7 个备份

[vm:ubuntu20]
type = full
mode = stop

五、执行备份命令


virt-backup backup

也可以指定配置文件:


virt-backup -c /path/to/virt-backup.conf backup

六、定期备份()


0 1 * * * /usr/local/bin/virt-backup backup >> /var/log/virt-backup-cron.log 2>&1

七、增量备份说明

增量备份依赖于qcow2磁盘格式 +快照机制。

要求:

要做增量备份,确认 VM 镜像格式:


qemu-img info /var/lib/libvirt/images/centos7.qcow2

八、恢复备份

virt- 本身不提供还原命令,但其本质是生成 VM 磁盘的快照副本,可用virsh手动恢复:

恢复步骤:

1. 停止虚拟机:


virsh shutdown centos7

2. 替换磁盘镜像:


cp /backup/vms/centos7/backup-2024-04-08T01-00-00.qcow2 /var/lib/libvirt/images/centos7.qcow2

3. 启动虚拟机:


virsh start centos7

也可以使用virt-导入恢复的磁盘镜像。


限时特惠:
本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情

站长微信:Jiucxh

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注