Найти в Дзене
Константин Дипеж

Почему контейнеры заменят виртуальные машины?

Оглавление

Контейнеры и виртуальные машины находятся в разных областях применения. Выбор того или иного варианта зависит от задачи, которая стоит перед вами. При этом популярность контейнеров быстро растёт. Давайте разберёмся, почему это происходит.

Допустим, вы программист, и у вас есть задача разместить веб-сайт, бота или приложение.

Традиционно есть три основных варианта:

  1. Использовать собственный физический сервер
  2. Воспользоваться виртуальной машиной на хостинге
  3. Обратиться к облачным сервисам, например, Amazon EC2

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

Если администратора серверов у вас нет, обратите внимание на облачные решения. Это может быть дорого, но они избавят от многих задач, не требуют наличия специалистов и выдерживают большие нагрузки.

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

Но что, если:

  • Ваш проект недостаточно большой, чтобы платить за облачные решения типа Amazon
  • У вас нет желания заниматься администрированием
  • Вам нужна большая масштабируемость, нежели у физического сервера?

Здесь контейнеры могут быть полезными.

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

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

Идея контейнеризации существовала давно, но настоящий взлет произошел с появлением Docker. Это позволяет не писать сложные инструкции для развертывания сервисов на разных серверах, а еще избавляет от забот об ОС. Теперь код можно упаковать в контейнер, передать заказчику и быть уверенным, что всё запустится без проблем. (Docker — не единственное средство контейнеризации).

Единичный контейнер Docker — хорошо. А что, если их много? Здесь на помощь приходит Kubernetes, способный оркестрировать их.

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

Чем же контейнеры лучше виртуальных машин?

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

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

Преимущества контейнеров перед виртуальными машинами:

  • Экономят аппаратные ресурсы. ВМ с приложением — более тяжеловесный пакет, контейнер легче — его дешевле хранить и разворачивать.
  • Обеспечивают изоляцию. Контейнеры производят изоляцию на уровне ОС средствами этой самой ОС, ВМ — изоляция происходит на аппаратном уровне.
  • Оркестрация. Для оркестрации контейнеров есть Kubernetes — стандартное решение для любого облака или self hosted. А для ВМ и облаков такое писать надо самому на ansible и terraform. И под каждое облако решение будет разным.

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

Из-за своей простоты и низких требований к аппаратным ресурсам контейнеры вытесняют виртуальные машины во многих задачах. Согласно исследованию компании DataDog, более 25% их клиентов уже используют Docker-контейнеры.

-2

Однако стоит помнить, что контейнерная архитектура имеет свои нюансы: если один контейнер еще достаточно прост в использовании, то для управления Kubernetes требуется настройка и администрирование.

Так как упростить этот процесс?

Можно обратиться к услугам Managed Kubernetes у облачных провайдеров. Практически каждый крупный облачный провайдер предоставляет такие услуги. Тем не менее, настройка Kubernetes все равно потребует определенных усилий.