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

Установка и настройка CRI-O на Ubuntu 22.04

• 7 min read • DevOps • Обновлено 25 Nov 2025
CRI-O на Ubuntu 22.04 — установка и настройка
CRI-O на Ubuntu 22.04 — установка и настройка

Диаграмма архитектуры CRI-O и CNI на Ubuntu

О чём эта инструкция

В этой статье вы найдёте пошаговые инструкции по установке CRI-O (контейнерного рантайма, совместимого с Kubernetes CRI и OCI) на Ubuntu 22.04. Мы рассмотрим:

  • подготовку окружения и системные требования;
  • добавление репозитория и установку CRI-O v1.24;
  • установку и конфигурацию плагинов CNI;
  • установку cri-tools и использование crictl для управления Pod и контейнерами;
  • проверку, отладку и рекомендации по безопасности;
  • альтернативы и когда выбирать другой рантайм;
  • чеклисты для администратора и разработчика.

Важно: все команды в статье предполагают выполнение от имени пользователя с правами sudo.

Основные термины (1 строка каждое)

  • CRI-O: лёгкий контейнерный рантайм, реализующий Kubernetes CRI и совместимый с OCI.
  • CNI: Container Network Interface, набор плагинов для настройки сетей контейнеров.
  • crictl: CLI для взаимодействия с CRI-совместимыми рантаймами (например, CRI-O).

Требования перед началом

  • Сервер с Ubuntu 22.04 (в примерах используется hostname server-ubuntu и IP 192.168.5.10).
  • Непривилегированный пользователь с sudo-доступом.
  • Доступ в интернет для загрузки пакетов и репозиториев.

Важно: проверяйте совместимость версии Kubernetes с CRI-O v1.24, если планируете интеграцию в существующий кластер.

1. Подготовка переменных окружения и добавление репозиториев

В примере мы устанавливаем CRI-O версии 1.24 для Ubuntu 22.04. Выполните в терминале:

export OS=xUbuntu_22.04
export CRIO_VERSION=1.24

Добавьте репозитории CRI-O (репозиторий opensuse/kubic):

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list

Добавьте GPG-ключи репозитория:

curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -

Команды добавления репозитория CRI-O и GPG-ключа

После добавления обновите индекс пакетов:

sudo apt update

Проверьте доступную версию пакета:

sudo apt info cri-o

Информация о пакете cri-o в apt

2. Установка CRI-O и запуск сервиса

Установите CRI-O и сопутствующий runtimes runc:

sudo apt install cri-o cri-o-runc

В процессе установки подтвердите ввод (Y). По завершении запустите и включите сервис, чтобы он стартовал при загрузке:

sudo systemctl start crio
sudo systemctl enable crio

Проверьте статус сервиса:

sudo systemctl status crio

Статус сервиса CRI-O после старта

Если сервис не запускается, посмотрите журналы:

sudo journalctl -u crio --since "1 hour ago"

3. Установка и настройка CNI плагинов

CNI необходим для сетевой подсистемы Pod’ов. Установим пакет containernetworking-plugins:

sudo apt install containernetworking-plugins

Установка плагина containernetworking-plugins

Откройте файл конфигурации CRI-O и укажите каталоги для CNI:

sudo nano /etc/crio/crio.conf

В секции [crio.network] измените/раскомментируйте параметры, чтобы они выглядели так:

[crio.network]

# Путь к директории с CNI-конфигурациями
network_dir = "/etc/cni/net.d/"

# Пути к директориям с бинарниками CNI
plugin_dirs = [
        "/opt/cni/bin/",
        "/usr/lib/cni/",
]

Сохраните и закройте файл. Затем замените или удалите стандартную конфигурацию моста и загрузите IPv4-ориентированную конфигурацию:

rm -f /etc/cni/net.d/100-crio-bridge.conf
sudo curl -fsSLo /etc/cni/net.d/11-crio-ipv4-bridge.conf https://raw.githubusercontent.com/cri-o/cri-o/main/contrib/cni/11-crio-ipv4-bridge.conf

Перезапустите CRI-O, чтобы применить изменения:

sudo systemctl restart crio

Проверьте статус:

sudo systemctl status crio

Проверка статуса CRI-O после настройки CNI

Примечание: конфигурация 11-crio-ipv4-bridge.conf в примере включает только IPv4. Если вам нужен IPv6 или сложные сетевые плагины (Calico, Flannel, Cilium), следуйте документации соответствующего плагина.

4. Установка cri-tools и проверка рантайма

