Fleet (a distributed init system)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 11:45, 17 декабря 2015.
Fleet
Разработчик {{#property:p112}}

Введение

fleet (общекластерная система инициализации) - инструмент инициализации в дистрибутиве Linux - CoreOS - позволяющий легко настроить приложения высокой доступности и управлять кластером из одной точки. Он работает в связке с системой инициализации systemd каждого отдельного узла. Система также может применяться и в других дистрибутивах, но для её использования необходимо установить и сконфигурировать fleet на каждой машине кластера.

CoreOS

CoreOS – дистрибутив Linux, созданный для выполнения масштабных развертываний в простой инфраструктуре. Основанная на Chrome OS, CoreOS поддерживает легкую систему хостов и использует для всех приложений контейнеры Docker. Эта система обеспечивает изоляцию процессов, а также позволяет приложениям легко перемещаться по кластеру.
Для управления кластерами и передачи данных конфигурации между узлами CoreOS использует распределенное хранилище типа «ключ-значение» под названием etcd. Также этот компонент является платформой обнаружения сервисов (Service discovery), что позволяет приложениям динамически настраиваться на основе общедоступной информации.
Для общекластерного планирования запуска и управления приложениями используется fleet (общекластерная система инициализации, init).

Системное проектирование

Главная система хостов относительно проста и предшествует многим из общих особенностей традиционных серверов. На самом деле, в CoreOS даже нет менеджер пакетов. Вместо этого все дополнительные приложения работают как docker-контейнеры, что обеспечивает изоляцию, мобильность и возможность внешнего управления сервисами.
При загрузке CoreOS читает определяемый пользователем конфигурационный файл по имени cloud-config, чтобы выполнить начальную настройку. Этот файл позволяет CoreOS соединиться с другими пользователями кластера, запустить необходимые сервисы и перенастроить важные параметры. Именно благодаря этому система CoreOS способна немедленно подключиться к кластеру в качестве рабочего блока.
Обычно файл cloud-config, как минимум, сообщает хосту, как присоединиться к существующему кластеру, а затем говорит хосту загрузить два сервиса, etcd и fleet. Все эти три действия тесно связаны; именно благодаря этой последовательности действий новый хост может подключиться к существующим серверам и запустить инструменты, необходимые для настройки и управления каждым нодом в кластере. В целом, это все требования к начальной загрузке узла в кластер.

Docker

Docker – это система контейнеризации на уровне системы LXC (также известной как Linux containers), которая использует пространство имен ядра (kernel namespacing) и контрольные группы (cgroups) для изоляции процессов.

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

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

Система CoreOS использует Docker-контейнеры для всего программного обеспечения, кроме небольшого набора включенных в базовую установку программ. Это означает, что почти все программы запускаются внутри контейнера. Сначала это может показаться неудобным; все же эта программа значительно упрощает оснащение кластера необходимыми инструментами. Системой CoreOS следует управлять в первую очередь на уровне кластера, а не на уровне отдельных серверов.


etcd

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

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

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

Чтобы получить доступ к данным etcd, а также иметь возможность читать и изменять их, можно использовать простой интерфейс HTTP/JSON (доступен по http://127.0.0.1:4001/v2/keys/ по умолчанию) или утилиту etcdctl. Оба эти способа достаточно просты и интуитивно понятны.

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

fleet

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

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

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

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

Любой из узлов может быть использован для управления кластером с помощью утилиты fleetctl. Эта утилита позволяет планировать сервисы, управлять узлами и узнать общее состояние систем. Программа fleetctl – основной интерфейс кластера. Благодаря fleet пользователи могут рассматривать кластер как цельный блок вместо того, чтобы беспокоиться о каждом отдельном сервере.[1]

Литература

  1. Amber:Компоненты системы CoreOS