Docker Ecosystem: введение в общие компоненты

Вступление

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

Докер и контейнеризация

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

Docker containerization

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

Основные преимущества Docker:

  • Lightweight resource utilization: вместо виртуализации всей операционной системы контейнеры изолируются на уровне процесса и используют ядро ​​хоста.

  • Portability: все зависимости для контейнерного приложения объединены внутри контейнера, что позволяет ему работать на любом хосте Docker.

  • Predictability: хост не заботится о том, что выполняется внутри контейнера, а контейнер не заботится о том, на каком хосте он работает. Интерфейсы стандартизированы, а взаимодействия предсказуемы.

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

Чтобы узнать больше о контейнеризации приложений с помощью Docker, щелкнитеhere.

Обнаружение служб и глобальные хранилища конфигурации

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

Docker service discovery

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

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

Некоторые из обязанностей магазинов обнаружения услуг:

  • Разрешение приложениям получать данные, необходимые для подключения к сервисам, от которых они зависят.

  • Предоставление сервисам возможности регистрировать информацию о своем соединении для вышеуказанной цели.

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

  • Хранение информации о членах кластера по мере необходимости для любого программного обеспечения для управления кластером.

Некоторые популярные инструменты обнаружения сервисов и связанные с ними проекты:

  • etcd: обнаружение сервисов / глобально распределенное хранилище ключей и значений

  • consul: обнаружение сервисов / глобально распределенное хранилище ключей и значений

  • zookeeper: обнаружение сервисов / глобально распределенное хранилище ключей и значений

  • crypt: проект для шифрования записей etcd

  • confd: следит за хранилищем "ключ-значение" на предмет изменений и инициирует перенастройку служб с новыми значениями.

Чтобы узнать больше об обнаружении сервисов с помощью Docker, посетите наше руководствоhere.

Сетевые инструменты

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

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

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

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

  • Наложение сети для упрощения и унификации адресного пространства между несколькими хостами.

  • Виртуальные частные сети адаптированы для обеспечения безопасной связи между различными компонентами.

  • Назначение подсетей для каждого хоста или приложения

  • Создание интерфейсов macvlan для связи

  • Настройка пользовательских MAC-адресов, шлюзов и т. Д. для ваших контейнеров

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

  • flannel: перекрывающая сеть, предоставляющая каждому хосту отдельную подсеть.

  • weave: наложение сети, отображающее все контейнеры в одной сети.

  • pipework: Расширенный набор сетевых инструментов для произвольно продвинутых сетевых конфигураций.

Для более подробного изучения различных подходов к работе в сети с помощью Docker щелкнитеhere.

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

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

Schedule applications

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

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

  • Запланируйте контейнер на том же хосте, что и другой данный контейнер.

  • Убедитесь, что контейнер не размещен на том же хосте, что и другой данный контейнер.

  • Поместите контейнер на хост с соответствующей меткой или метаданными.

  • Поместите контейнер на наименее загруженный хост.

  • Запустите контейнер на каждом хосте в кластере.

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

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

Некоторые популярные проекты, которые функционируют как планировщики и инструменты управления автопарком:

  • fleet: планировщик и инструмент управления кластером.

  • marathon: планировщик и инструмент управления услугами.

  • Swarm: планировщик и инструмент управления услугами.

  • mesos: служба абстракции хоста, которая объединяет ресурсы хоста для планировщика.

  • kubernetes: расширенный планировщик, способный управлять группами контейнеров.

  • compose: инструмент оркестровки контейнеров для создания групп контейнеров.

Чтобы узнать больше о программном обеспечении для базового планирования, группировки контейнеров и управления кластерами для Docker, щелкнитеhere.

Заключение

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

Related