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

О чём эта инструкция
В этой статье вы найдёте пошаговые инструкции по установке 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 -
После добавления обновите индекс пакетов:
sudo apt updateПроверьте доступную версию пакета:
sudo apt info cri-o
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
Если сервис не запускается, посмотрите журналы:
sudo journalctl -u crio --since "1 hour ago"3. Установка и настройка CNI плагинов
CNI необходим для сетевой подсистемы Pod’ов. Установим пакет containernetworking-plugins:
sudo apt install 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
Примечание: конфигурация 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 в 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 
Скачайте образ 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
Проверьте доступность Nginx по IP Pod (в примере 10.85.0.3):
curl 10.85.0.3
Важно: в продакшн-кластере доступ к 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 в существующий кластер
- Подготовьте тестовый узел с Ubuntu 22.04.
- Установите CRI-O и CNI, проверьте базовые сценарии.
- Тестируйте с небольшим количеством Pod’ов (nginx, busybox).
- Нагрузочное тестирование сети и I/O.
- Пошагово переводите рабочие узлы в продакшн, контролируя метрики.
Быстрый чек-лист команд (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 и контейнеров.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента