crun
Red HatのGiuseppe ScrivanoによるC言語実装のOCI(Open Container Initiative)ランタイム仕様準拠のコンテナランタイム。標準的な参照実装であるGo製のruncと機能的に相互置換可能でありながら、バイナリサイズ・起動速度・メモリ消費で優位性を持つ。 #container
runcとの違い
- 実装言語: C(crun) vs Go(runc)。fork/execモデル中心の設計にはCの方が適しているとされる
- バイナリサイズ: crunは
-Osコンパイルで約300KB、runcの約15MBに対して約1/50 - 速度・メモリ: 100コンテナを順次起動するテストでruncの約2倍の速度、メモリ使用量も大幅に少ない
- 両者ともOCIランタイム仕様準拠のため、コンテナエンジン側からは相互置換可能
krunハンドラ
アノテーションrun.oci.handler=krunを指定すると、crunはlibkrun.soをロードし、libkrun経由でコンテナをmicroVM内で起動する(wasmハンドラと並ぶ、crunがサポートする代表的な特殊ハンドラの一つ)。これによりconfidential containers(機密コンピューティング)用途で、コンテナ単位の強い隔離を得られる。
位置づけ
Podman・CRI-O等のコンテナエンジンから呼び出される、低レベルなOCIランタイム実装の一つ。Kata ContainersがVM全体でコンテナ環境を包む「コンテナ環境ごとVM化」アプローチなのに対し、crun+krunはOCIランタイムそのものを差し替えることでコンテナ単位のVM分離を実現する点で設計が異なる。
出典
- An introduction to crun, a fast and low-memory footprint container runtime (Red Hat)
- crun/crun.1.md at main · containers/crun
- crun/src/libcrun/handlers/krun.c at main · containers/crun
- 7.2. crun コンテナーランタイム (Red Hat Documentation)