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 |
---|---|
|
|
Containerd | Docker | Описание |
---|---|---|
crictl ps | docker ps | Просмотр запущенных контейнеров |
crictl inspect | docker inspect | Просмотр деталей контейнера |
crictl logs | docker logs | Просмотр логов контейнера |
crictl exec | docker exec | Выполнение команд в контейнере |
crictl attach | docker attach | Подключение к контейнеру |
crictl stats | docker stats | Отображение использования ресурсов контейнером |
crictl create | docker create | Создание контейнера |
crictl start | docker start | Запуск контейнера |
crictl stop | docker stop | Остановка контейнера |
crictl rm | docker rm | Удаление контейнера |
crictl images | docker images | Просмотр списка образов |
crictl pull | docker pull | Загрузка образа |
None | docker push | Отправка образа |
crictl rmi | docker rmi | Удаление образа |
crictl pods | None | Просмотр списка подов |
crictl inspectp | None | Просмотр деталей пода |
crictl runp | None | Запуск пода |
crictl stopp | docker images | Просмотр образов |
ctr images ls | None | Остановка пода |
crictl stopp | docker load/save | Импорт/экспорт образов |
ctr images import/export | None | Остановка пода |
ctr images pull/push | docker pull/push | Загрузка/отправка образов |
ctr images tag | docker 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 имеет более короткую цепочку вызовов, меньше компонентов, большую стабильность и меньше потребляет ресурсов узла.
Сравнение | Docker | Containerd |
---|---|---|
Путь хранения | При использовании 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 , указывающую на каталог на точке монтирования диска данных. |
Сравнение | Docker | Containerd |
---|---|---|
Кто вызывает CNI | cri-dockerd | cri-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" |