Skip to content

필사 모드: containerdアーキテクチャ内部分析

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

containerdアーキテクチャ内部分析

containerdは業界標準のコンテナランタイムで、Dockerから分離されて独立プロジェクトとして発展しました。Kubernetes CRIを実装しコンテナの全ライフサイクルを管理します。

1. containerd概要

1.1 位置と役割

Kubernetes (kubelet)

|

v (CRI gRPC)

containerd

|

v (OCI runtime)

runc / kata / gVisor

|

v

Linux kernel (namespaces, cgroups)

主な役割: イメージ管理、コンテナライフサイクル管理、スナップショット管理、ネームスペース分離、タスク管理。

1.2 コア設計原則

- **シンプルさ**: 1つのことを上手く実行

- **プラグインベース**: すべての機能がプラグインで実装

- **OCI準拠**: OCIイメージスペックとランタイムスペック遵守

- **gRPC API**: すべてのインタラクションはgRPCを通じて

2. gRPC API構造

containerdはContainers、Content、Images、Namespaces、Snapshots、Tasks、Events、LeasesのgRPCサービスを提供します。

containerdのネームスペースはKubernetesネームスペースとは異なり、containerd内部でリソースを分離するメカニズムです:

- **k8s.io**: Kubernetes(CRI)が使用

- **moby**: Dockerが使用

3. プラグインシステム

3.1 プラグインタイプ

containerdのすべての機能はプラグインで実装: Service、Snapshotter、Runtime、GC、Content Store、Metadata、Differ。

3.2 依存関係解決

起動時にすべてのプラグインの依存関係を分析し、トポロジカルソートで正しい順序で初期化します。

3.3 プラグイン設定

version = 2

[plugins."io.containerd.grpc.v1.cri"]

sandbox_image = "registry.k8s.io/pause:3.9"

[plugins."io.containerd.grpc.v1.cri".containerd]

default_runtime_name = "runc"

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]

runtime_type = "io.containerd.runc.v2"

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]

SystemdCgroup = true

4. CRI実装

containerdはCRI gRPCサービスを内蔵プラグインとして実装:

- **RuntimeService**: Pod/コンテナライフサイクル管理

- **ImageService**: イメージ管理

CRIリクエストフロー:

1. kubeletがRunPodSandbox呼び出し

2. containerdがpauseコンテナ作成

3. CNIプラグイン呼び出し

4. kubeletがCreateContainer + StartContainer呼び出し

5. containerdがshimプロセスを通じてコンテナ実行

5. Shim v2アーキテクチャ

5.1 Shimの役割

containerd --> shim (containerd-shim-runc-v2) --> runc --> container process

Shimの責任: containerd再起動時もコンテナ維持、stdin/stdout/stderr管理、終了コード収集、OOMイベント報告。

5.2 ttrpcプロトコル

Shim v2はttrpc(tiny-ttrpc)を使用。gRPCの軽量版で、protobufシリアライゼーション、Unixドメインソケット通信、低メモリ使用、HTTP/2オーバーヘッドなし。

5.3 様々なShim実装

| Shim | ランタイム | 説明 |

| :----------------------- | :--------- | :---------------------- |

| containerd-shim-runc-v2 | runc | デフォルトOCIランタイム |

| containerd-shim-kata-v2 | Kata | 軽量VMベース |

| containerd-shim-runsc-v1 | gVisor | ユーザー空間カーネル |

6. メタデータストア

containerdはBoltDBをメタデータストアとして使用。コンテナ定義、イメージメタデータ、スナップショットメタデータ、Lease情報を保存。

/var/lib/containerd/

io.containerd.metadata.v1.bolt/meta.db

io.containerd.content.v1.content/blobs/sha256/

io.containerd.snapshotter.v1.overlayfs/snapshots/

7. まとめ

containerdのプラグインベースアーキテクチャは高い拡張性と柔軟性を提供します。Shim v2のプロセス分離モデルはcontainerd再起動時もコンテナを安定的に維持し、ttrpcによる効率的な通信でオーバーヘッドを最小化します。

현재 단락 (1/54)

containerdは業界標準のコンテナランタイムで、Dockerから分離されて独立プロジェクトとして発展しました。Kubernetes CRIを実装しコンテナの全ライフサイクルを管理します。

작성 글자: 0원문 글자: 2,337작성 단락: 0/54