Что такое CRI-O?

CRI-O — это легковесная альтернатива Docker, специально разработанная для Kubernetes. Это реализация Container Runtime Interface (CRI), которая позволяет Kubernetes запускать контейнеры без необходимости в полнофункциональном Docker daemon. CRI-O фокусируется только на том, что нужно Kubernetes, обеспечивая высокую производительность и безопасность.

Основные возможности CRI-O

  • OCI совместимость — поддержка стандарта Open Container Initiative
  • Минимальная архитектура — только необходимые для Kubernetes функции
  • Высокая безопасность — изоляция процессов и строгий контроль доступа
  • Поддержка различных runtime — runc, crun, kata-runtime
  • Интеграция с systemd — управление жизненным циклом через systemd

Установка CRI-O

Для установки CRI-O в Ubuntu/Debian:

 1# Добавление репозитория
 2OS=xUbuntu_20.04
 3VERSION=1.28
 4echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
 5echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
 6
 7# Установка ключей
 8curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | apt-key add -
 9curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | apt-key add -
10
11# Установка CRI-O
12apt update
13apt install cri-o cri-o-runc

Для установки через пакетные менеджеры Python:

1# Установка инструментов для работы с CRI-O
2pip install cri-o-client
3poetry add cri-o-client

Настройка CRI-O

Основной конфигурационный файл `/etc/crio/crio.conf`:

 1[crio.runtime]
 2# Путь к runtime
 3default_runtime = "runc"
 4
 5[crio.runtime.runtimes.runc]
 6runtime_path = "/usr/bin/runc"
 7runtime_type = "oci"
 8
 9[crio.image]
10# Настройки образов
11default_transport = "docker://"
12
13[crio.network]
14# Сетевые настройки
15network_dir = "/etc/cni/net.d/"
16plugin_dirs = ["/opt/cni/bin/"]

Интеграция с Kubernetes

Настройка kubelet для использования CRI-O:

1# В файле /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
2Environment="KUBELET_EXTRA_ARGS=--container-runtime=remote --container-runtime-endpoint=unix:///var/run/crio/crio.sock --image-service-endpoint=unix:///var/run/crio/crio.sock"
3
4# Запуск сервисов
5systemctl enable crio
6systemctl start crio
7systemctl restart kubelet

Управление контейнерами

Основные команды для работы с CRI-O через crictl:

 1# Список контейнеров
 2crictl ps
 3
 4# Список образов
 5crictl images
 6
 7# Информация о контейнере
 8crictl inspect CONTAINER_ID
 9
10# Логи контейнера
11crictl logs CONTAINER_ID
12
13# Выполнение команды в контейнере
14crictl exec -it CONTAINER_ID /bin/bash

Преимущества CRI-O перед Docker

  • Меньше ресурсов — отсутствие лишних компонентов Docker
  • Быстрее запуск — оптимизация для Kubernetes workloads
  • Лучшая безопасность — минимальная поверхность атаки
  • Стабильность API — следование стандартам CRI
  • Простота отладки — меньше слоев абстракции

Мониторинг и отладка

Полезные команды для мониторинга CRI-O:

 1# Статус сервиса
 2systemctl status crio
 3
 4# Логи CRI-O
 5journalctl -u crio -f
 6
 7# Информация о runtime
 8crio config
 9
10# Версия CRI-O
11crio version

Практические применения

CRI-O идеально подходит для:

  • Production Kubernetes кластеров с высокими требованиями к производительности
  • Безопасных сред с ограниченными ресурсами
  • Автоматизированных CI/CD пайплайнов
  • Edge computing и IoT устройств
  • Контейнерных платформ корпоративного уровня

FAQ

Можно ли использовать Docker образы с CRI-O?

Да, CRI-O полностью совместим с OCI и Docker образами. Ты можешь использовать любые существующие Docker образы без изменений.

Как мигрировать с Docker на CRI-O?

Миграция включает остановку Docker daemon, установку CRI-O, настройку kubelet и перезапуск узлов кластера. Процесс можно выполнить без простоя при использовании rolling update.

Поддерживает ли CRI-O Docker Compose?

Нет, CRI-O не поддерживает Docker Compose, так как предназначен исключительно для Kubernetes. Для локальной разработки с Compose продолжай использовать Docker.