Есть ли опыт работы с CRI-O?

«Есть ли опыт работы с CRI-O?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я работал с CRI-O в качестве container runtime в Kubernetes-кластерах, особенно в средах с повышенными требованиями к безопасности и минимальному потреблению ресурсов, таких как edge-вычисления или высоконагруженные продакшн-кластеры.

Мой опыт включает:

  • Установку и настройку CRI-O с нуля на чистых серверах, включая настройку CNI-плагинов (обычно cni-plugins от containerd) и storage драйверов (overlayfs).
  • Конфигурацию kubelet для работы с CRI-O:
    --container-runtime=remote 
    --container-runtime-endpoint=unix:///var/run/crio/crio.sock 
    --image-service-endpoint=unix:///var/run/crio/crio.sock
  • Настройку политик безопасности: работа с seccomp-профилями, настройка apparmor и использование userns (user namespaces) для изоляции.
  • Отладку проблем с помощью crictl (аналог docker CLI для CRI-совместимых рантаймов).

Сравнительные преимущества, которые я наблюдал на практике:

  • Легковесность и скорость: CRI-O заточен только под спецификацию Kubernetes CRI, что дает быстрый запуск подов и меньший overhead по памяти.
  • Безопасность: Более простая кодовая база и «безголовая» архитектура (нет демона Docker) уменьшают поверхность для атак. Отличная интеграция с SELinux (используется по умолчанию в RHEL/OpenShift).
  • Стабильность: Как часть проекта Kubernetes, он тесно интегрирован с релизным циклом k8s.

Основная сложность при переходе с Docker — это привыкание к инструментам отладки (crictl вместо docker) и необходимость отдельной настройки сетевого стека (CNI) и логгирования (часто через journald).