keelOS とは
keelOS は、家庭や小規模オフィスにある 1 台のサーバーのための仮想化システムです。NAS、ルーター、Windows デスクトップ、数台の Linux サーバーを、それぞれ仮想マシンとして同じ 1 台のマシンで動かせます。FreeBSD、bhyve、OpenZFS をベースにしていて、Web、コマンドライン、HTTPS API で管理します。
他の仮想化システムとの一番の違いは、ホストシステムをアップグレードしたり再起動したりしても、仮想マシンをシャットダウンしなくてよいことです。仮想マシンは約 25 秒だけ一時停止し、そのまま再開します。TCP 接続も切れません。
仕組み
keelOS のホストは 3 つの層でできています。
| 層 | 内容 | ホスト再起動時 |
|---|---|---|
| hyp | keel のハイパーバイザー。起動時に UEFI が最初に読み込む、約 100 KB の小さなプログラム | メモリに残り続け、仮想マシンのメモリ、vCPU の状態、IOMMU を預かる |
| ホストシステム(root) | FreeBSD。ドライバー、ZFS、ネットワーク、bhyve のデバイスモデル、管理プログラム keel を担当する | 再起動する。ファームウェアの自己診断は通らない |
| 仮想マシン | 皆さんがインストールした各種 OS | 一時停止し、新しいホストが起動したあとに再開する |
ホストシステムは読み取り専用のイメージです。基本システムはメモリ上で動き、/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 などの古い OS(SeaBIOS と OS 標準のドライバーを使用)、Linux、FreeBSD などの BSD、各種ルーター OS や NAS OS。仮想マシンの管理を参照してください。
- 画面の表示:Web 上のグラフィックコンソールとシリアルコンソール。ホストに直接つないだモニターでは、Ctrl-Alt-F2~F12 で各仮想マシンに切り替えられます。どの RDP クライアントからでも仮想マシンの画面に直接接続でき、仮想マシン内には何もインストールする必要がありません。コンソールとリモートデスクトップを参照してください。
- デバイスパススルー:PCIe デバイス、ディスクリートグラフィックス、Intel 内蔵 GPU、SR-IOV NIC の VF。パススルーしたデバイスは reload をまたいでも通常どおり動きます。デバイスパススルーを参照してください。
- ストレージ:ミラーと raidz に対応した ZFS ストレージプール。複数のプールを持てます。仮想マシンのディスクは virtio-blk、NVMe、AHCI のいずれかで渡されます。ストレージを参照してください。
- ネットワーク:仮想スイッチと VLAN。物理ポートを仮想マシンと共用できます。ネットワークを参照してください。
- アップグレード:起動パーティションには A と B の 2 つのスロットがあります。新しいバージョンは動作していないほうのスロットに書き込み、試用してから確定します。いつでも元に戻せます。アップグレードと再起動を参照してください。
- スナップショットと移行:スナップショットは仮想マシンのすべてのディスク、設定、UEFI 変数を一度に保存します。仮想マシンは別の keelOS ホストへコールド移行できます。スナップショット、バックアップ、移行を参照してください。
- 管理ポート:IPMI のないマシンでは、keelRM がホストから独立した管理用 Web ページを提供します。ホストが固まったときや reload 中でも、画面の確認やリセットができます。keelRM 管理ポートを参照してください。
- 管理方法:Web(中国語、英語、日本語)、コマンドライン
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 では扱いません。対象は、個人や小規模オフィスの 1 台のマシンです。
よく出てくる用語
| 用語 | 意味 |
|---|---|
| ホスト / root | keelOS をインストールしたマシン、およびその上で hyp の下で動く FreeBSD ホストシステム |
| hyp | keel のハイパーバイザー。メモリに常駐し、ホスト再起動の影響を受けない |
| 仮想マシン / guest | ホスト上で動く各 OS |
| reload | ファームウェアを通らないホストシステムの再起動。仮想マシンは一時停止するだけ |
| スロット(A、B) | 起動パーティション内の 2 つのシステムバージョン。一方が稼働し、もう一方に新バージョンを書き込む |
| 起動ディスク | keelOS をインストールしたディスク。先頭が起動パーティション |
| ストレージプール | ZFS プール。仮想マシンのディスク、スナップショット、ISO を置く。既定のプール名は zones |
| keel | keelOS の管理プログラム。Web、API、コマンドライン keel はすべてこれ |
| トークン | API にアクセスするための認証情報。権限を限定できる |