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を通じて直接やりとりすることになり、軽量な実装の利点を得ることが可能になります。

参考
関連記事
あわせて読みたい
1000万IOPSを誇るDell EMCの新ハイエンドストレージ「PowerMax」、高性能の背後にあるNVMeや機械学習などについて責任者に聞いた
≪前の記事
OpenStackをベースにしたハイパーコンバージド基盤ソフト「Red Hat Hyperconverged Infrastructure for Cloud 」発表