Может ли Kubernetes реализовать контейнер, который не является контейнером Docker?
Kubernetes может организовать контейнер, не являющийся Docker, и это из-за кри-о
Как объяснено в Кубич :
Вопреки тому, что вы, возможно, слышали, тамЕсть больше способов запуска контейнеров, чем просто инструмент docker
.
На самом деле число вариантов увеличивается, например:
runc : инструмент CLI для порождения и запуска контейнеров в соответствии со спецификацией OCI .
( OCI: Инициатива открытых контейнеров : открытая структура управления дляявная цель создания открытых отраслевых стандартов для форматов контейнеров и времени выполнения)
rkt из CoreOS , в настоящее время (июнь 2019 г.) почти мертв,и с множественные нерешенные проблемы безопасности .
фракция : чСреда выполнения контейнеров на основе ypervisor для Kubernetes, которая позволяет Kubernetes запускать контейнеры и контейнеры непосредственно внутри гипервизоров через runV .
Это легковесный и портативный, но может обеспечить гораздо более сильную изоляцию снезависимое ядро, чем среды выполнения контейнеров на основе пространства имен linux.
cri-containerd : плагин Containerd для интерфейса среды выполнения контейнера Kubernetes (запущенкак автономный cri-containerd
двоичный файл, который сейчас ( с марта 2018 ) закончен.cri-containerd
переходит от автономного двоичного файла, который обращается к containerd
, к плагину в containerd
.
и более.
Большинство из них следуют стандарту OCI , определяющему, как среды выполнения запускают и запускают ваши контейнеры , но их не хватаетстандартный способ взаимодействия с оркестратором .
Это усложняет работу таких инструментов, как kubernetes, которые запускаются поверх среды выполнения контейнера, обеспечивая вам оркестровку, высокую доступность и управление.
Поэтому Kubernetes ввел стандартный API, чтобы иметь возможность общаться и управлять средой выполнения контейнера.Этот API называется Interface Runtime Interface (CRI), декабрь 2016 .
Существующие среды выполнения контейнеров, такие как Docker, используют «shim» ( dockershim ) для взаимодействия междуKubernetes и время выполнения, но есть и другой способ, используя интерфейс, который был разработан для работы с CRI изначально.И вот тут-то и появляется CRI-O.
Введение в CRI-O
Начавшись чуть более года назад, CRI-O начался как проект инкубатора Kubernetes, реализующий интерфейс CRI.для OCI-совместимых сред выполнения.
Используя облегченную среду выполнения RunC для фактического запуска контейнеров, простейшим способом описания CRI-O была бы легкая альтернатива движку Docker, специально предназначенному для работы с Kubernetes.
По состоянию на 6 сентября 2018 CRI-O больше не является проектом инкубатора, но теперь является официальной частью семейства инструментов Kubernetes.
Итакважно иметь постоянное состояние cri-o, чтобы получить связь между Kubernetes и контейнерами, которые он организует.
См. " Cloud Native Computing Foundation принимает среду выполнения CRI-O + учебное пособие "
Включает схему архитектуры:

Последовательность запуска нового модуля
- Плоскость управления Kubernetes связывается с kubelet, чтобы запустить модуль.
kublet
перенаправляет запрос к демону CRI-O через CRI kubernetes (интерфейс среды выполнения контейнера) для запуска нового модуля. - Загруженное изображение распаковывается в корневые файловые системы контейнера с использованием библиотеки контейнеров / хранилища.
- После создания rootfs для контейнера CRI-O генерирует json-файл спецификации среды выполнения OCI, описывающий, как запустить контейнер.
- CRI-O затем запускает среду выполнения, совместимую с OCI, используя спецификацию для запускаКонтейнерный процесс.
По умолчанию время выполнения OCI runc
. - Каждый контейнер контролируется отдельным
conmon
процессом. - Сеть для модуля настраивается с помощью CNI (Контейнерный сетевой интерфейс) , поэтому любой плагин CNI можно использовать с CRI-O.