containerd
containerd — daemon для управления жизненным циклом контейнеров. Извлечён из Docker в 2016, стал самостоятельным CNCF-проектом. Основа Docker, Kubernetes (после ухода Docker), nerdctl.
Стек
Пользователь (docker CLI / kubectl / crictl / nerdctl)
↓
Daemon (dockerd, kubelet, ...)
↓
containerd ← этот
↓
runc (OCI runtime)
↓
Linux kernel (namespaces, cgroups)
Что делает
- Скачивает образы
- Разворачивает слои (snapshotter: overlayfs, btrfs, zfs)
- Управляет lifecycle контейнеров
- Мониторит процессы, проксирует stdout/stderr
- Metrics, logs
CRI
CRI (Container Runtime Interface) — gRPC API, которым kubelet общается с runtime. containerd имплементирует CRI напрямую. K8s → containerd, без Docker.
CLI
| CLI | Для чего |
|---|---|
ctr | low-level debug, из коробки |
crictl | K8s CRI, стандартизованный |
nerdctl | Docker-CLI-совместимый (compose тоже) |
nerdctl
# всё как docker
nerdctl run -d --name web nginx:alpine
nerdctl ps
nerdctl exec -it web sh
nerdctl compose up
Docker → containerd в K8s (2020)
K8s deprecated dockershim (v1.20), удалил (v1.24). Причина: dockerd — лишний слой над containerd. Kubernetes использует containerd напрямую через CRI.