В официальном блоге разработчиков Kubernetes вышла новость, которая на первый взгляд звучит пугающе: Kubernetes отказывается от Docker.

Мы разобрались, что это значит для пользователей Kubernetes, в том числе для тех, кто использует наш облачный сервис — вместе с Александром Волынским, архитектором облачной платформы Mail.ru Cloud Solutions, и Павлом Селивановым, ведущим DevOps-инженером Mail.ru Cloud Solutions.

Что случилось на самом деле

В Kubernetes есть интерфейс CRI, который позволяет использовать разные среды выполнения контейнеров, например Docker, cri-o или containerd. Docker сам по себе не поддерживает CRI, поэтому разработчики Kubernetes создали прослойку — dockershim, она задумывалась только как временное решение. Такая прослойка — своеобразный «костыль», тормозит развитие CRI, не поддерживает cgroups v2 и user namespaces, а также имеет некоторые проблемы с безопасностью.

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

«Kubernetes станет безопаснее и надежнее. Docker не создавался с учетом использования внутри Kubernetes. Теперь убирают поддержку одной части Docker, выполняющую одну из десятков функций внутри большой схемы Kubernetes. Ее заменяют на cloud-native среду, которая лучше приспособлена к работе в такой сложной системе».

Александр Волынский, архитектор облачной платформы Mail.ru Cloud Solutions

Docker-контейнеры будут работать как прежде: что же изменится для разработчиков, администраторов и пользователей KaaS

Для разработчиков ничего не изменится, они также продолжат пользоваться Docker-контейнерами. Просто эти контейнеры будут выполняться в другой среде. Упрощая, можно сказать, что внутри черного ящика меняется механизм работы, но входные и выходные параметры от этого не изменятся. Снаружи ящика все будет работать, как раньше.

Это возможно, так как Docker создает образы по общепринятому стандарту OCI. Любой OCI-совместимый образ, независимо от способа его создания, будет работать в Kubernetes одинаково.

«Изменения затрагивают только способ запуска контейнеров внутри кластера Кубернетис. Для конечных пользователей ничего не изменится. Они все также смогут описывать свои образы с помощью Dockerfile и собирать из с помощью docker build».

Павел Селиванов, ведущий DevOps-инженер Mail.ru Cloud Solutions

Изменения затронут администраторов кластеров, которые запускают их on-premise, при обновлении старой версии на новую. Нужно будет перейти на одну из совместимых исполняемых сред — например, containerd или CRI-O. Стоит убедиться, что выбранная среда поддерживает ваши конфигурации Docker-демона, такие как логирование.

Пользователям Kubernetes как сервис волноваться не о чем: поддержкой и обновлениями кластера занимается провайдер, скорее всего, ничего делать не придется.

«Клиентам нашего Kubernetes не нужно никак готовиться. Образы Docker продолжат работать внутри Kubernetes, а мы также сможем запускать их в наших кластерах. Как провайдеру, нам предстоит решить вопрос обновления, но пользователей это не затронет. Мы постараемся сделать максимально бесшовную миграцию. Если в каких-то продвинутых сценариях понадобятся изменения со стороны пользователей, подготовим подробные инструкции и поможем.

Кроме того, до обновления еще долго — у нас версия Kubernetes 1.17, как проверенная и стабильная, а полностью уберут поддержку только в версии 1.23. У нас достаточно времени полностью подготовиться и внести нужные изменения».

Александр Волынский, архитектор облачной платформы Mail.ru Cloud Solutions

До полного прекращения поддержки еще год. В релизе 1.20 Kubernetes будет просто помечать среду выполнения Docker как устаревшую. А окончально она удалится не раньше релиза 1.23, который планируется в конце 2021 года.