Докерская экосистема: планирование и оркестровка

Вступление

Инструмент Docker предоставляет все функции, необходимые для создания, загрузки, загрузки, запуска и остановки контейнеров. Он хорошо подходит для управления этими процессами в средах с одним хостом с минимальным количеством контейнеров.

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

В этом руководстве мы обсудим планировщики Docker и инструменты оркестровки. Они представляют основной интерфейс управления контейнерами для администраторов распределенных развертываний.

Планирование контейнеров, оркестровка и управление кластерами

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

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

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

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

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

Как планировщик принимает решения по планированию?

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

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

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

Какие функции управления кластером предоставляют планировщики?

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

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

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

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

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

Как мультиконтейнерные развертывания вписываются в планирование?

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

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

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

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

Что такое обеспечение?

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

Хотя конечным результатом предоставления хоста всегда должно быть наличие новой системы для работы, методология значительно варьируется в зависимости от используемых инструментов и типа хоста. Например, если хостом будет виртуальная машина, для запуска нового хоста можно использовать такие инструменты, какvagrant. Большинство облачных провайдеров позволяют создавать новые хосты с помощью API. В отличие от этого, подготовка «голого» оборудования, вероятно, потребует некоторых ручных шагов. Инструменты управления конфигурацией, такие как Chef, Puppet, Ansible или Salt, могут быть задействованы для того, чтобы позаботиться о начальной конфигурации хоста и предоставить ему информацию, необходимую для подключения к существующему кластеру.

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

Каковы некоторые общие планировщики?

С точки зрения базового планирования и управления кластером, некоторые популярные проекты:

  • fleet: Fleet - это компонент CoreOS для планирования и управления кластером. Он читает информацию о соединении для каждого хоста в кластере из etcd и обеспечивает управление сервисами, аналогичное systemd.

  • marathon: Marathon - это компонент планирования и управления услугами установки Mesosphere. Он работает с мезо для управления долгосрочными службами и предоставляет веб-интерфейс для управления процессами и контейнерами.

  • Swarm: Docker’s Swarm - это планировщик, о котором проект Docker объявил в декабре 2014 года. Он надеется предоставить надежный планировщик, который может раскручивать контейнеры на хостах, снабженных Docker, используя собственный синтаксис Docker.

В рамках стратегии управления кластером конфигурации мезосферы основаны на следующем компоненте:

  • mesos: Apache mesos - это инструмент, который абстрагирует и управляет ресурсами всех хостов в кластере. Он представляет набор ресурсов, доступных по всему кластеру, для компонентов, построенных на его основе (например, марафон). Он описывает себя как аналог «ядра» для кластерных конфигураций.

С точки зрения расширенного планирования и управления группами контейнеров как единым целым, доступны следующие проекты:

  • kubernetes: расширенный планировщик Google, kubernetes позволяет гораздо лучше контролировать контейнеры, работающие в вашей инфраструктуре. Контейнеры могут быть помечены, сгруппированы и иметь собственную подсеть для связи.

  • compose: проект Compose Docker был создан, чтобы разрешить групповое управление контейнерами с использованием декларативных файлов конфигурации. Он использует ссылки Docker, чтобы узнать об отношениях зависимости между контейнерами.

Заключение

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

Related