Kubernetes и Docker: почему все испугались?
Недавно разработчики Kubernetes анонсировали изменение: с версии 1.20 Kubernetes перестанет использовать Docker как исполняемую среду контейнеров. И тут сообщество начало бить в набат. “Как можно отказаться от Docker, если все с ним работают?”
Просто надо читать дальше, чем заголовки новостей. Оказывается, что всё не так страшно.
Что нам сообщили в Kubernetes?
В Kubernetes вместо Docker будут использовать среду на базе Container Runtime Interface (CRI), созданного специально для K8s. Образы Docker будут и дальше работать в средах выполнения.
Конечные юзеры Kubernetes почти не заметят разницы, а Docker всё равно остаётся прекрасным инструментом для сборки контейнеров. docker-build образы так же будут работать с Kubernetes.
Если вы пользуетесь GKE или EKS, убедитесь в работе воркеров с поддерживаемой версией исполняемой среды до окончания поддержки Docker. Обновите продвинутые настройки с учетом актуальных требований к среде выполнения и окружению.
Во время обновления до 1.20 вы получите уведомление о неактуальности Docker, а полностью от него откажутся с версии 1.23 в конце 2021 года. Тогда придётся перейти на совместимую среду с поддержкой выбранного вами докер-демона.
От чего переполох?
В Kubernetes есть container runtime — исполняемая среда контейнеров. Она отвечает за загрузку и запуск образов контейнеров. Docker популярен для организации этой среды, но он не разработан для интеграции с K8s.
В Docker есть высокоуровневая среда для контейнеров containerd, которая лишь часть всего стека. Сам Docker популярен из-за кучи дополнений для упрощения взаимодействия разработчика с инструментом. Но UX-решения не так важны в Kubernetes.
K8s приходится взаимодействовать с containerd через инструмент Dockershim вместо взаимодействия напрямую. Эту прослойку тоже нужно обслуживать, она может баговать и создавать проблемы. Это просто лишняя ступень. Поэтому в Kubernetes v1.23 Dockershim удалят из Kubelet, и Docker лишится поддержки как среда.
Если вы используете сокет Docker в обычном рабочем процесса, после перехода на другую среду работать с ним не получится.
Докерфайлам жить?
Docker создаёт OCI-образы, а они все одинаковы для Kubernetes независимо от инструмента для их сборки. Стандарт никто не отменял, поэтому изменений для разработки совсем нет.
Нововведение не добавляет проблем, а упрощает взаимодействие в перспективе. Вам либо не нужно делать вовсе ничего, либо заняться минимальной настройкой, чтобы всё стало ещё удобнее.