English日本語

文档 · 1.0

什么是 keelOS

keelOS 是给家里或小办公室那一台服务器用的虚拟化系统。NAS、路由器、Windows 桌面、几台 Linux 服务器各跑在一台虚拟机里,都放在同一台机器上。它基于 FreeBSD、bhyve 和 OpenZFS,用网页、命令行或 HTTPS API 管理。

和别的虚拟化系统最大的不同是:宿主系统升级、重启的时候,虚拟机不用关机。它们暂停大约 25 秒,然后原地继续运行,TCP 连接不断。

它是怎么做到的

一台 keelOS 主机分三层:

层 是什么 宿主重启时
hyp keel 的 hypervisor,开机时由 UEFI 最先加载,只有大约 100 KB 一直留在内存里,保管虚拟机的内存、vCPU 状态和 IOMMU
宿主系统(root) FreeBSD,负责驱动、ZFS、网络、bhyve 的设备模型和管理程序 keel 重新启动,不经过固件自检
虚拟机 你装的各种系统 暂停,新的宿主起来以后恢复运行

宿主系统是一个只读的镜像:基础系统在内存里运行,/usr 从启动盘读。宿主重启时不必再经过 BIOS/UEFI 那一遍自检,从开始重启到可以登录大约 50 秒。这种不经过固件的宿主重启,在 keelOS 里叫 reload,界面上也这么叫。

reload 期间:

  • 虚拟机暂停 24–26 秒(我们在开发服务器上实测,虚拟机里同时跑着 ping、iperf 和 fio),恢复后磁盘数据完好,时钟会被校正。
  • 直通给虚拟机的设备(硬盘控制器、NVMe 盘、显卡)照常工作,因为 IOMMU 由 hyp 管,不随宿主重启。
  • 每台虚拟机可以选 reload 时挂起再恢复(默认)或关机,见虚拟机管理。

只有 hyp 本身升级时,才需要整机经过固件重启,这时虚拟机要关机。hyp 做得很小,就是为了让这种情况尽量少,见升级与重启。

想了解背后的细节,可以读文章《家用系统 SLA 达到 99.99% 很难么?》。

1.0 能做什么

  • 虚拟机:Windows 11(虚拟 TPM 2.0 和 Secure Boot,不用绕过检查)、Windows 10 和 Server、Windows XP/2003/7 这类老系统(用 SeaBIOS 和系统自带的驱动)、Linux、FreeBSD 和其他 BSD、各种路由系统和 NAS 系统。见虚拟机管理。
  • 看屏幕:网页里的图形控制台和串口控制台;主机自己接的显示器,用 Ctrl-Alt-F2 到 F12 切换到各台虚拟机;任何 RDP 客户端都能直接连到虚拟机的屏幕,虚拟机里不用装任何东西。见控制台与远程桌面。
  • 设备直通:PCIe 设备、独立显卡、Intel 核显、SR-IOV 网卡的 VF,直通的设备跨 reload 照常工作。见设备直通。
  • 存储:ZFS 存储池,支持镜像和 raidz,可以有多个池。虚拟机的磁盘以 virtio-blk、NVMe 或 AHCI 的形式给虚拟机。见存储。
  • 网络:虚拟交换机、VLAN,物理网口可以和虚拟机共用。见网络。
  • 升级:启动分区里有 A、B 两个槽位,新版本写进不在运行的那个槽,先试用、再确认,随时可以切回去。见升级与重启。
  • 快照和迁移:快照一次拍下虚拟机的所有磁盘、配置和 UEFI 变量;虚拟机可以冷迁移到另一台 keelOS 主机。见快照、备份与迁移。
  • 管理口:没有 IPMI 的机器,keelRM 给你一个独立于宿主的管理网页,宿主卡住、reload 时也能看屏幕、复位。见keelRM 管理口。
  • 管理方式:网页(中文、英文、日文)、命令行 keel、HTTPS API。令牌可以限定权限,写操作进审计日志。见账户、令牌与权限、命令行 keel、HTTP API。

keelNAS、keelAuth、keelMGR 和 kRDPclient 客户端也随 1.0 提供,它们的文档之后补上。

1.0 不做什么

  • AMD CPU:1.0 需要 Intel CPU,AMD 的支持还在开发中。见硬件要求。
  • 热迁移(带着内存把运行中的虚拟机搬到另一台主机)和 PCI 热插拔:排在 1.0 之后。1.0 能做的是冷迁移。
  • 性能调优:1.0 的重点是稳定,性能是 2.0 的目标。
  • 多租户、SDN、自动调度、共享存储:keelOS 不打算做。它的对象是个人和小办公室的那一台机器。

几个常见的词

词 意思
主机 / 宿主 / root 装了 keelOS 的那台机器,以及在 hyp 上运行的 FreeBSD 宿主系统
hyp keel 的 hypervisor,常驻内存,宿主重启时不动
虚拟机 / guest 跑在主机上的各个系统
reload 宿主系统重启而不经过固件;虚拟机只暂停
槽位(A、B) 启动分区里的两个系统版本,一个在运行,另一个用来装新版本
启动盘 装 keelOS 的那块盘,开头是启动分区
存储池 ZFS 池,放虚拟机的磁盘、快照和 ISO;默认的池叫 zones
keel keelOS 的管理程序:网页、API 和命令行 keel 都是它
令牌 访问 API 用的凭据,可以限定权限