Помимо виртуализации, контейнеры развиваются чрезвычайно быстрыми темпами. Главная задача данной статьи – рассказать об основах виртуализации и дать основное понятие для дальнейшего изучения и объяснить разницу между виртуальной машиной и контейнером. В заключение обсудим связь между контейнерами и хранилищами.
Основы Виртуализации
Виртуализация — это создание вычислительной среды, в которой на основе одних и тех же аппаратных ресурсов работает множество отдельных друг от друга виртуальных машин. Данный процесс похож на формирование одного или нескольких виртуальных компьютеров в рамках физической машины. Другими словами, речь идет о разработке версий программного обеспечения для различных физических объектов (компьютеров, хранилищ данных, сетей, серверов и приложений).
Гипервизор – это тип компьютерного программного обеспечения, который создает и управляет виртуальными машинами, разделяя физическое оборудование от операционных систем и приложений. Он позволяет одному физическому хосту управлять несколькими виртуальными машинами, что повышает эффективность использования ресурсов, таких как память, сетевая пропускная способность и процессорное время.
Виртуальные Машины и Контейнеры
Виртуализация – это технология, которая позволяет создавать виртуальные экземпляры аппаратных ресурсов, позволяет запускать программное обеспечение в изолированных на уровне операционной системы пространствах. эти виртуальные экземпляры, называемые виртуальными машинами (ВМ), могут работать независимо друг от друга и могут имитировать работу отдельных физических компьютеров. Основные поставщики рынка платформ виртуализации – VMware, Microsoft Hyper-V, Virtual Box, Xen и другие.
Контейнеры работают поверх базового оборудования и основной ОС, совместно используя ОС. Они упаковывают приложения в переносимые исполняемые блоки со всеми зависимостями, необходимыми для работы в любом месте, например на серверах, ноутбуках и в облаках. Среди популярных инструментов для работы с контейнерами – LXC (Linux Containers), Docker, Kubernetes и другие.
Монолитная и Микросервисная Архитектура
Монолитная архитектура – это традиционная модель программного обеспечения, построенная как цельный продукт с единой кодовой базой и независимая от других приложений. Основным преимуществом монолитной архитектуры является простота разработки и техподдержки, так как приложение очень простое и основано на единой кодовой базе.
Микросервисные архитектуры для разработки приложений выросли из этого распространения контейнеров. Использование контейнеров, микросервисы разбивают приложение на небольшие независимые компоненты, каждый из которых выполняет конкретную функцию. Эти сервисы могут разрабатываться и внедряться независимо друг от друга но взаимодействуют они через сеть по протоколонезависимой технологии. Микросервисы не уменьшают сложность, но они делают комплексность различимой и более легкой в управлении, разбивая задачи на более мелкие процессы, которые работают самостоятельно, но вносят свой вклад в результат.
К примеру, допустим, у вас есть приложение, позволяющее покупателям приобретать товары. У вас есть поисковая строка, корзина, кнопка покупки и т. д. Каждый из этих “сервисов” может работать в собственном контейнере, таким образом, если строка поиска выйдет из строя из-за высокой нагрузки, это не приведет к сбою всех сервисов.
Виртуальные Машины vs. Контейнеры
Без необходимости перевозить весь код ОС контейнеры имеют меньший вес (мегабайты vs. гигабайты у ВМ) и быстрее запускаются, чем ВМ. С помощью контейнеров на одном сервере можно запускать за раз в два-три раза больше приложений, чем с помощью виртуальных машин.
Исходя только из этого, можно утверждать, что контейнеры – это ключевое будущее применение.
Примеры Использования Виртуальных Машин и Контейнеров
И у виртуальных машин, и у контейнеров есть свои преимущества и недостатки, а выбор зависит от ваших конкретных потребностей.
Виртуальная машина является лучшим выбором для запуска приложений, требующих всех ресурсов и функциональности ОС, когда вам нужно запустить несколько приложений на серверах или управлять широким спектром ОС. Если у вас есть существующее монолитное приложение, которое вы не планируете или не хотите модернизировать для создания микросервисов, ВМ вполне устроит вас.
Применение контейнеров станет наилучшим выбором, если вашим главным приоритетом является максимальное количество приложений или сервисов, работающих на минимальном количестве серверов, при этом нужна максимальная переносимость. В случае если вы разрабатываете новое приложение и хотите использовать архитектуру микросервисов для масштабируемости и переносимости, контейнеры – это то, что нужно.
Внедрение Контейнеров для Кластера Требует Внешнего Хранилища
Преимущество контейнеров в том, что их можно быстро наращивать или уменьшать в зависимости от нагрузки. Pod состоит обычно из одного или нескольких контейнеров, хранилища (storage). В кластере, когда нагрузка снижается, поды могут быть опущены из-за падения нагрузки, сбоев процессов или по другим причинам. На данном этапе необходимо записать состояние приложения, чтобы новые экземпляры (новые Pods) при запуске получали текущее состояние. Постоянное хранилище сохраняет данные, когда устройство выключено. Поэтому приложение должно хранить информацию о состоянии вне Pod.
Первоначально предполагалось, что контейнеры не потребуют постоянного хранения данных, однако растущее число реализаций показало, что при работе с контейнерными приложениями необходима непрерывность. Например, в случае остановки контейнера, содержащего часть приложения, проще создать его заново (локально или удаленно) с существующими данными, чем восстанавливать или копировать их из другого места.
Вы можете указать внешнее хранилище в качестве постоянного хранилища при создании Pod, по сути, монтируя внешний том в контейнер. Контейнер, запущенный в Pod, может получить доступ к внешнему хранилищу, как и к любому другому локальному хранилищу.
CSI-драйвер Соединяет Контейнеры с Устройствами для Хранения
CSI (Container Storage Interface) – Стандарт предоставления произвольных блоков и
систем хранения файлов контейнерным рабочим нагрузкам в системах CO (Container Orchestration), таких как Kubernetes, Mesos, Docker или Cloud Foundry. Оркестровка контейнеров – это автоматизация и управление жизненным циклом контейнеров и услуг рабочих нагрузок и сервисов. Все это включает в себя широкий спектр задач, необходимых командам разработчиков программного обеспечения для управления инициализации, развертывания, масштабирования, сетевого взаимодействия, балансировки нагрузки и т. д. Поставщики СХД предоставляют плагин CSI для работы с различными системами оркестровки контейнеров.
Заключение
Одним словом, виртуальные машины помогают компаниям максимально эффективно задействовать ресурсы инфраструктуры, увеличивая количество машин, доступных при ограниченном количестве аппаратного и программного обеспечения. Контейнеры помогают компаниям максимально эффективно эксплуатировать ресурсы разработки с помощью микросервисов и практик DevOps. Кластерные архитектуры требуют внешнего хранилища для совместного использования состояния и ресурсов приложения. И CSI выступает в роли посредника между контейнерами и хранилищем.