Выбор контейнерного рантайма

Содержание

Overview

Container Runtime — это ключевой компонент Kubernetes, отвечающий за управление жизненным циклом образов и контейнеров.

При создании кластеров через платформу вы можете выбрать в качестве компонента рантайма либо Containerd, либо Docker.

Примечание: Kubernetes версии 1.24 и выше официально больше не поддерживает Docker runtime. Официально рекомендуемый рантайм — Containerd. Если вам всё же необходимо использовать Docker runtime, сначала нужно включить cri-docker в feature gate, после чего при создании кластера можно будет выбрать Docker в качестве компонента рантайма. Подробнее о работе с feature gates смотрите в разделе Feature Gate Configuration.

Быстрый гид по выбору

Выберите ContainerdВыберите Docker
  • Более короткая цепочка вызовов
  • Меньше компонентов
  • Более стабильный
  • Меньше потребляет ресурсов узла
  • Поддержка docker-in-docker
  • Возможность использовать команды docker build/push/save/load на узлах
  • Возможность вызова Docker API
  • Поддержка docker compose или docker swarm

Отличия между Docker и Containerd

Общие команды

ContainerdDockerОписание
crictl psdocker psПросмотр запущенных контейнеров
crictl inspectdocker inspectПросмотр деталей контейнера
crictl logsdocker logsПросмотр логов контейнера
crictl execdocker execВыполнение команд в контейнере
crictl attachdocker attachПодключение к контейнеру
crictl statsdocker statsОтображение использования ресурсов контейнером
crictl createdocker createСоздание контейнера
crictl startdocker startЗапуск контейнера
crictl stopdocker stopОстановка контейнера
crictl rmdocker rmУдаление контейнера
crictl imagesdocker imagesПросмотр списка образов
crictl pulldocker pullЗагрузка образа
Nonedocker pushОтправка образа
crictl rmidocker rmiУдаление образа
crictl podsNoneПросмотр списка подов
crictl inspectpNoneПросмотр деталей пода
crictl runpNoneЗапуск пода
crictl stoppdocker imagesПросмотр образов
ctr images lsNoneОстановка пода
crictl stoppdocker load/saveИмпорт/экспорт образов
ctr images import/exportNoneОстановка пода
ctr images pull/pushdocker pull/pushЗагрузка/отправка образов
ctr images tagdocker tagТегирование образов

Отличия в цепочке вызовов

  • Docker в качестве контейнерного рантайма Kubernetes имеет следующую цепочку вызовов:

    kubelet > cri-dockerd > dockerd > containerd > runC

  • Containerd в качестве контейнерного рантайма Kubernetes имеет следующую цепочку вызовов:

    kubelet > cri plugin (в процессе containerd) > containerd > runC

Итог: Несмотря на то, что dockerd добавляет такие возможности, как swarm cluster, docker build и Docker API, он может приводить к ошибкам и добавляет дополнительный уровень в цепочку вызовов. Containerd имеет более короткую цепочку вызовов, меньше компонентов, большую стабильность и меньше потребляет ресурсов узла.

Сравнение логов и параметров

СравнениеDockerContainerd
Путь храненияПри использовании Docker в качестве контейнерного рантайма Kubernetes логи контейнеров хранятся Docker в каталогах вида /var/lib/docker/containers/$CONTAINERID. Kubelet создаёт символические ссылки в /var/log/pods и /var/log/containers, указывающие на файлы логов в этом каталоге.При использовании Containerd в качестве контейнерного рантайма Kubernetes логи контейнеров хранятся Kubelet в каталоге /var/log/pods/$CONTAINER_NAME, при этом в каталоге /var/log/containers создаются символические ссылки на файлы логов.
Параметры конфигурацииЗадаются в конфигурационном файле Docker:
"log-driver": "json-file",
"log-opts": {"max-size": "100m","max-file": "5"}
Метод 1: Задаются параметрами kubelet:
--container-log-max-files=5
--container-log-max-size="100Mi"
Метод 2: Задаются в KubeletConfiguration:
"containerLogMaxSize": "100Mi",
"containerLogMaxFiles": 5,
Сохранение логов контейнеров на диске данныхМонтировать диск данных в "data-root" (по умолчанию /var/lib/docker).Создать символическую ссылку /var/log/pods, указывающую на каталог на точке монтирования диска данных.

Сравнение CNI-сети

СравнениеDockerContainerd
Кто вызывает CNIcri-dockerdcri-plugin, встроенный в Containerd (начиная с containerd 1.1)
Как настраивать CNIПараметры cri-dockerd: --cni-conf-dir, --cni-bin-dir, --cni-cache-dirКонфигурационный файл Containerd (toml):
[plugins.cri.cni]
bin_dir = "/opt/cni/bin"
conf_dir = "/etc/cni/net.d"