Компоненты системы CoreOS: вступление

Что такое CoreOS?

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

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

Для общекластерного планирования запуска и управления приложениями используется инструмент под названием fleet (общекластерная система инициализации, init). Этот инструмент позволяет легко настроить приложения высокой доступности (high availability) и управлять кластером из одной точки. Он работает в связке с системой инициализации systemd каждой отдельной ноды.

Данное руководство знакомит с некоторыми базовыми понятиями CoreOS, а также кратко описывает каждый из основных компонентов, необходимых для работы системы.

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

Общее проектирование CoreOS ориентировано на кластеризацию и контейнеризацию.

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

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

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

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

Демон fleet является распределенной системой инициализации. Он работает за счет подключения к системе инициализации systemd каждой отдельной нодой в кластере. Fleet обрабатывает планирование сервисов на основе заданных пользователем критериев.

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

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

Обзор программы Docker

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

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

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

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

Краткий обзор etcd

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

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

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

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

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

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

Обзор Fleet

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

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

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

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

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

Итоги

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

Tags: , , , , , , , , , ,

Добавить комментарий