Гид по технологиям

Установка Containerd на Ubuntu 22.04: пошаговое руководство

• 7 min read • DevOps • Обновлено 25 Nov 2025
Установка Containerd на Ubuntu 22.04
Установка 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 вручную, скачав официальные релизы.

  1. Получите последнюю версию 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

Скачивание архива Containerd и распаковка в /usr/local

  1. Установка 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

Проверка установки runc и путь к бинарнику

  1. Установка 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

Распаковка CNI плагинов в /opt/cni/bin

  1. Генерация конфигурации 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

Генерация конфигурации Containerd

  1. Установка 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


Установка Containerd через APT (репозиторий Docker)

Этот метод удобен для обновлений через apt и автоматического разрешения зависимостей.

  1. Установите зависимости и инструменты для добавления репозитория:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
  1. Добавьте 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
  1. Установите пакет containerd.io:
sudo apt update
sudo apt install -y containerd.io
sudo systemctl start containerd
sudo systemctl enable containerd
sudo systemctl status containerd
  1. Создание и изменение конфигурации

Если пакет установил конфигурацию по умолчанию, создайте резервную копию и сгенерируйте файл заново, затем включите 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
  1. Установка 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.

  1. Установка 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

Проверка установки nerdctl

  1. Пример: запуск nginx контейнера
sudo nerdctl run -d --name nginx -p 80:80 nginx:alpine
sudo nerdctl ps
sudo nerdctl images
curl localhost
sudo nerdctl logs nginx

Запуск nginx контейнера через nerdctl Список образов в nerdctl Проверка ответа nginx через curl Логи контейнера 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 <имя>.

Отладка и типичные ошибки

  1. containerd не запускается
  • Просмотрите логи systemd: sudo journalctl -u containerd -b
  • Проверьте синтаксис /etc/containerd/config.toml (особенно секцию cgroup).
  1. Ошибки с SystemdCgroup
  • Если в Kubernetes node kubelet ожидает systemd, убедитесь, что SystemdCgroup = true.
  • Некоторые старые дистрибутивы требуют дополнительной настройки cgroup v2.
  1. runc не найден
  • Убедитесь, что /usr/local/sbin находится в PATH для сервисов systemd или установите runc в /usr/sbin.
  1. 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: быстрый план установки (шаблон)

  1. Подготовка системы: apt update, установить curl, ca-certificates, gnupg.
  2. Выбрать путь установки: APT или ручная установка.
  3. Установить runc и CNI.
  4. Сгенерировать /etc/containerd/config.toml и включить SystemdCgroup.
  5. Скопировать systemd unit и запустить сервис.
  6. Установить и проверить nerdctl.
  7. Выполнить тест запуска 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.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро