Container Service for Kubernetes (ACK) は、containerd、Sandboxed-Container、Docker の 3 種類のコンテナランタイムをサポートしています。本ドキュメントでは、サポートされるクラスタータイプ、機能制限、デプロイメントアーキテクチャ、CLI コマンドを比較し、ワークロードに適したランタイムを選択するための情報を提供します。
Docker ランタイムは廃止されました。クラスターで Docker を使用している場合は、containerd に移行してください。手順については、「Docker から containerd への移行」をご参照ください。
Kubernetes ノードにおけるコンテナランタイムの位置付け
コンテナランタイムは、各ノード上でコンテナの実行とライフサイクルを管理します。kubelet はコンテナランタイムインターフェース (CRI) を介してランタイムと通信し、コンテナの起動、停止、監視を行います。使用するランタイムの選択により、隔離モデル、サポートされるノードタイプ、およびコンテナ管理に使用する CLI ツールが決まります。
ACK は以下のランタイムをサポートしています。
-
containerd — ほとんどのワークロードに推奨されるランタイムです。軽量で CRI に直接準拠しており、中間のデーモンレイヤーがありません。
-
Sandboxed-Container — 軽量 VM (runV) を使用して、各 Pod を分離されたカーネル内で実行します。
-
Docker (廃止済み) — 非推奨となり、メンテナンスも終了しています。containerd に移行してください。
実装と制限事項の比較
|
機能 |
containerd |
Sandboxed-Container |
Docker (メンテナンス終了) |
|
クラスタータイプ |
|
|
すべての種類の ACK クラスター |
|
Kubernetes バージョン |
バージョン 1.20 以降 |
Kubernetes 1.16 以降 |
Kubernetes 1.22 以前 |
|
ノードタイプ |
|
ECS ベアメタルインスタンスファミリーのみサポートされます |
ECS |
|
ノードオペレーティングシステム |
Container Service for Kubernetes は、Alibaba Cloud Linux 3 コンテナ最適化版、ContainerOS、Alibaba Cloud Linux 3、Ubuntu、Windows などのオペレーティングシステム向けパブリックイメージを提供しています。詳細については、「オペレーティングシステム」をご参照ください。 |
|
|
|
コンテナエンジン |
containerd |
containerd |
Docker |
|
モニタリング |
サポートされています |
サポートされています |
サポートされています |
|
コンテナログ収集 |
サポートされています |
手動でのサイドカー注入が必要です。「CRD を使用してサイドカー方式でコンテナのテキストログを収集する」をご参照ください。 |
サポートされています |
|
コンテナ stdout 収集 |
サポートされています |
サポートされています |
サポートされています |
|
RuntimeClass |
サポートされていません |
サポートされています (runV) |
サポートされていません |
|
Pod スケジューリング |
構成は不要です。 |
以下のルールに基づいて構成を追加する必要があります。
|
構成は不要です。 |
|
HostNetwork |
サポートされています |
サポートされていません |
サポートされています |
|
ノードデータディスク |
任意 |
必須です。データディスクは 200 GiB 以上である必要があります。 |
任意 |
|
ネットワークプラグイン |
|
|
|
|
kube-proxy モード |
|
|
|
|
ボリュームプラグイン |
CSI プラグイン (ACK Edge クラスターを除く) |
CSI プラグイン |
CSI プラグイン |
|
コンテナルートファイルシステム |
OverlayFS |
ディスククォータ構成付き OverlayFS |
OverlayFS |
Docker と Sandboxed-Container を同じノード上にデプロイすることはできません。クラスター内で両方のランタイムタイプを実行するには、Docker ランタイム用ノードプールと Sandboxed-Container ランタイム用ノードプールを別々に作成してください。
Sandboxed-Container は containerd 上に実装されています。kubectl get node コマンドで Sandboxed-Container ノードを確認したり、ACK コンソールでノード一覧を表示したりすると、ランタイムは containerd と表示されます。
デプロイメントアーキテクチャの比較
デプロイメントアーキテクチャは、kubelet からコンテナまでのコンポーネント呼び出しチェーンを示しています。レイヤーが少ないほど、オーバーヘッドや運用の複雑さが低くなります。
|
ランタイム |
デプロイメントアーキテクチャ |
|
Docker |
|
|
containerd |
|
|
Sandboxed-Container v2 |
|
containerd は Docker に必要な dockerd レイヤーを削除し、kubelet がランタイムに直接 CRI 経由でアクセスできるようにします。Sandboxed-Container v2 は containerd を拡張し、追加の shim (containerd-shim-runv2) を使用して runV により軽量 VM 内で Pod を実行することで、標準の runC コンテナと同一ノード上でカーネルレベルの隔離を実現します。
containerd および Docker の CLI コマンド
containerd と Docker は、イメージおよびコンテナを管理するための異なる CLI ツールを使用します。crictl は CRI レベルで動作し、Kubernetes 環境間で一貫性があるため、containerd に推奨されるツールです。ctr は containerd の低レベル CLI であり、代替として利用可能です。
|
操作 |
crictl (containerd 推奨) |
ctr (containerd 低レベル CLI) |
docker |
|
コンテナの照会 |
|
|
|
|
コンテナの詳細情報の照会 |
|
|
|
|
コンテナログの照会 |
|
N/A |
|
|
コンテナ内でのコマンド実行 |
|
N/A |
|
|
ローカルの stdin、stdout、stderr をコンテナにアタッチ |
|
N/A |
|
|
リソース使用量統計の照会 |
|
N/A |
|
|
コンテナの作成 |
|
|
|
|
コンテナの起動 |
|
|
|
|
コンテナの停止 |
|
ctr -n k8s.io task pause <container> |
|
|
コンテナの削除 |
|
|
|
|
イメージの照会 |
|
|
|
|
イメージの詳細情報の照会 |
|
N/A |
|
|
イメージのプル |
|
|
|
|
イメージのプッシュ |
N/A |
|
|
|
イメージの削除 |
|
|
|
|
Pod の照会 |
|
N/A |
N/A |
|
Pod の詳細情報の照会 |
|
N/A |
N/A |
|
Pod の起動 |
|
N/A |
N/A |
|
Pod の停止 |
|
N/A |
N/A |