跳到主要内容

系统设置

系统设置是管理员专属的全局配置中心,负责平台运行参数、宿主机资源调优和安全维护策略的统一管理。通过科学的配置分层,管理员可以精准控制平台的每一个运行细节。

功能架构

配置流向

访问权限

系统设置页面路由为 /settings,仅管理员角色可访问。所有配置保存后立即生效并持久化到数据库,重启后自动恢复。

基础设置

基础设置涵盖站点展示、端口分配和服务信息三个核心模块,是平台运行的基石配置。

站点展示

配置项字段名限制环境变量说明
网站标题site_title最大 60 字符KVM_SITE_TITLE用于登录页、侧边栏和浏览器标签页
访问链接public_base_url-KVM_PUBLIC_BASE_URL邮件跳转链接的基准地址
环境变量覆盖

当环境变量 KVM_SITE_TITLE 存在时,会覆盖数据库中的配置值。建议在生产环境中通过环境变量统一管理关键配置。

端口自动分配

端口转发功能在自动分配端口时,会从配置的范围内选取可用端口。

配置项字段名范围环境变量
起始端口auto_port_start1024-65535KVM_AUTO_PORT_START
结束端口auto_port_end1024-65535KVM_AUTO_PORT_END

服务信息

配置项字段名环境变量说明
服务端口portKVM_PORT只读显示,需通过环境变量修改后重启生效

存储与网络

存储与网络配置定义了平台的存储架构和网络拓扑,是虚拟机运行的基础设施层。

存储路径

配置项字段名环境变量说明
模板目录template_dirKVM_TEMPLATE_DIR存储虚拟机模板文件
模板导入临时目录template_import_dirKVM_TEMPLATE_IMPORT_DIR建议与模板目录同盘,避免占满 /tmp
模板导出目录template_export_dirKVM_TEMPLATE_EXPORT_DIR建议与模板目录同盘
克隆磁盘目录clone_dirKVM_CLONE_DIR虚拟机磁盘克隆的目标位置
ISO 存放位置iso_dirKVM_ISO_DIR创建 VM 和救援系统时读取此目录
端口转发持久化目录port_forward_dirKVM_PORTFORWARD_DIR只读,仅通过环境变量修改

网络设置

配置项字段名环境变量说明
默认网络default_networkKVM_DEFAULT_NETWORK保留给历史配置,新平台默认 OVS
网络后端network_backendKVM_NETWORK_BACKEND只读,当前仅支持 OVS
OVS 网桥ovs_bridgeKVM_OVS_BRIDGEVM 接入的网桥名称
OVS 出口网卡ovs_uplinkKVM_OVS_UPLINK留空自动检测默认路由网卡
网段前缀subnet_prefixKVM_SUBNET_PREFIX子网地址前缀,如 192.168.122
DHCP 起始ovs_dhcp_startKVM_OVS_DHCP_START留空时按网段前缀使用 .2
DHCP 结束ovs_dhcp_endKVM_OVS_DHCP_END留空时按网段前缀使用 .254
外网网卡external_nicKVM_EXTERNAL_NIC端口转发使用的外网网卡
公网 IPhost_ipKVM_HOST_IP留空自动检测,可手动固定

全局带宽限制

全局带宽限制应用于所有非轻量云虚拟机及 VPC 交换机,所有运行中的 VM 均分总带宽。

配置项字段名范围环境变量
下行总带宽max_burst_inbound0-100000 MbpsKVM_MAX_BURST_INBOUND
上行总带宽max_burst_outbound0-100000 MbpsKVM_MAX_BURST_OUTBOUND
带宽计算

有效带宽 = 配置值 - 5Mbps(保留缓冲)。配置 0 表示不限制。保存后立即生效,每台运行中 VM 设置全量有效带宽为上限。

默认磁盘 IOPS 限制

此设置仅作为新建虚拟机时的默认值,已存在的 VM 需在编辑页面单独配置。

配置项字段名环境变量
默认总 IOPSdefault_disk_iops_totalKVM_DEFAULT_DISK_IOPS_TOTAL
默认读 IOPSdefault_disk_iops_readKVM_DEFAULT_DISK_IOPS_READ
默认写 IOPSdefault_disk_iops_writeKVM_DEFAULT_DISK_IOPS_WRITE

宿主机设置

宿主机设置是针对底层虚拟化平台的深度调优,涵盖内存优化和虚拟化兼容性两大领域。

KSM 内存去重

