Kubernetes(k8s)は、コンテナを管理・オーケストレーションするためのプラットフォームですが、コンテナを実際に動かす役割は「コンテナランタイム (Container Runtime)」が担っています。
🔍 CRIとは?
CRI(Container Runtime Interface)は、Kubernetesのkubelet
と、さまざまなコンテナランタイムとの間の標準化されたインターフェース(API)です。
Kubernetesが複数のランタイムと柔軟に連携できるようにするために設計されており、kubelet
とコンテナランタイム間の通信をgRPCで行います。
🎯 CRI導入の背景
かつてのKubernetesは主にDockerに依存していましたが、以下の課題がありました:
- DockerはKubernetes専用ではなく、不要な機能が多く含まれていた
- 他の軽量ランタイム(例:containerd、CRI-O)との連携が困難だった
これを解決するため、CRIによってランタイムとkubeletを疎結合にする方針が取られました。
🧱 アーキテクチャ概要
+--------------------+
| kubelet |
+--------+-----------+
|
| gRPC (CRI)
↓
+--------+-----------+
| Container Runtime | 例: containerd, CRI-O
+--------+-----------+
↓
runc などの低レベルランタイム
🧰 対応ランタイム例
ランタイム | 概要 |
---|---|
containerd | Docker由来の軽量ランタイム。K8s公式推奨。 |
CRI-O | Kubernetes向けに開発されたシンプルなランタイム。 |
Docker | v1.24で非推奨(dockershim が削除されました)。 |
🗂️ CRIが提供する主な機能
CRIは以下のような操作をkubeletに提供します:
- Podの作成・削除
- コンテナの起動・停止
- イメージのプル
- ログの取得
📌 Kubernetes v1.24以降の注意点
Kubernetes v1.24 以降では、DockerはCRIのサポート対象外となっています。
もしDockerを使い続けたい場合は、containerdやCRI-Oへの移行が必要です。
📝 まとめ
- CRIはKubernetesとランタイム間の通信を標準化するための仕組みです。
- CRIの導入により、Kubernetesはさまざまなランタイムに対応可能となり、柔軟性が向上しました。
- 現在は
containerd
やCRI-O
が主流です。