hostprofi.ru
Подобрать хостинг
Термин·буква C

Containerd

краткое определение

Containerd — среда выполнения контейнеров (container runtime) уровня ядра, управляющая жизненным циклом контейнеров: pull образов, запуск, остановка, удаление. Docker использует containerd внутри с версии 18.09.

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>.

Другие термины