KSM(Kernel Same-page Merging)是 Linux 内核级别的内存页去重技术,通过扫描匿名内存页,将内容完全相同的页面合并为同一份物理内存。

挡位说明

挡位代码扫描策略适用场景
关闭off不扫描临时排障或 CPU 压力优先
保守conservative低频扫描内存压力不高的虚拟化宿主机
均衡balanced中频扫描推荐挡位,平衡内存节省与 CPU 开销
积极aggressive高频扫描VM 密度较高,希望快速释放内存
极致extreme最大化扫描内存非常紧张的纯虚拟化宿主机

运行参数

参数说明
runKSM 运行状态(0/1)
pages_to_scan每次扫描的页面数
sleep_millisecs扫描间隔(毫秒)
merge_across_nodes是否跨 NUMA 节点合并
use_zero_pages是否启用零页合并
smart_scan是否启用智能扫描

去重统计

指标说明
pages_shared已共享的物理页面数
pages_sharing正在共享的页面数(节省的内存)
pages_unshared未共享的页面数
pages_scanned已扫描的页面数
full_scans完整扫描次数
持久化机制

KSM 配置持久化文件路径为 /etc/kvm-console/ksm.env,通过 kvm-console-ksm.service 在宿主机重启后自动恢复。

zRAM 压缩内存

zRAM 是基于压缩的虚拟内存交换设备,将不常用的内存页压缩存储在 RAM 中,避免磁盘 I/O 开销。

挡位说明

挡位代码容量比例最大容量适用场景
关闭off--排障或内存压力很低
保守conservative10%16 GiB优先降低压缩开销
均衡balanced20%32 GiB推荐挡位,纯虚拟化宿主机默认
积极aggressive35%64 GiBVM 密度高,优先压缩内存
极致extreme50%128 GiB内存非常紧张,接受更多 CPU 开销

运行参数

参数说明
设备zRAM 块设备名称
容量逻辑容量(MB)
已用已使用的压缩空间(MB)
算法压缩算法(如 lzo、lz4、zstd)
优先级swap 优先级
持久化机制

zRAM 配置持久化文件路径为 /etc/kvm-console/zram.env,通过 kvm-console-zram.service 在宿主机重启后自动恢复。

KVM Unrestricted Guest

KVM Unrestricted Guest 是 Intel KVM 的硬件辅助能力,允许虚拟机更直接地运行早期启动阶段代码。

VMware 嵌套虚拟化

在部分 VMware/ESXi 嵌套虚拟化环境中,该能力可能触发 QEMU 启动报错 KVM: entry failed, hardware error 0x7。遇到此问题时,可临时禁用此参数作为兼容性绕过。

状态说明
运行时状态当前 KVM 模块的实际配置
持久配置写入配置文件的值
待重载配置已保存但需重载模块或重启生效

调度与高级

调度与高级设置提供了智能化的资源调度和运维辅助功能,是平台自动化能力的核心。

动态内存调度

动态内存调度器根据 VM 的内存使用率自动调整 balloon 内存分配,实现内存资源的动态平衡。

配置项字段名范围说明
启用自动调度dynamic_memory_scheduler_enabled布尔仅对已启用动态内存的 VM 生效
调度间隔dynamic_memory_interval_seconds10-3600 秒调度器执行周期
调整冷却dynamic_memory_cooldown_seconds30-7200 秒同一 VM 两次调整的最短间隔
宿主保留内存dynamic_memory_host_reserve_mb512-1048576 MB宿主机保留的固定内存量
宿主保留比例dynamic_memory_host_reserve_percent5-80%宿主机保留的内存比例
增长阈值dynamic_memory_increase_threshold_percent5-50%可用内存低于此值时尝试增长
回收阈值dynamic_memory_reclaim_threshold_percent10-90%空闲内存高于此值时考虑回收
首次观察期dynamic_memory_observation_hours0-168 小时观察期内不自动回收到启动内存以下
事件保留时长scheduler_event_retention_hours1-2160 小时调度事件的历史保留时间
最终保留值

宿主机最终保留内存取固定值与比例值中的较大者,确保宿主机始终有足够的内存余量。

端口转发 HTTP 探测

HTTP 探测功能自动检测端口转发规则中的明文 HTTP 服务,发现未命中白名单的服务时自动封禁,提升安全性。

配置项字段名范围环境变量
启用探测port_forward_http_probe_enabled布尔KVM_PORT_FORWARD_HTTP_PROBE_ENABLED
探测间隔port_forward_http_probe_interval_minutes5-1440 分钟KVM_PORT_FORWARD_HTTP_PROBE_INTERVAL_MINUTES
连接超时port_forward_http_probe_timeout_seconds1-30 秒KVM_PORT_FORWARD_HTTP_PROBE_TIMEOUT_SECONDS

