Рубрики
Uncategorized

Kubernetes VS Docker: Понимание контейнеров в 2021 году

Несколько недель назад команда разработки Kubernetes объявила, что они обесценивают докер. Этот пирог … Теги от Кубернаны, Докер, Дежол, начинающие.

Несколько недель назад команда разработки Kubernetes объявила, что они Уницирование докера Отказ Этот кусок новостей совершил раунды по технологическим сообществам и социальным сетям. Будут ли разбиваться кластеры Kubernetes, и если да, как мы будем запускать наши приложения? Что нам теперь делать? Сегодня мы рассмотрим все эти вопросы и многое другое.

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

Что такое контейнер?

Несмотря на то, что Docker используется в качестве синонима для контейнеров, реальность заключается в том, что они существовали задолго до того, как Докер был вещь. У UNIX и Linux были контейнеры в некоторой или другой форме с конца 70-х годов, когда Chroot был представлен. Chroot разрешено системные администраторы для запуска программ в доброй, но неактивной изолированной файловой системе. Позже идея была усовершенствована и усилена в контейнерные двигатели, такие как FreeBSD тюрьмы , Openvz. или Контейнеры Linux (LXC) Отказ

Но что такое контейнеры?

Контейнер — это логический раздел, где мы можем запускать приложения, изолированные от остальной части системы. Каждое приложение получает собственную частную сеть и виртуальную файловую систему, которая не передается другим контейнерам или хосту.

Запуск контейнерных приложений намного удобнее, чем установка и настройка программного обеспечения. Для одной вещи контейнеры портативны; Мы можем построить на одном сервере с уверенностью, что она будет работать на любом сервере. Другое преимущество заключается в том, что мы можем запустить несколько копий одной и той же программы одновременно без конфликта или перекрытия, что-то действительно трудно сделать иначе.

Однако для всего этого работать, нам нужен Контейнерное время выполнения , часть программного обеспечения, способного работать контейнерами.

Что такое Docker?

Docker — самая популярная контейнерная среда выполнения — длительным выстрелом. Не следует удивительно, поскольку он привел концепцию контейнеров в мейнстрим, что, в свою очередь, вдохновило создание платформ, таких как Куберанес.

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

  • Управление контейнерным жизненным циклом.
  • Прокси-запросы на контейнеры и из контейнеров.
  • Монитор и журнал контейнерной активности.
  • Установите общие каталоги.
  • Установите ограничения ресурсов на контейнерах.
  • Построить изображения. Dockerfile является форматом де-факто для создания контейнерных изображений.
  • Нажмите и потяните изображения из реестров.

В своих первых итерациях Docker использовал контейнеры Linux (LXC) в качестве бэкэнда времени выполнения. Как развивалось проект, LXC был заменен на Контейнер Дочсерская собственная реализация. Современная установка докера разделена на два сервиса: Контейнер , ответственный за управление контейнерами, а Докерд , что делает все остальное.

Что такое Кубернеты?

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

Kubernetes добавляет распределенные вычислительные функции поверх контейнеров:

  • Стручки : Стручки являются логическими группами контейнеров, которые разделяют такие ресурсы, как память, CPU, хранение и сеть.
  • Автоматическое масштабирование : Kubernetes может автоматически адаптироваться к изменению рабочих нагрузок, запустив и остановка стручков по мере необходимости.
  • Самовосстановление : Контейнеры контролируются и перезапускаются на неудачу.
  • Балансировка нагрузки : Запросы распределяются по здоровому имеющимся стручкам.
  • Развертывает : Kubernetes поддерживает автоматические развертывания и откаты. В противном случае сложные процедуры, такие как Канарейка и Сине-зеленый релизы тривиальные.

Мы можем думать о архитектуре Куберанес как комбинацию двух самолетов:

  • Управляющий самолет это координационный мозг кластера. У него есть контроллер который управляет узлами и услугами, а Планировщик который назначает стручки узлам, а API Service , который обрабатывает связь. Конфигурация и состояние хранятся в очень доступной базе данных etcd Отказ
  • Рабочие узлы машины, которые управляют контейнерами. Каждый узел работника запускает несколько компонентов, таких как Кублет Агент, сетевой прокси и время выполнения контейнера. Время выполнения контейнера по умолчанию до Cubernetes Version v1.20 было Docker.

Форматы контейнеров

Перед запуском контейнера нам нужно либо построить или загрузить Контейнерное изображение , которая представляет собой файловую систему, упакованную всем, что потребности в приложении: код, двоичные файлы, файлы конфигурации, библиотеки и зависимости.

Повышение популярности контейнеров показало необходимость стандарта открытого изображения. В результате Docker Inc и Coreos установили Открытая контейнерная инициатива (OCI) в 2015 году, с миссией производства поставщиков-нейтральных форматов. Результатом этого усилия было создание двух стандартов:

  • Спецификация изображения, которая определяет бинарный формат изображения.
  • А Спецификация времени выполнения Это описывает, как распаковать и запустить контейнер. OCI поддерживает ссылочную реализацию, называемую runc Отказ Как контейнерные, так и CRI-O используют runc на заднем плане для порождающих контейнеров.

Стандарт OCI принес совместимость между различными контейнерами. В результате изображения, построенные в одной системе, могут работать в любой другой стеке совместимых.

Докер против Кубернеты

Вот где вещи получают немного более технические. Я сказал, что каждый узел работника Kubernetes нуждается в среде выполнения контейнера. В первом Оригинальный дизайн , Докер был неотделимым от Куберанес, потому что это было единственное время выполнения.

