Kubernetes対応コンテナランタイム「containerd 1.1」正式リリース。CRIにネイティブ対応し、Dockerより軽量で高速な動作を実現
コンテナ型仮想化を実現するDockerは、その内部にコンテナランタイムとしてcontainerdと呼ばれるソフトウェアを内蔵しています。
このcontainerdはもともとDocker社によって開発されてきましたが、標準的なランタイム実装を実現するために、Docker社から中立的な団体であるCloud Native Computing Foundationに(CNCF)に、2017年3月に寄贈されました。
containerdは現在もDocker内部のランタイムとして使われています。事実上の標準コンテナランタイムといえます。
そのcontainerdのバージョン1.1が正式にリリースされ、Kubernetesにネイティブに対応したことが発表されました。
containerd 1.1はCRIにネイティブ対応
一般にKubernetesで構築するクラスタでは、Dockerを用いてコンテナを実行します。このとき、KubernetesとDockerのあいだでは、Kubernetesで標準化されたAPIであるCRI(Container Runtime Interface)によってやりとりが行われます。
ただしDockerは現時点でCRIにネイティブには対応していないため、KubernetsとDockerは「dockershim」と呼ばれるブリッジを介してやりとりが行われています。
2017年12月にCNCFの下でバージョン1.0に到達したcontainerdは、Kubernetesへの対応も進められていましたが、バージョン1.0の段階ではcontainerdもCRIにネイティブには対応しておらず、Kubenretesでコンテナランタイムとしてcontainerdを使う場合には、CRI-Containerdをブリッジとしていました。
そして今回正式版としてリリースされたされたcontainerd 1.1では、containerdにCRIプラグインが組み込まれたことで、CRIにネイティブに対応。直接Kubernetesとやりとりできるようになりました。
containerd 1.1では使用メモリもCPU負荷もより小さく
Kubernetesにネイティブに統合可能なcontainerdは、ブリッジで連係するDockerと比較するとより軽量で動作も高速になっていることがCNCFによって示されました。
下記はCPUへの負荷を示したグラフです。赤いマーカーで示されたcontainerd 1.1利用時のほうが、kubernetes側、コンテナランタイム側のいずれもCPU負荷が低くなっています。
メモリ消費量に関しても同様で、赤いマーカーで示されたcontainerdのほうがメモリ使用量が小さくなっていることが分かります。
次期Dockerにはcontainerd 1.1搭載へ
containerdがKubernetesとネイティブにやりとりできるようになるからといって、Dockerが不要になるわけではありません。Dockerコマンドなどを用いたコンテナイメージのさまざまな操作を行うには、コンテナランタイムとなるcontainerdだけでは足りないからです。
そしてDockerがcontainerdを含むということは、当然、次のバージョンのDockerにはこのcontainerd 1.1が搭載される見通しとなっています。これによって、DockerとKubernetesを組み合わせた場合にもKubernetesとcontaneridはCRIを通じて直接やりとりすることになり、軽量な実装の利点を得ることが可能になります。
参考
関連記事
- コンテナ実装の一本化へ向かうか。DockerとCoreOSがそれぞれのコンテナ実装をCloud Native Computing Foundationへ寄贈すると協同提案 - Publickey
- 事実上の標準コンテナランタイム「containerd」がバージョン1.0に到達 - Publickey
- Dockerが「Moby Project」を発表。すべてをコンテナで組み立てる世界を目指す。DockerCon 2017 - Publickey
カテゴリ Docker / コンテナ / 仮想化
タグ Docker , Kubernetes , コンテナ型仮想化
あわせてお読みください
前の記事
OpenStackをベースにしたハイパーコンバージド基盤ソフト「Red Hat Hyperconverged Infrastructure for Cloud 」発表