Containerd — это промышленный контейнерный runtime (среда выполнения), созданный компанией Docker и переданный в фонд CNCF (Cloud Native Computing Foundation). Он выполняет базовые задачи по запуску и управлению жизненным циклом контейнеров и считается «эталоном» минималистичного и надёжного runtime для Kubernetes и облачных сред.
Основные функции
- Запуск и остановка контейнеров (через низкоуровневый runtime ).
runc
- Управление образами: загрузка, кеширование, хранение и удаление.
- Работа с томами и snapshotter’ами: управление файловыми системами контейнеров.
- Сетевые интеграции: через плагины (CNI).
- gRPC API: позволяет управлять контейнерами из внешних инструментов.
Контейнерная экосистема
- Docker использует containerd как «движок» для запуска контейнеров.
- Kubernetes может напрямую работать с containerd через CRI plugin (в отличие от Docker, где раньше был прослойка dockershim).
- Поддерживает OCI-стандарты (Open Container Initiative), поэтому совместим с любыми образами и runtime.
Пример проверки runtime в Kubernetes
kubectl get node -o jsonpath='{.items[*].status.nodeInfo.containerRuntimeVersion}' # Вывод: containerd://1.7.11
Преимущества
- Минимализм: выполняет только функции runtime, без лишних инструментов (в отличие от Docker).
- Надёжность: разработан для работы в продакшн-кластерах с высокой нагрузкой.
- Гибкость: поддержка разных snapshotter’ов (OverlayFS, btrfs, ZFS).
- Поддержка CNCF: активно развивается и используется в ведущих облаках (AWS EKS, GKE, AKS).
Где применяется
- В Kubernetes как стандартный runtime.
- В облачных провайдерах (Google Cloud, AWS, Azure).
- В локальной разработке (Docker Desktop, nerdctl).
Для клиента
containerd гарантирует, что контейнеры будут запускаться стабильно и одинаково везде: от ноутбука разработчика до облачного кластера. Это снижает риск «эффекта разных окружений» и делает инфраструктуру предсказуемой.
Сегодня containerd — это стандарт де-факто для Kubernetes, пришедший на смену связке «Docker + dockershim».
Сравнение containerd и CRI-O
Характеристика | containerd | CRI-O |
---|---|---|
Происхождение | Разработан Docker, передан в CNCF | Создан Red Hat и сообществом Kubernetes |
Поддержка стандартов | OCI (образы и runtime), универсальный | OCI (образы и runtime), специально для Kubernetes |
Интеграция с Kubernetes | Работает через встроенный CRI plugin | Изначально создан как реализация CRI |
Функции | Управление образами, снапшотами, сетями, runtime | Минималистичный runtime: запуск контейнеров и управление ими |
Совместимость | Используется и в Kubernetes, и вне его (Docker, nerdctl) | Заточен только под Kubernetes |
Гибкость | Поддержка множества snapshotter’ов и плагинов | Поддержка разных OCI runtime (runc, Kata Containers) |
Надёжность | Стандарт по умолчанию в EKS, GKE, AKS | Используется в OpenShift и OKD |
Применение | Универсальное решение: локальная разработка + продакшн | Корпоративные кластеры, где нужна максимальная совместимость с K8s |
Ресурсы | Чуть «тяжелее», так как универсален | Лёгкий и минималистичный |
Кратко:
- containerd — универсальный runtime: можно использовать и в Kubernetes, и вне его.
- CRI-O — узкоспециализированный runtime: создан исключительно для Kubernetes.