Установите пакет cri-tools, содержащий crictl:

sudo apt install cri-tools

Проверьте версию рантайма и состояние:

crictl version
crictl info

В выводе info ожидайте поля RuntimeReady и NetworkReady.

Вывод crictl info с состоянием RuntimeReady и NetworkReady

Добавьте автодополнение для crictl в Bash:

crictl completion > /etc/bash_completion.d/crictl
source ~/.bashrc

После этого нажмите TAB при вводе crictl, чтобы увидеть автодополнение.

5. Создание Pod sandbox и контейнера через crictl

Создадим простую демонстрацию с Nginx, используя low-level JSON-конфиги crictl.

Создайте рабочую директорию:

mkdir -p ~/demo/

Создайте JSON для Pod sandbox:

cat <

Запустите sandbox:

sudo crictl runp ~/demo/sandbox_nginx.json

Посмотрите список Pod’ов:

sudo crictl pods

Пример вывода покажет Pod в состоянии Ready.

Просмотрите подробности конкретного Pod (замените id):

sudo crictl inspectp --output table 

Детали Pod sandbox в crictl inspectp

Скачайте образ nginx и проверьте список образов:

sudo crictl pull nginx
sudo crictl images

Создайте JSON для контейнера:

cat <

Создайте контейнер в поде (замените POD_ID):

sudo crictl create  ~/demo/container_nginx.json ~/demo/sandbox_nginx.json

Запустите контейнер (замените CONTAINER_ID):

sudo crictl start 

Проверьте список контейнеров:

sudo crictl ps

Добавление контейнера в Pod и его статус

Проверьте доступность Nginx по IP Pod (в примере 10.85.0.3):

curl 10.85.0.3

Доступ к nginx внутри Pod по его IP

Важно: в продакшн-кластере доступ к IP Pod обычно организует Kubernetes Service; прямой доступ по IP возможен в тестовых сетях.

Чеклист перед вводом в эксплуатацию

Администратор:

  • Проверить, что unit-файл crio запущен и перезапускается при падении.
  • Настроить логирование и ротацию логов CRI-O.
  • Убедиться в наличии правил SELinux/AppArmor, если они используются.

Разработчик:

  • Проверить совместимость образов с OCI.
  • Тестировать поведение контейнеров при ограничениях ресурсов.

Сеть/DevOps:

  • Убедиться, что CNI-плагины корректно устанавливают маршруты и iptables/ebtables правила.
  • Проверить firewall (ufw/iptables) на узле.

Безопасность и рекомендации по хосту

  • Запускайте CRI-O на минимально необходимом наборе сервисов на хосте.
  • Используйте AppArmor или SELinux профили для изоляции контейнеров.
  • Ограничьте доступ к сокету CRI, если используется.
  • Включите ротацию логов и мониторинг потребления диска/CPU.

Рекомендуется интегрировать CRI-O с системой управления секретами и реестрами с авторизацией.

Отладка и распространённые проблемы

Проблема: crio не запускается и падает с ошибкой, связанной с CNI.
Действия:

  • Проверьте файл /etc/crio/crio.conf на корректный путь plugin_dirs и network_dir.
  • Убедитесь, что бинарники CNI установлены в /usr/lib/cni или /opt/cni/bin.
  • Посмотрите вывод journalctl -u crio.

Проблема: Pod создан, но контейнер не получает IP.
Действия:

  • Убедитесь, что в /etc/cni/net.d присутствует корректный конфиг.
  • Перезапустите CRI-O и проверьте crictl info.
  • Проверьте логи CNI-плагина в системном журнале или /var/log.

Проблема: Медленная загрузка образов из реестра.
Действия:

  • Настройте локальный кэш реестра (mirror) или прокси.
  • Проверьте MTU сети и DNS-настройки.

Когда стоит выбрать альтернативы

  • containerd: если нужна широкая поддержка и интеграция с Docker-экосистемой.
  • dockerd/CRI-Dockerd: если требуется совместимость со старым Docker Engine.
  • Если вы используете специфичную сетевую политiku (Cilium/Calico), убедитесь, что выбранный рантайм протестирован с выбранным CNI.

Ментальная модель: CRI-O оптимизирован для Kubernetes и минимизирует дополнительный слой между kubelet и OCI runtime.

Мини-методология внедрения CRI-O в существующий кластер

  1. Подготовьте тестовый узел с Ubuntu 22.04.
  2. Установите CRI-O и CNI, проверьте базовые сценарии.
  3. Тестируйте с небольшим количеством Pod’ов (nginx, busybox).
  4. Нагрузочное тестирование сети и I/O.
  5. Пошагово переводите рабочие узлы в продакшн, контролируя метрики.

