Установка Containerd на Ubuntu 22.04: пошаговое руководство
Важно: все команды приведены для Ubuntu 22.04. Перед выполнением проверьте версии релизов на официальных страницах проектов.
Определения в одну строку
- Containerd — высокоуровневый runtime для контейнеров, реализующий спецификации OCI.
- runc — низкоуровневый инструмент для запуска контейнеров по спецификации OCI.
- CNI — плагины Container Network Interface для организации сетей контейнеров.
- nerdctl — совместимая с Docker CLI клиентская утилита для Containerd.
- SystemdCgroup — настройка, которая заставляет Containerd использовать cgroupManager systemd для управления ресурсами.
Почему выбирать Containerd
Containerd лёгкий, стабильный и хорошо интегрируется с Kubernetes через CRI. Его часто используют как runtime внутри Docker и в production-кластерах. Альтернативы: CRI-O, Docker Engine (встроен Containerd внутри), но Containerd лучше подходит, если нужна минимальная и понятная среда выполнения контейнеров.
Содержание
- Требования
- Установка вручную (бинарники)
- Установка через APT-репозиторий Docker
- Настройка SystemdCgroup и CNI
- Работа с nerdctl (примеры)
- Тесты и критерии приёмки
- Отладка и типичные ошибки
- Безопасность и рекомендации
- Интеграция с Kubernetes
- Проверка совместимости и миграция
- Контрольный список по ролям
- Быстрый SOP для установки
- Часто задаваемые вопросы
Требования
- Сервер с Ubuntu 22.04 (в примерах — хост с именем server-ubuntu).
- Непользователь root с sudo-проявами или прямой доступ root.
- Доступ в интернет для скачивания релизов и образов.
Установка Containerd вручную (через бинарные пакеты)
В этом разделе мы установим Containerd, а также runc и плагины CNI вручную, скачав официальные релизы.
- Получите последнюю версию Containerd на странице релизов GitHub и скопируйте ссылку на tar-архив.
Пример (на момент написания этого руководства версия была v1.6.8). Скачиваем и распаковываем в /usr/local:
wget https://github.com/containerd/containerd/releases/download/v1.6.8/containerd-1.6.8-linux-amd64.tar.gz
sudo tar -C /usr/local -xzf containerd-1.6.8-linux-amd64.tar.gz
- Установка runc
runc запускает контейнеры согласно спецификации OCI. Скачайте релиз runc и установите бинарник в /usr/local/sbin:
wget https://github.com/opencontainers/runc/releases/download/v1.1.3/runc.amd64
sudo install -m 755 runc.amd64 /usr/local/sbin/runc
which runc
- Установка CNI плагинов
Плагины CNI обеспечивают сетевую функциональность для контейнеров. Скачайте релиз и распакуйте в /opt/cni/bin:
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
sudo mkdir -p /opt/cni/bin
sudo tar -C /opt/cni/bin -xzf cni-plugins-linux-amd64-v1.1.1.tgz
- Генерация конфигурации Containerd
Создайте директорию /etc/containerd и сгенерируйте конфиг по умолчанию. Далее включите SystemdCgroup:
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
- Установка systemd unit-файла и запуск сервиса
Скачайте стандартный unit-файл и перезагрузите менеджер systemd:
sudo curl -L https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -o /etc/systemd/system/containerd.service
sudo systemctl daemon-reload
sudo systemctl start containerd
sudo systemctl enable containerd
sudo systemctl status containerdПроверьте, что сервис запущен и включён при старте системы.

Установка Containerd через APT (репозиторий Docker)
Этот метод удобен для обновлений через apt и автоматического разрешения зависимостей.
- Установите зависимости и инструменты для добавления репозитория:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release- Добавьте GPG-ключ Docker и репозиторий:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null- Установите пакет containerd.io:
sudo apt update
sudo apt install -y containerd.io
sudo systemctl start containerd
sudo systemctl enable containerd
sudo systemctl status containerd- Создание и изменение конфигурации
Если пакет установил конфигурацию по умолчанию, создайте резервную копию и сгенерируйте файл заново, затем включите SystemdCgroup:
sudo mv /etc/containerd/config.toml /etc/containerd/config.toml.orig
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml- Установка CNI плагинов (если требуется):
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
sudo mkdir -p /opt/cni/bin
sudo tar -C /opt/cni/bin -xzf cni-plugins-linux-amd64-v1.1.1.tgz
sudo systemctl restart containerdПосле перезапуска Containerd будет работать с SystemdCgroup и установленными CNI-плагинами.
Работа с Containerd через nerdctl
nerdctl — это CLI-инструмент, совместимый с Docker, для управления контейнерами внутри Containerd.
- Установка nerdctl
wget https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-0.22.2-linux-amd64.tar.gz
sudo tar -C /usr/local/bin -xzf nerdctl-0.22.2-linux-amd64.tar.gz
which nerdctl
- Пример: запуск nginx контейнера
sudo nerdctl run -d --name nginx -p 80:80 nginx:alpine
sudo nerdctl ps
sudo nerdctl images
curl localhost
sudo nerdctl logs nginx