Докер, однако, никогда не был предназначен для пробежки в Кубейнетах. Понимая эту проблему, разработчики Kubernetes в конечном итоге реализовали API под названием Интерфейс времени выполнения контейнера (CRI). Этот интерфейс позволяет вам выбрать среди различных контейнеров запуска, что делает платформу более гибкой и менее зависимой от докера.

Это изменение представило новую трудность для команды Kubernetes, поскольку Docker не знает или поддерживает CRI. Следовательно, в то же время был введен API, они должны были написать адаптер под названием Dockershim переводить сообщения CRI в Docker-Special Commands.

Амортизация докера

В то время как Докер был первым и только поддерживает двигатель на некоторое время, он никогда не был на долгосрочных планах. Kubernetes версия 1.20 Универсает докершим снимая переход от докера.

После того, как переход сделан, стек становится значительно меньше. Это идет от этого:

К этому:

Результатом меньше блуждания и меньшее количество зависимостей, необходимых на каждом из рабочих узлов.

Итак, почему изменение?

Проще говоря, Докер тяжелый. Мы получаем лучшую производительность с легким временем выполнения контейнера, такими как Containerd или CRI-O Отказ Как недавний пример, Google ориентиры показали, что контейнер потребляет меньше памяти и процессора, и что стручки начинаются за меньшее время, чем на Docker.

Кроме того, в некоторых способах самого докера можно считать Технический долг Отказ Что нуждается в Kubernetes от Docker, на самом деле, это время выполнения контейнера: Containerd. Остальные, по крайней мере, насколько касается Кубератеса, является накладным расходом.

Как Kubernetes снижает сомнение Docker, влияет на вас?

Вещи не так драматичны, как они звучат. Давайте предивием все это раздел, сказав единственное, что изменяется в V1.20, заключается в том, что вы получите предупреждение о снижении, только если вы бежите Docker. Это все.

Могу ли я еще использовать Docker для разработки?

Да, вы абсолютно можете, сейчас и в обозримом будущем. Вы видите, Docker не работает Docker-специфичные изображения; Он запускает CoCi-совместимые контейнеры. Пока докер продолжает использовать этот формат, Kubernetes будет принимать их.

Могу ли я по-прежнему упаковать мои производственные приложения с Docker?

Да, по тем же причинам, что и в предыдущем вопросе. Приложения, упакованные с Docker, будут продолжать работать — нет никаких изменений. Таким образом, вы все еще можете создавать и тестировать контейнеры с помощью инструментов, которые вы знаете и любите. Вам не нужно менять свой CI/CD трубопроводы Или переключитесь на другие реестры изображений, образы, произведенные доке, будут продолжать работать в вашем кластере, так как у них всегда есть.

Что мне нужно изменить?

Прямо сейчас ничего. Если ваш кластер использует Docker в качестве временной среды, вы получите предупреждение о снижении после обновления до V1.20. Но изменение является четким сигналом от сообщества Kubernetes о том направлении, которое они хотят взять. Пришло время начать планирование на будущее.

Когда произойдет изменения?

План состоит в том, чтобы все докерные зависимости полностью удалены по V1.23 в конце 2021 года Отказ

Когда докершим уходит, что произойдет?

В этот момент администраторы Cubernetes Cluster будут вынуждены переключаться на CRO-совместимое время выполнения контейнера.

Если вы конечный пользователь Не много меняется для вас. Если вы не бегаете какой-то Настройки узла Вам, вероятно, не придется делать что-то особенное. Только проверьте, что ваши приложения работают с новым временем выполнения контейнера.

Это некоторые из вещей, которые будут вызывать проблемы или перерыв после обновления до V1.23:

  • Используя Docker-Speed Logging и мониторинг. То есть, разборка докеровных сообщений из журнала или опроса докера API.
  • Используя Docker Optimizations.
  • Запуск сценариев, которые полагаются на Докер CLI.
  • Бег команды докера в привилегированных стручках. Например: создавать изображения с Docker Build Отказ Смотрите такие проекты, как Канико Для альтернативных решений.
  • Используя Docker-In-Docker Setups.
  • Запуск контейнеров Windows. Containerd делает работу в Windows, но уровень поддержки еще не до Docker’s. Цель состоит в том, чтобы иметь стабильный выпуск контейнера для Windows by Контейнерная версия 1.20 Отказ

Если вы используете управляемый кластер На облачном провайдере, как AWS EKS, Google GKE или Azure Aks, убедитесь, что ваш кластер использует поддерживаемое время выполнения до завершения поддержки Docker. Некоторые облачные продавцы — это несколько версий, поэтому у вас может быть больше времени для планирования. Итак, проверьте с вашим провайдером. Чтобы привести пример, Облако Google объявило, что изменяют время выполнения по умолчанию из Docker в Containerd для всех недавно созданных узлов работников, но вы все равно можете отказаться от докера.

Если вы запустите свой собственный кластер : В дополнение к проверке упомянутых выше точек вам нужно будет оценить переход к другому времени выполнения контейнера, которая полностью совместима с CRI. Документы Kubernetes подробно объясняют шаги:

В качестве альтернативы, если вы хотите продолжать использовать Docker прошлой версии 1.23, следуйте за Cri-Dockerd Проект, который планирует держать докер как жизнеспособная альтернатива времени выполнения.

Заключение

Кубернаны растет, но изменение не должно быть травматическим опытом. Большинство пользователей не придется принимать какие-либо действия. Для тех, кто делает, есть еще время для проверки и плана.

Чтобы продолжить узнать о Docker и Kubernetes, прочитайте следующие:

Оригинал: «https://dev.to/semaphore/kubernetes-vs-docker-understanding-containers-in-2021-132i»