Что такое облачные контейнеры и зачем они нужны

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

Фото: John Jones (<a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fflic.kr%2Fp%2FFX5GWB&postId=49699" rel="nofollow noopener" target="_blank">Flickr</a>, <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fcreativecommons.org%2Flicenses%2Fby%2F2.0%2F&postId=49699" rel="nofollow noopener" target="_blank">CC BY</a>)
Фото: John Jones (Flickr, CC BY)

Пара слов о виртуализации

Виртуализация — это разбиение аппаратного сервера на несколько виртуальных машин (ВМ). В результате вычислительные мощности распределяются между несколькими «пользователями».

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

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

Отсюда вытекает главное достоинство виртуализации: виртуальную машину можно без изменений переносить с одного сервера на другой вместе с операционной системой и приложениями.

Как работают контейнеры

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

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

Фото: Bernard Spragg. NZ (<a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fwww.flickr.com%2Fphotos%2Fvolvob12b%2F15947941600%2F&postId=49699" rel="nofollow noopener" target="_blank">Flickr</a>, PD)
Фото: Bernard Spragg. NZ (Flickr, PD)

Так как в контейнер помещается лишь одно приложение или функция, он весит намного меньше образа виртуальной машины и создается (запускается) быстрее. По этой причине их использует, к примеру, Spotify.

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

Первый узнает имя исполнителя, второй — скачивает обложку альбома, третий — текст песни и так далее. Такое «разделение обязанностей» помогает сервису обслуживать 70 млн пользователей. При этом все контейнеры изолированы друг от друга. Из-за своих небольших размеров они требуют меньше памяти и процессорной мощности, чем виртуальные машины. Они способны снизить нагрузку на серверы на 20–80%, по сравнению с ВМ.

Помимо Spotify контейнеры для разработки своих сервисов используют такие компании, как Yelp, Airbnb, Google, Microsoft, Lyft, eBay, PayPal и многие другие.

Что такое системы управления контейнерами

Система управления контейнерами (система оркестровки) — это веб-панель администрирования, которая руководит работой контейнеров. Примером может быть открытая платформа Kubernetes, разработанная Google.

Есть и другие решения — Docker, Rancher, OpenShift и так далее.

Они нужны для гибкого масштабирования виртуальной инфраструктуры. Эти системы управляют «расписанием» (говорят, когда запускать тот или иной сервис) и распределяют нагрузку на серверы, чтобы вычислительные ресурсы расходовались равномерно.

По сути системы оркестровки, например, все тот же Kubernetes, — это ланч-бокс трансформер, который хранит всю «еду» в одном месте, но предоставляет каждому «блюду» свой независимый отсек. Еду можно доставать, менять и складывать обратно, не влияя на остальное содержимое.

Фото: Melissa (<a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fflic.kr%2Fp%2Fejn5mi&postId=49699" rel="nofollow noopener" target="_blank">Flickr</a>, <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fcreativecommons.org%2Flicenses%2Fby%2F2.0%2F&postId=49699" rel="nofollow noopener" target="_blank">CC BY</a>)
Фото: Melissa (Flickr, CC BY)

Во время работы Kubernetes объединяет серверы в так называемый кластер — общую сеть, где «машины» могут взаимодействовать друг с другом. Один сервер выступает в роли «мозга» системы и управляет остальными «машинами» (их еще называют узлами). Узлы, получая инструкции от главного сервера, создают, удаляют и перемещают контейнеры.

Достоинством систем управления контейнерами является то, что вся эта «внутренняя кухня» скрыта от системного администратора или разработчика. Их задача — просто размещать контейнеры, а все остальное Kubernetes делает самостоятельно.

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

Еще одной сложностью является безопасность таких систем. Один сервис может содержать множество контейнерных приложений, что создает больше «слабых точек», которыми могут воспользоваться злоумышленники. Шанс столкнуться с уязвимостью будет меньше, если у ОС и контейнеров будет только необходимый набор инструментов.

Настроить среду Kubernetes и организовать работу с контейнерами можно самостоятельно с нуля — для этого на GitHub, где лежит исходный код проекта, предоставлены все инструкции.

Другой вариант — воспользоваться облачными сервисами (например, «Контейнеры Kubernetes» от Mail.Ru), которые автоматизируют процесс установки Kubernetes и дают оперативно менять размеры кластеров, если трафик на сайте резко вырос. В этом случае все настраивают эксперты с большим опытом работы с Kubernetes на крупных проектах.

Что запомнить

  • Контейнеры работают на уровне виртуализации операционной системы, а не «железа». Они изолированы друг от друга.
  • Для работы с контейнерами есть системы вроде Kubernetes. Они определяют, когда запускать сервисы и делят нагрузку на серверы, чтобы вычислительные ресурсы расходовались равномерно.
  • Контейнеры, их системы оркестровки и операционные системы нужно регулярно обновлять. Это простое действие значительно снижает риск взлома инфраструктуры.
  • Настроить среду Kubernetes можно самостоятельно, а можно передать эту задачу облачному сервису, специалисты которого настроят все системы и будут регулярно их обновлять.

Другие наши заметки в блоге Mail.Ru Cloud Solutions:

Наши подборки книг на vc:

66
2 комментария

Комментарий недоступен

1
Ответить

Спасибо!

1
Ответить