Открыть сервис

containerd

containerd — это промышленный контейнерный рантайм (runtime), предназначенный для управления жизненным циклом контейнеров на Linux- и Windows-системах. Он реализует спецификации Open Container Initiative (OCI) и выступает в качестве основного компонента для запуска и изоляции контейнерных процессов. containerd разработан как легковесный, модульный и стабильный слой, который может быть встроен в более крупные системы оркестрации, такие как Kubernetes, Docker и другие платформы.

История

Проект containerd был создан компанией Docker Inc. в 2014 году как часть экосистемы Docker. Изначально он представлял собой внутренний компонент демона Docker, отвечающий за низкоуровневые операции с контейнерами: создание, запуск, остановку и удаление. В 2017 году, в рамках стратегии открытости и модульности, Docker Inc. передала containerd в управление Cloud Native Computing Foundation (CNCF). Это решение позволило проекту развиваться независимо от Docker и стать стандартом де-факто для контейнерных рантаймов.

В 2019 году containerd достиг статуса «инкубационного» проекта в CNCF, а в 2022 году — статуса «зрелого» (graduated). Ключевые вехи развития включают поддержку Windows-контейнеров (с версии 1.3), внедрение CRI (Container Runtime Interface) для интеграции с Kubernetes, а также оптимизацию производительности и безопасности.

Архитектура и устройство

Модульная структура

containerd построен по модульному принципу. Его ядро представляет собой демон (containerd daemon), который взаимодействует с операционной системой через системные вызовы. Основные модули включают:

  • Metadata store — хранилище метаданных о контейнерах, образах и снимках (snapshots). Использует BoltDB (встроенная база данных) или другие бэкенды.
  • Snapshotter — компонент, отвечающий за управление файловыми системами контейнеров. Поддерживает overlayfs, aufs, devicemapper и другие драйверы.
  • Content store — хранилище содержимого образов (blob-ов), таких как слои файловой системы и конфигурации.
  • Task manager — управляет жизненным циклом процессов внутри контейнера (запуск, остановка, сигналы).
  • GRPC API — интерфейс для взаимодействия с внешними клиентами (например, containerd-shim, CRI).

Взаимодействие с ядром ОС

Для изоляции контейнеров containerd использует механизмы ядра Linux:

  • Namespacesизоляция процессов, сети, файловой системы, IPC и других ресурсов.
  • Cgroups — ограничение и учёт ресурсов (CPU, память, диск).
  • Seccomp — фильтрация системных вызовов для повышения безопасности.
  • Capabilities — управление привилегиями процессов.

На Windows containerd использует аналогичные механизмы, такие как Job Objects и Hyper-V изоляция.

containerd-shim

Ключевой компонент containerd — containerd-shim. Это процесс-посредник, который запускается для каждого контейнера и обеспечивает его изоляцию от основного демона. Shim выполняет следующие функции:

  • Запускает процесс контейнера с использованием низкоуровневого рантайма (runc, kata, gVisor).
  • Передаёт сигналы (SIGTERM, SIGKILL) процессу контейнера.
  • Обеспечивает работу контейнера даже после перезапуска основного демона containerd.
  • Собирает и передаёт логи (stdout/stderr) и метрики.

Классификация и виды

По типу рантайма

containerd поддерживает несколько низкоуровневых рантаймов, реализующих спецификацию OCI:

  • runc — стандартный рантайм, использующий cgroups и namespaces. Является наиболее распространённым.
  • Kata Containers — рантайм, обеспечивающий аппаратную виртуализацию для каждого контейнера (через гипервизор).
  • gVisor — рантайм, эмулирующий системные вызовы в пользовательском пространстве, что повышает безопасность.
  • Firecracker — микровиртуализация, используемая в AWS Lambda и Fargate.

По способу интеграции

  • Встроенный в Docker — containerd используется как стандартный рантайм начиная с Docker Engine 1.11.
  • Автономный — containerd может работать как самостоятельный сервис, управляемый через CLI (ctr) или API.
  • Через CRI — интеграция с Kubernetes через Container Runtime Interface (CRI). containerd является одним из наиболее популярных CRI-рантаймов.

Применение

В Kubernetes

containerd — один из основных контейнерных рантаймов, поддерживаемых Kubernetes. Начиная с версии 1.24, Kubernetes официально отказался от поддержки Docker в пользу containerd и других CRI-совместимых рантаймов. containerd обеспечивает:

  • Запуск подов и контейнеров.
  • Управление образами (pull, push, tag).
  • Сбор метрик и логов.
  • Интеграцию с сетевыми плагинами (CNI).

В Docker

Docker Engine использует containerd как внутренний компонент для управления контейнерами. Пользователи Docker обычно не взаимодействуют с containerd напрямую, но он отвечает за все низкоуровневые операции.

Встраиваемые системы и IoT

Благодаря лёгкости и модульности, containerd применяется в embedded-системах, устройствах Интернета вещей (IoT) и edge-вычислениях. Например, в проектах Balena, KubeEdge и OpenYurt.

Промышленные и серверные среды

containerd используется в крупных облачных провайдерах (AWS, Google Cloud, Azure) для управления контейнерами в production-средах. Он обеспечивает стабильность, низкую задержку и эффективное использование ресурсов.

Сравнение с другими рантаймами

ХарактеристикаcontainerdDocker (полный стек)CRI-O
Размер~50 МБ~200 МБ~100 МБ
ЗависимостиМинимальныеПолный стек (docker CLI, buildx, compose)Минимальные
Поддержка CRIДа (нативная)Через cri-dockerdДа (нативная)
Поддержка WindowsДа (с версии 1.3)ДаНет
МодульностьВысокаяСредняяВысокая
Популярность в KubernetesОчень высокаяСнижаетсяВысокая

Интересные факты

  • containerd поддерживает «ленивую загрузку» образов (lazy pulling) через технологию stargz (Seekable Tar GZip), что ускоряет запуск контейнеров.
  • containerd может работать без root-привилегий в режиме rootless, используя пользовательские пространства имён (user namespaces).
  • containerd является основой для многих коммерческих продуктов, включая Docker Desktop, Mirantis Container Runtime и Rancher.
  • containerd поддерживает snapshotter на основе overlayfs, что позволяет эффективно использовать дисковое пространство при работе с несколькими контейнерами на основе одного образа.
  • containerd имеет встроенную поддержку seccomp и AppArmor для усиления безопасности контейнеров.

Критика и ограничения

  • containerd не предоставляет средств для сборки образов (build) — для этого требуется отдельный инструмент, например, buildkit или Docker build.
  • containerd не имеет встроенного оркестратора — для управления кластерами контейнеров необходимо использовать Kubernetes или другие системы.
  • containerd не поддерживает прямую работу с Docker Compose — для запуска многоконтейнерных приложений требуется дополнительная настройка.
  • containerd требует определённой квалификации для настройки и администрирования, особенно в нестандартных средах (например, с нестандартными snapshotter-ами).

Источники

  • Официальная документация containerd (github.com/containerd/containerd)
  • Cloud Native Computing Foundation (CNCF) — containerd project overview
  • Kubernetes documentation — Container Runtimes
  • Open Container Initiative (OCI) — Runtime Specification
  • Docker Inc. — история containerd
  • Статьи и публикации на Habr, Medium, Opensource.com

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →