Перейти к основному содержимому

Предпосылки возникновения оркестрации

Container Evolution

Традиционная эра развертывания

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

Эра виртуализации

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

Виртуальная машина – полноценна ОС с собственными квотами ресурсов (CPU, память, оборудование), следовательно, каждая VM тратит ресурсы сервера на обслуживание ОС (около 25%).

Эра контейнеризации

Контейнеры похожи на виртуальные машины, но они запущены в рамках одной ОС в user mode и с точки зрения ОС – это обычные процессы. Подобно виртуальной машине, контейнер имеет свою собственную файловую систему, процессор, память, пространство процесса и многое другое. Изоляция доступа и квотирование ресурсов достигается с помощью встроенных примитивов ОС (cgroups и namespaces).

Поскольку они не завязаны на конкретную реализацию ОС, а работают через API вызовы, они переносимы между облаками и дистрибутивами ОС.