批量克隆

配置项字段名范围环境变量说明
最大同时克隆数batch_clone_max_concurrency1-100KVM_BATCH_CLONE_MAX_CONCURRENCY设为 1 时退化为顺序克隆

救援系统

救援系统 ISO 用于虚拟机无法正常启动时的紧急恢复,支持从 ISO 存放位置中选择。

配置项字段名环境变量说明
救援系统 ISOrescue_isoKVM_RESCUE_ISO支持模糊搜索的下拉选择

CPU 亲和性预设

CPU 亲和性预设允许管理员定义常用的 CPU 核心绑定方案,方便在虚拟机配置中快速选择。

操作说明
添加预设点击"添加预设"按钮,输入名称和核心值(如 0-3)
保存预设点击"保存预设"按钮,仅管理员可操作
重置预设点击"重置"按钮,恢复到上次保存的状态

安全与维护

安全与维护模块提供了邮件配置、安全验证和系统维护的完整解决方案。

邮件配置

SMTP 配置用于平台的邮件发送功能,包括邮箱绑定、邀请注册和密码找回等场景。

配置项字段名环境变量说明
SMTP 主机smtp_hostKVM_SMTP_HOST如 smtp.qq.com
SMTP 端口smtp_portKVM_SMTP_PORT范围 1-65535
SMTP 用户名smtp_usernameKVM_SMTP_USERNAME通常为发件邮箱账号
SMTP 密码smtp_passwordKVM_SMTP_PASSWORD_ENC留空保持当前密码不变
发件人名称smtp_from_nameKVM_SMTP_FROM_NAME邮件中显示的发件人名称
发件邮箱smtp_from_addressKVM_SMTP_FROM_ADDRESSno-reply@example.com
加密方式smtp_securityKVM_SMTP_SECURITYnone / ssl / starttls
超时秒数smtp_timeout_secondsKVM_SMTP_TIMEOUT_SECONDS范围 5-120 秒
密码安全

SMTP 密码采用加密存储,界面显示为已配置状态。留空不会覆盖现有密码,环境变量 KVM_SMTP_PASSWORD_ENC 存储的是加密后的密文。

安全验证

配置项字段名环境变量说明
开发环境模式development_modeKVM_DEVELOPMENT_MODE绕过二段验证、首次强制绑定和高风险操作验证
安全警告

开发环境模式仅建议在开发调试环境使用,生产环境务必关闭。启用后会降低平台的整体安全性。

维护模式

维护模式用于系统升级、硬件维护等场景,启用后会自动执行一系列安全操作。

配置项字段名范围环境变量说明
启用维护模式maintenance_mode布尔KVM_MAINTENANCE_MODE启用后需二次验证
关机等待时间maintenance_vm_shutdown_timeout_seconds5-3600 秒KVM_MAINTENANCE_VM_SHUTDOWN_TIMEOUT优雅关机超时后强制断电
维护服务列表maintenance_service_units文本KVM_MAINTENANCE_SERVICE_UNITS每行一个 systemd unit
维护模式影响

启用维护模式后,系统会异步关闭所有运行中的虚拟机,并停用配置中的宿主机服务。维护模式期间将阻止虚拟机启动。kvm-console.service 即使加入列表也会被自动跳过,确保面板可用。

实现原理

配置持久化

  • 运行时生效:所有配置保存后立即应用到运行中的服务
  • 数据库优先:配置优先从数据库读取,确保持久化
  • 环境变量兜底:当数据库配置为空时,从环境变量加载
  • 自动同步:配置变更后自动同步到 .env 文件,确保重启一致性

API 接口

接口方法说明
/settingsGET获取系统设置
/settingsPUT更新系统设置
/settings/smtp/testPOST测试 SMTP 发信
/host/ksmGET获取 KSM 状态
/host/ksmPUT更新 KSM 配置
/host/zramGET获取 zRAM 状态
/host/zramPUT更新 zRAM 配置
/host/kvm-intel-unrestricted-guestGET获取 KVM Unrestricted Guest 状态
/host/kvm-intel-unrestricted-guestPUT更新 KVM Unrestricted Guest 配置
/cpu-affinity-presetsGET获取 CPU 亲和性预设
/settings/cpu-affinity-presetsPUT保存 CPU 亲和性预设