Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

2013
Apr
Jul
Oct
2014
Mar
Jun
Sep
2015
Mar
Jun
Sep
2016
Mar
Jun
Sep
2017
Mar
Jun
Sep
2018
Mar
Jun
Sep

Docker

  • 言わずと知れたDocker。
  • Docker社が開発。2013年3月に初版リリース。
  • namespaceで論理リソースを隔離し、cgroupsでハードウェアリソースを隔離し、union filesystemとpivot_rootでファイルシステムを隔離し、その中でプロセスを起動。
  • Kubernetes 1.2まではコンテナランタイムはDocker一択で、内部APIで密連携していた。

rkt

  • CoreOS社開発。
  • 2014年12月に発表。
  • App Container (aka. appc)仕様のリファレンス実装。
  • stage 1を入れ替えることで様々な隔離レベルでコンテナを起動できる。(e.g. fly、kvm)
  • Kubernetesはv1.3で第二のコンテナランタイムとしてrktをサポート。

Windows Containers

  • もちろんMicrosoft開発。
  • 2015年4月に発表。
  • Windows上でWindowsのコンテナもLinuxのコンテナも動かせる。(後者はHyper-V Isolationのみ)
  • Host Compute Service (HCS)というサービスの上に実装されている。
  • この時点ではKubernetesは未サポート。

OCIとrunC

  • Open Container Initiative (OCI)は2015年6月にDocker社とCoreOS社などで発足。
  • コンテナランタイム、コンテナイメージなどの仕様を標準化。
  • runCはDocker社がOCIと同時に発表したOCIコンテナランタイム標準のリファレンス実装。
  • OCIコンテナランタイムは低レベルコンテナランタイムと呼ばれることも。

Clear Containers

  • 2015年5月に発表されたインテルによるコンテナ技術。
  • VMで各コンテナをラップして、ホストと強く隔離する。
  • OCIランタイムとしてcc-runtimeを提供。Dockerなどから使える。
  • VMで起動するOSはClear Linuxという特殊な軽量OS。
  • ハイパバイザもQEMU-KVMをカスタマイズしたqemu-lightで、VMを200msくらいで立ち上げられる。

runV (HyperContainer)

  • 2015年5月に公開された中国のチーム(のちのHyper社)によるコンテナランタイム。
  • 使用感はDockerに寄せられていて、デーモンのhyperdとクライアントのhyperctlとOCIランタイムのrunVという組み合わせ。
  • QEMU-KVMのVMで各コンテナをラップして、ホストと強く隔離する。Clear Containersと似ている。

containerd

  • Docker社が2015年12月に発表。
  • Dockerからのスピンオフ。
  • runCより上のレイヤでコンテナ管理やコンテナイメージ管理を受け持つ。
  • 2017年3月にコミュニティに寄贈され、コンテナエコシステムの成長を加速させたのはいいけど、Dockerの存在意義は相対的に下がった。

Singularity

  • Sylabs社が開発しているHigh Performance Computing (HPC)向けOCIランタイム。
  • 2016年4月にv1.0がリリース。
  • GPUや並列処理(MPI)のサポートがあって高性能で、それでいてセキュア。
  • 科学技術業界やアカデミックな世界では結構使われているらしく、現在も割と活発に更新されている。

CRIとdockershim

  • Kubernetesコミュニティが2016年12月にContainer Runtime Interface (CRI)を発表。
  • kubeletとコンテナランタイムとの間のインターフェースを標準化。 Podのライフサイクル管理やコンテナイメージ管理のためのインターフェースを定めている。
  • kubelet組み込みのdockershimとが最初のCRI実装。 dockershimはkubeletがCRI対応していないdockerdと話すためのもの。

CRI-O

  • Red Hatが2016年9月に発表したCRI準拠且つOCI対応のコンテナランタイム。
  • Red Hatはさらに、イメージレジストリと話すskopeo、イメージをビルドするBuildah、コンテナランタイムのPodmanを開発し、Docker包囲網を整備。
  • RHEL 8からRed HatビルドのDockerパッケージがなくなったので、KubernetesにはCRI-Oを使えということ?

