4月8日、Cloud Native Computing Foundation(CNCF)のTechnical Oversight Committee(TOC)は、インキュベーションレベルのホストプロジェクトとしてCRI-Oを承認した。Red Hatが開発したCRI-Oは、Docker、rkt、Mobyの代替となる、Kubernetes用のOpen Container Initiative(OCI)コンテナランタイムである。
CRI-Oは、Kubernetes Container Runtime Interface(CRI)の標準コンポーネントを実装する最小限のランタイムを実装することで、特にKubernetesとの連携を意識して設計されている。初期のバージョンのKubernetesは、Dockerランタイムのコンテナのみをサポートしていた。チームがrktなどの新しいランタイムのサポートの追加を開始した時に、特定のコンテナランタイムからKubernetesを切り離す目的で、CRIの開発とリリースが決定されたのだ。
CRIは、プロトコルバッファとgRPC APIで構成されるプラグイン・インターフェースで、kubeletを通じて、CRIインターフェースに準拠する任意のコンテナランタイムとの通信を可能にする。その中心となるのが、イメージサービスとランタイムサービスという、2つのCRI RPCである。これらのRPCは、イメージを取得してコンテナのライフサイクルを管理する方法を定義する。
CRI-OによってKubernetesは、OCI準拠のランタイムを、Podを実行するためのコンテナランタイムとして使用することができる。Kubernetesでのコンテナ実行のみに注目しているため、 プロジェクトの範囲は以下に限定されている。
- 既存のDockerイメージフォーマットを含む、複数のイメージフォーマットのサポート
- イメージをダウンロードする複数の方法において、信頼性検証やイメージ検証などをサポート
- コンテナイメージの管理(イメージレイヤ、オーバーレイファイルシステムなどの管理)
- コンテナプロセスのライフサイクル管理
- CRI準拠に必要なモニタリングとロギング
- CRIで要求されているリソース分離
CRI-Oランタイムは、コンテナの構成や実行環境、ライフサイクルの仕様に加えて、イメージの構成やファイルシステム、インデックス、マニフェストの仕様を提供するOpen Container Initiativeのアドバンテージを活用している。コンテナイメージとストレージを管理するために、CRI-Oでは、コンテナツールを提供するオープンソースのContainersプロジェクトから、container/imageとcontainer/storageライブラリを流用している。2つのコンテナライブラリはそれぞれ、イメージレジストリからイメージを取得するためと、そのイメージ内容をコンテナファイルシステムに格納するために使用されている。
CRI-Oネットワーキングは、 Container Networking Interface (Linuxコンテナでネットワークインターフェースを構成するための仕様とライブラリを提供する、別のCNCFプロジェクト)で実装されている。コンテナは、コンテナログを収集して終了コードを記録する内部ツールのcronmonを使用して監視される。
CRI-Oプロジェクト自身が主張する大きなメリットは、Kubernetesテストへの合格が確約された、Kubernetesエコシステムにおける安定性だ。CRI-Oは、Kubernetesの各リリース用のブランチで、Kubernetesのリリースと非推奨サイクルに並行する形で開発されている。CRI-OのコードベースにはKubernetesに対するエンドツーエンドのテストが含まれている。このテストはプルリクエスト毎に実行されて、これに合格することが受け入れの条件となる。
CRI-Oは2016年、KubernetesプロジェクトがCRIを導入した後に開発が開始され、2017年にCRI-O 1.0がリリースされている。現在のCRI-Oは、runcとKata Containersをコンテナランタイムとしてサポートしているが、OCI準拠のランタイムがプラグイン可能であることが条件だ。CRI-OはOCIコンテナイメージをサポートしているので、あらゆるコンテナレジストリからプルすることができる。中核的なコントリビュータとしては、RedHat、Intel、SUSE、Hyper、IBMなどがある。
CRI-Oを導入するための情報や、コントリビューションの方法は、CRI-OのGithubプロジェクトに紹介されている。