Выбор программного обеспечения для управления кластерами / планирования задач

Вопрос или проблема

Мы ищем возможность развернуть микросервисы, которые будут работать в облаке (облако на данный момент неизвестно).

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

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

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

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

Я рассмотрел много фреймворков, но запутался, потому что все они, похоже, подходят под мои требования (Mesos, Kubernetes, Ignite и другие).

Что вы порекомендуете, учитывая все эти требования (или некоторые из этих требований), и может ли решение быть принято независимо от облака, на котором работает кластер, или некоторые облака предоставляют эти возможности самостоятельно, и тогда нет смысла разделять решение?

Это короткий ответ основан на моих текущих знаниях основных облачных провайдеров.
Я предполагаю, что вы собираетесь развертывать в AWS, GCP или Azure.
Я знаю, что на Azure и GCP есть автоматическое развертывание для Apache Mesos.
Для Kubernetes GKE (Google Container Engine) фактически является кластером Kubernetes. Если ваш кластер небольшой (<= 5 узлов), то дополнительных затрат на мастер не будет. Скоро Azure также предоставит быстрый установщик для K8s. Я не знаю, предоставляет ли AWS такие простые установки, но поскольку это один из наиболее используемых облачных провайдеров, есть множество примеров для настройки кластера.

Что касается другого требования: “Также нам нужна возможность планирования задач, что означает, что на основе некоторого расписания задача будет создана и отправлена на один из узлов микросервиса, но выполнение каждой итерации может зависеть от статуса предыдущей итерации.”
В Mesos у вас есть Chronos для планирования задач, но он охватывает только часть запуска. То, что вам нужно, не будет покрыто менеджером кластера, но должно быть решено с помощью такого фреймворка, как Spring Batch, например.

Ответ или решение

При выборе программного обеспечения для управления кластерами и планирования задач в контексте развертывания микросервисов в облаке необходимо учитывать несколько ключевых аспектов, изложенных в вашем запросе. Мы рассмотрим такие решения, как Kubernetes и Apache Mesos, а также альтернативные инструменты.

1. Оценка требований

Среди основных требований, представленных вами, можно выделить:

  • Масштабируемость: возможность добавления или удаления узлов для каждого микросервиса.
  • Распределение задач: распределение заданий между узлами с актуализацией статуса выполнения.
  • Обработка ошибок: механизмы возврата в случае неудачного выполнения задач и обеспечение отказоустойчивости.
  • Планирование задач: возможность создания задач по расписанию с учетом зависимости между итерациями.

2. Рассмотрение инструментов

Kubernetes

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

  • Масштабируемость: Kubernetes позволяет автоматически добавлять или удалять узлы, что отлично подходит для динамически изменяющихся нагрузок.
  • Управление состоянием: обеспечивается автоматическое перезапуск задач на новом узле в случае сбоя.
  • Интеграция с другими инструментами: рядом дополнительных инструментов (например, Helm для управления пакетами) можно легко реализовать функционал планирования и распределения задач. Для планирования задач к Kubernetes можно использовать такие решения, как CronJobs и внешние планировщики.

Apache Mesos

Apache Mesos также предоставляет надежные функции для управления кластером:

  • Гибкость: поддерживает множество фреймворков для управления ресурсами и запуском контейнеров.
  • Chronos: хороший инструмент для планирования, но, как вы отметили, он ограничен лишь запуском задач. Для более комплексного решения можно рассмотреть использование Marathon вместе с Chronos или интеграцию с Spring Batch для управления зависимостями и состоянием задач.

Другие решения

Некоторые другие open-source решения, которые стоит рассмотреть:

  • Nomad от HashiCorp: простой в использовании планировщик заданий, который может быть полезен в малых и средних кластерах.
  • Argo Workflows для Kubernetes: подходящее решение для управления заданиями и выполнением сложных последовательностей.

3. Экосистема облачных провайдеров

В зависимости от выбранного облачного провайдера (AWS, GCP, Azure), могут быть встроенные возможности для развертывания и управления кластерами. Например:

  • AWS предлагает EKS (Elastic Kubernetes Service), с легкостью обеспечивающий запуск и управление кластерами Kubernetes.
  • GCP предоставляет готовый к использованию сервис GKE (Google Kubernetes Engine), который также позволяет без дополнительной оплаты использовать небольшие кластеры.
  • Azure предлагает интеграцию с Kubernetes и другие полезные инструменты для управления контейнерами.

4. Рекомендация

Для вашего проекта я рекомендую начать с Kubernetes, учитывая его широкие возможности и поддержку со стороны облачных провайдеров. Он действительно универсален и способен адаптироваться к вашим требованиям. Вместе с помощью дополнительных инструментов (например, Argo Workflows для управления задачами и Spring Batch для обработки зависимостей) вы можете создать мощное решение для управления микросервисами.

Заключение

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

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

Капча загружается...