Критерии приёмки
- Сервис containerd активен (Active: active (running)).
- runc доступен в PATH (which runc возвращает путь).
- CNI плагины распакованы в /opt/cni/bin и имеют права исполнения.
- nerdctl установлен и может запускать контейнеры: test curl localhost возвращает HTML-страницу nginx.
Тесты и сценарии приёмки (acceptance)
- Инсталляция по шагам без ошибок.
- Перезагрузка хоста: containerd автоматически стартует.
- Создание и удаление контейнера через nerdctl.
- Сеть: контейнер с CNI плагином может пинговать шлюз и другие контейнеры по настройке CNI.
- Логи читаются командой nerdctl logs <имя>.
Отладка и типичные ошибки
- containerd не запускается
- Просмотрите логи systemd: sudo journalctl -u containerd -b
- Проверьте синтаксис /etc/containerd/config.toml (особенно секцию cgroup).
- Ошибки с SystemdCgroup
- Если в Kubernetes node kubelet ожидает systemd, убедитесь, что SystemdCgroup = true.
- Некоторые старые дистрибутивы требуют дополнительной настройки cgroup v2.
- runc не найден
- Убедитесь, что /usr/local/sbin находится в PATH для сервисов systemd или установите runc в /usr/sbin.
- CNI плагины не применяются
- Проверьте разрешения файлов в /opt/cni/bin и корректность сетевых конфигураций в /etc/cni/net.d (если используете статические конфиги).
Безопасность и рекомендации
- Обновляйте Containerd и runc по мере выхода патчей безопасности.
- Запускайте контейнеры с минимальными привилегиями.
- Отключайте неиспользуемые плагины и проверьте права на бинарники в /usr/local и /opt.
- Для production включите журналирование и сбор метрик (например, через Prometheus + node_exporter / cAdvisor интеграцию).
Интеграция с Kubernetes
- Kubelet может использовать Containerd через CRI socket. По умолчанию socket расположен в /run/containerd/containerd.sock.
- Пример конфигурации kubelet для Containerd: в kubeadm или при запуске kubelet укажите –container-runtime=remote и –container-runtime-endpoint=unix:///run/containerd/containerd.sock.
- Убедитесь, что SystemdCgroup включён, если kubelet настроен на использование systemd cgroup driver.
Ментальная модель: Containerd — это CRI-совместимый runtime (исполнитель), kubelet — это компонент, который запрашивает от runtime создание контейнеров.
Совместимость и советы по миграции
- Проверьте версии Containerd, runc и CNI-плагинов на совместимость с вашей версией Kubernetes.
- При миграции с Docker Engine на Containerd убедитесь, что все образы доступны в image registry и сохранены в tar, если нужно.
- Для бесперебойной миграции используйте одноузловые тесты и постепенно переводите ноды кода на Containerd.
Контрольный список по ролям
Админ (Sysadmin):
- Установить бинарники и сервисы.
- Настроить SystemdCgroup.
- Проверить автозапуск и логи.
Kubernetes-админ:
- Проверить CRI socket и driver cgroup в kubelet.
- Тестировать деплойments в тестовом namespace.
Разработчик:
- Проверить локальные образы с nerdctl.
- Убедиться, что CI/CD пайплайн работает с registry.
Мини-SOP: быстрый план установки (шаблон)
- Подготовка системы: apt update, установить curl, ca-certificates, gnupg.
- Выбрать путь установки: APT или ручная установка.
- Установить runc и CNI.
- Сгенерировать /etc/containerd/config.toml и включить SystemdCgroup.
- Скопировать systemd unit и запустить сервис.
- Установить и проверить nerdctl.
- Выполнить тест запуска nginx и curl.
Критические проверки после установки
- sudo systemctl status containerd — active (running).
- which runc — путь к бинарнику.
- ls -l /opt/cni/bin — плагины присутствуют.
- sudo nerdctl run –rm hello-world — проверка выполнения контейнера.
Примеры команд сборки и проверки
Проверка версии containerd и socket:
containerd --version
sudo ss -l | grep containerdПроверка сокета CRI:
ls -l /run/containerd/containerd.sockАльтернативные подходы
- CRI-O — более узконаправленный runtime для Kubernetes.
- Docker Engine — удобен, если требуется совместимость со старым стеком, но он включает Containerd внутри.
- Использование managed Kubernetes (EKS/GKE/AKS) избавляет от ручной установки runtime.
Шаблон проверки безопасности (короткий чек-лист)
- Обновления безопасности настроены (apt unattended-upgrades или аналог).
- Бинарники находятся в каталоге с ограниченными правами.
- Логи централизованы и доступ к ним ограничен.
- Ноды изолированы сетевым фаерволом.
Часто задаваемые вопросы
Q: Нужны ли CNI плагины для локальной разработки?
A: Да, если вы ожидаете сетевое взаимодействие между контейнерами. Для простых тестов можно обойтись без них, но Kubernetes требует CNI.
Q: Можно ли использовать rootless режим?
A: Да. Containerd и nerdctl поддерживают rootless-режим при соответствующей настройке и поддержке ядра.
Q: Нужно ли включать SystemdCgroup для Kubernetes?
A: Рекомендуется. Многие кластеры ожидают, что cgroup driver kubelet и container runtime совпадают (обычно systemd).
Заключение
В этом руководстве описаны два надежных способа установки Containerd на Ubuntu 22.04: ручной (бинарники) и через APT-репозиторий Docker. Также показаны установка runc и CNI, базовая настройка SystemdCgroup, примеры работы через nerdctl, критерии приёмки, отладка и рекомендации по безопасности. После выполнения всех шагов у вас будет рабочая среда для запуска контейнеров и подготовки нод Kubernetes.
Резюме
- Containerd обеспечивает лёгкую и стабильную среду выполнения контейнеров.
- Доступны два основных способа установки: вручную и через репозиторий Docker.
- Обязательно установите runc и плагины CNI, включите SystemdCgroup при необходимости.
- nerdctl предоставляет интерфейс, совместимый с Docker CLI.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента