コンテナランタイム「containerd 2.0」がまもなく登場。何が変わるのか?
今回は「コンテナランタイム「containerd 2.0」がまもなく登場。何が変わるのか?」についてご紹介します。
関連ワード (到達、変更、比較的地味等) についても参考にしながら、ぜひ本記事について議論していってくださいね。
本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。
コンテナランタイムの代表的な実装の1つである「containerd」の初のメジャーバージョンアップとなる「containerd 2.0」の開発が進んでいます。
今年(2024年)3月に最初のリリース候補版「v2.0.0-rc.0」が登場し、6月には「v2.0.0-rc.3」まで進捗しているため、数カ月以内には正式版が登場すると思われます。
containerdのこれまで
もともとcontainerdはDockerコンテナの一部として実装され、2016年に独立したオープンソースプロジェクトとなりました。現在でもDockerのコンテナランタイムとして採用されています。
参考:Dockerエンジンのコアランタイムが「containerd」として分離、独立したオープンソースプロジェクトに。Docker、AWS、Google、IBM、マイクロソフトらが協力して開発推進へ
2017年3月にCloud Native Computing Foundationに寄贈された後、7月にバージョン1.0に到達しています。
2018年にリリースされたcontainerd 1.1では、Kubernetesの標準APIであるContainer Runtime Interface (CRI)に対応しました。
高レベルコンテナランタイムと低レベルコンテナランタイム
containerdは、いわゆる高レベルコンテナランタイムとして外部とのインターフェイスやコンテナイメージを管理する役割なども備えており、実際にコンテナを実行する低レベルランタイムには「runC」を採用しています。
参考:コンテナランタイムの仕組みと、Firecracker、gVisor、Unikernelが注目されている理由。 Container Runtime Meetup #2
containerd 2.0で何が変わる?
このcontainerdのメジャーバージョンアップとなるcontainerd 2.0では何が代わるのでしょうか? リリース候補版では次のような説明が示されています。
The first major release of containerd 2.x focuses on the continued stability of containerd’s core feature set with an easy upgrade from containerd 1.x. This release includes the stabilization of new features added in the last 1.x release as well as the removal of features which were deprecated in 1.x. The goal is to support the vast community of containerd users well into the future along with their ever increasing deployment footprints and variety of use cases.
初めてのメジャーリリースであるcontainerd 2.xは、containerd 1.xからの容易なアップグレードと、containerdのコア機能セットの継続的な安定性にフォーカスしています。本リリースには、前回の1.xリリースで追加された新機能の安定化と、1.xで非推奨となった機能の削除が含まれています。その目的は、containerdの大きなユーザーコミュニティと、増大するデプロイメントの範囲および様々なユースケースを将来にわたってサポートすることです。
この説明でcontainerd 1.xからのアップグレードの容易性と安定性にフォーカスしていると説明されているように、containerd 2.0は比較的地味なメジャーバージョンアップのようです。
ソフトウェアの実行基盤として使われるcontainerdのバージョンアップとしては、これは適切なコンセプトと言えそうです。
containerd 2.0ではNRIとCDIがデフォルトで有効に
もちろんメジャーバージョンアップに伴って多くの新機能や変更なども行われますが、いずれも大きな新機能や変更というものではないようです。その中から重要そうなものを2つ紹介しましょう。
NRI(Node Resource Interface)がデフォルトで有効に
NRI(Node Resource Interface)はKubernetes上のコンテナに対してスケジューリング、CPUやメモリなどのパラメータの参照や変更を行うインターフェイスを提供します。containerd 2.0からデフォルトで有効になります。
CDI(Container Device Interface)がデフォルトで有効に
コンテナからGPUなどのデバイスへのアクセスを抽象化するCDI(Container Device Interface)がcontainerd 2.0でデフォルトで有効になり、GPUなどのデバイスサポートを容易にします。