Быстрый чек-лист команд (Cheat sheet)

  • Установка/обновление пакетов:
sudo apt update && sudo apt install cri-o cri-o-runc containernetworking-plugins cri-tools
  • Управление сервисом:
sudo systemctl start|stop|restart crio
sudo systemctl enable crio
sudo systemctl status crio
  • Диагностика crictl:
crictl version
crictl info
sudo crictl pods
sudo crictl images
sudo crictl pull nginx
sudo crictl ps
  • Логи:
sudo journalctl -u crio -f

Роли и их обязанности при установке

Администратор узлов:

  • Установка пакетов и управление сервисами.
  • Настройка бэкапа конфигурации /etc/crio.

Сетевой инженер:

  • Настройка CNI и проверка сетевого взаимодействия.

Разработчик/QA:

  • Тестирование образов и поведение приложений при рестартах/ограничениях ресурсов.

Модель зрелости внедрения CRI-O

  • Уровень 0 — эксперимент: один тестовый узел, базовая сеть.
  • Уровень 1 — стационарная эксплуатация: несколько узлов, мониторинг и ротация логов.
  • Уровень 2 — продакшн: интеграция с CI/CD, бэкапы, политики безопасности и SLA.

Визуальная логика принятия решения (Mermaid)

flowchart TD
  A[Нужен рантайм для Kubernetes?] --> B{Да}
  A --> C{Нет}
  C --> C1[Не нужен CRI-совместимый рантайм]
  B --> D{Требуется минимальный и легковесный рантайм?}
  D --> E[Выбрать CRI-O]
  D --> F{Требуется сложная интеграция с Docker?}
  F --> G[Выбрать containerd или dockerd]
  E --> H[Тестировать в тестовом окружении]
  G --> H

Совместимость и миграция

  • Проверьте версии Kubernetes и CRI-O: несовместимость версий может привести к проблемам с API.
  • При миграции с другого рантайма тестируйте образы и сетевые политики на отдельной группе узлов.

Примеры тест-кейсов для приёмки

  • Создание Pod sandbox и контейнера: crictl runp + crictl create + crictl start.
  • Проверка сети: curl на IP Pod’а.
  • Проверка автоматики: перезагрузка узла — CRI-O и контейнеры корректно восстанавливаются.

Часто встречающиеся ошибки и их решения

  • “failed to load CNI configuration”: проверьте /etc/cni/net.d и права доступа.
  • “image pull failed”: проверьте DNS и доступ к реестру, а также авторизацию.
  • Неверный путь к плагинам CNI: подтвердите присутствие бинарников в /usr/lib/cni/.

Вопросы и ответы

Как проверить, что CRI-O использует правильный CNI?

Выполните crictl info и проверьте, что в выводе NetworkReady: true. Также проверьте содержимое /etc/cni/net.d и присутствие файлов бинарников в plugin_dirs.

Можно ли одновременно иметь на одном узле несколько CRI-рантаймов?

Технически возможно, но это усложняет конфигурацию kubelet и может привести к конфликтам. Рекомендуется один активный рантайм на узел.

Как вернуть прежнюю конфигурацию при неудачной настройке CNI?

Восстановите резервную копию /etc/cni/net.d и /etc/crio/crio.conf, затем перезапустите crio.

Нужен ли root для crictl?

Некоторые команды требуют sudo, особенно операции, взаимодействующие с контейнерными сокетами и сетями.

Заключение

Вы успешно установили CRI-O v1.24 на Ubuntu 22.04, настроили CNI-плагины, установили cri-tools и создали Pod и контейнер через crictl. Следующие шаги: интеграция в тестовый кластер Kubernetes, настройка мониторинга, политики безопасности и подготовка миграции рабочих узлов.

Важно: перед переводом в продакшн протестируйте производительность, сетевые политики и механизм обновлений.

Критерии приёмки

  • CRI-O сервис в состоянии active (running).
  • crictl info показывает RuntimeReady и NetworkReady.
  • Успешное создание Pod и контейнера, доступность приложения по сети.
  • Наличие резервных конфигураций и процедур отката.

Краткая памятка для социальных сетей

OG Title: Установка CRI-O на Ubuntu 22.04
OG Description: Пошаговый гид по установке CRI-O v1.24, настройке CNI и использованию crictl для создания Pod и контейнеров.

Поделиться: 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 быстро