Containerd — высокопроизводительная среда выполнения контейнеров (container runtime), соответствующая спецификации OCI. Управляет образами, снапшотами файловой системы и процессами контейнеров. Docker Engine использует containerd как внутренний рантайм с версии 18.09; Kubernetes поддерживает containerd напрямую с версии 1.20, без Docker-proxy.
Как работает
Containerd принимает команды через gRPC-интерфейс (CRI — Container Runtime Interface). При запуске контейнера он: скачивает образ из Docker Hub или приватного registry, распаковывает слои файловой системы через снапшоттер (overlayfs по умолчанию), передаёт финальный бандл в runc — низкоуровневый рантайм, создающий изолированные процессы через namespaces и cgroups ядра Linux.
Архитектура daemon-процесса containerd состоит из нескольких подсистем: content store (хранение blob-ов образов), metadata store (BoltDB), снапшоттер, tasks API. Каждая подсистема независима и заменяема.
В Kubernetes kubelet обращается к containerd через CRI-плагин, минуя Docker Socket. Это убирает лишний прокси-слой и снижает латентность запуска пода на 10-15%.
История
Docker Inc. выделила containerd в отдельный проект в декабре 2016 года и передала в CNCF (Cloud Native Computing Foundation) в марте 2017-го. Версия 1.0 вышла в декабре 2017 года. В 2020 году Kubernetes объявил о deprecation dockershim и с версии 1.24 (май 2022) удалил его, сделав containerd и CRI-O основными runtime. Сегодня containerd — наиболее распространённый container runtime в production Kubernetes-кластерах.
Виды снапшоттеров
- overlayfs — дефолтный, использует overlay-файловую систему Linux. Требует ядро ≥ 3.18.
- btrfs — для хостов с Btrfs. Поддерживает эффективные снапшоты на уровне ФС.
- devmapper — legacy, использовался в RHEL 7 до появления overlayfs.
- native — полное копирование, без слоёв. Медленно, только для тестов.
Связь с хостингом
Провайдеры облачного хостинга и VDS-платформ используют containerd для изоляции контейнеров клиентов. На managed Kubernetes (GKE, EKS, AKS) containerd — стандартный runtime. При выборе тарифа важно уточнять версию containerd: 1.6+ поддерживает Kubernetes 1.26+; устаревшие версии ограничивают доступные функции пода.
Ключевые отличия от Docker
Docker — инструмент для разработчиков с CLI, build-engine и compose. Containerd — только runtime без build-функций. Docker внутри использует containerd; при прямом использовании containerd в кластере убирается лишний daemon-процесс и socket-proxy, что снижает overhead.
Инструменты управления
ctr — низкоуровневый CLI containerd. nerdctl — Docker-совместимый CLI для containerd: команды идентичны Docker, но работают напрямую с containerd без Docker daemon. crictl — CRI-ориентированный инструмент для отладки контейнеров в Kubernetes.
# Список контейнеров через nerdctl
nerdctl ps
# Запуск контейнера
nerdctl run -d --name nginx nginx:alpine
# Список образов
nerdctl images
На что обращать внимание
containerd не предоставляет Docker Compose — для локальной разработки используйте Docker Desktop или nerdctl compose. На серверах с Kubernetes напрямую управлять containerd не нужно — всё делает kubelet. При проблемах с запуском Pod проверяйте статус контейнера через crictl ps и crictl logs <container-id>.