Введение в компоненты системы CoreOS

Что такое CoreOS?

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

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

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

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

Системный дизайн

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

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

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

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

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

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

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

Базовый обзор Docker

Docker - это система контейнеров, которая использует LXC, также известный как контейнеры Linux, и использует пространство имен ядра и cgroups для изоляции процессов.

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

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

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

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

Базовый обзор Etcd

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

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

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

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

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

Базовый обзор флота

Чтобы фактически организовать кластеры CoreOS, которые вы создаете, используется инструмент под названием + fleet +. Довольно простая концепция, флот действует как общекластерная система инициализации.

Каждый отдельный узел в кластерной среде использует свою собственную обычную систему инициализации + systemd +. Это используется для запуска и управления службами на локальном компьютере. В упрощенном смысле флот предоставляет интерфейс для управления каждой из систем кластера "+ systemd +".

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

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

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

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

Заключение

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

Чтобы узнать больше о том, как начать, ознакомьтесь с нашим руководством на getting кластер CoreOS и работает на DigitalOcean.

Related