rktlet

  • CRI-Oと同時期に開発されたCoreOS社製CRI実装。
  • 名前の通りrkt向け。
  • 2017年末位に開発止まった。

Frakti

  • CRIと同時に発表された、HyperContainer向けのCRI実装。
  • 初バージョン(v0.1)が出たのは2017年3月。
  • 2018年11月にv1.12.0でKubernetes 1.12対応して以来開発止まった模様。

Moby

  • 2017年4月にDocker社が発表したOSSプロジェクト。
  • コンテナ技術のライブラリ化とコンポーネント化を進めて再利用したり再構築しやすくし、重複開発や車輪の再発明を防ぎ、サードパーティが効率よく独自のコンテナシステムを開発できるようにすることが目的。
  • Dockerはv17.06からMobyベース。

railcar

  • Oracleが2017年6月にリリースしたOCIランタイム。
  • 機能的にはrunCの劣化版。Rustで書かれている以外に特徴はない。
  • ひと月くらいで開発止まった。

virtlet

  • Mirantisが開発するCRI実装。
  • 2017年6月に公開版としては初版のv0.7.0がリリースされた。
  • コンテナを仮想マシンでラップするわけではなく、仮想マシン上で直接ワークロードを動かすのが特徴。
  • CRI Proxyを使うことで、一つのKubernetesクラスタ上で普通のコンテナワークロードとvirtletの仮想マシンワークロードを同居させられる。

cri-containerd

  • kubeletから独立したCRI実装。(cf. dockershim)
  • 2017年9月にKubernetes 1.8とcontainerd 1.0.0とともにv1.0.0のα版がリリースされた。
  • containerdと直接話せるので、Kubernetesにはdockerdが要らなくなった。

Kata Containers

  • 2017年12月にOpenStack Foundationのもとで立ち上げられたコンテナランタイムプロジェクト。
  • Clear ContainersとrunVの後継。
  • ARMなどを含む色んなハードウェアに対応。QEMU以外のハイパバイザのサポートも進めていて、最近Firecrackerに対応した。
  • 2018年12月にIBM開発のrunqの成果を取り込み、メインフレーム(IBM Z)でもコンテナを動かせるようになった。

runhcs

  • 2017年12月にでたKubernetes 1.9がWindows Containersをベータサポート。
  • このころにはWindows ContainersもOCIに準拠し、OCIランタイムであるrunhcsを提供していた。
  • KubernetesのWindows Containers対応は、2019年3月にリリースされたKubernetes 1.14でGAになった。

criプラグイン

  • cri-containerdは正式リリース版に到達する前にcriプラグインに置き換えられ、2018年3月にでたcontainerd 1.1.0のRC版に組み込まれた。
  • これにより、containerd自体がCRIに準拠してKubernetesネイティブになった。

gVisor

  • 2018年5月にGoogleが発表したコンテナランタイム。
  • Sentryというユーザスペースのプログラムがカーネルをエミュレートし、その上でコンテナを動かす。 ホストカーネルにシステムコールがほとんど通らないのでセキュアだけど、VMではないので軽い。
  • OCIランタイムとしてrunscを提供。

Nabla Containers

  • 2018年7月にIBM Researchが発表したコンテナランタイム。
  • Unikernelの技術を利用。
  • コンテナのユーザアプリはライブラリOSとリンクされ、Solo5というハイパバイザ上で動く。 Solo5からホストOSへのシステムコールは7種しかなくてセキュア。
  • OCIランタイムとしてrunncを提供。 ただしコンテナイメージがOCI準拠じゃないので普通のコンテナは動かせない。

おわりに

  • コンテナランタイムは奥が深くて面白い。
  • 時間があれば実際に触って動かしてもみたい。時間があれば。
  • 参考文献:
    https://www.kaitoy.xyz/2019/06/15/k8s-ecosystem-container-runtimes/